我工作的全文搜索功能的Spring MVC的項目中。搜索功能必須能夠搜索多個實體(可以由用戶選擇)。我爲以下函數創建了一個RequestMapping,它允許我爲模型中的@Indexed類構建索引。構建多個指標與Hibernate Search的
public void bouwIndex(HttpServletResponse response) throws InterruptedException {
OutputWriter output = new HttpResponseOutputWriter(response);
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
fullTextEntityManager.createIndexer().startAndWait();
output.writeLn("Lucene index built!");
}
比方說,我有兩個類(Profielwerkstuk和Begrip),我有註釋,並希望有索引。當@Indexed註釋添加到Profielwerkstuk類,但沒有到Begrip類並調用索引生成器URL,Profielwerkstuk得到正確和合理的時間內收錄(20秒左右),並在此指數搜索Profielwerkstukken工作完全正常。類似地,當@Indexed註釋被添加到Begrip類但不與Profielwerkstuk類,對於Begrip索引還創建正確和合理的時間內(10秒左右)。
將@Indexed類添加到Profielwerkstuk類和Begrip類並嘗試構建索引時,現在創建索引超過10小時而沒有完成(我在10小時後終止了它),問題就出現了。我預計索引者完成的任務將與首先構建Profielwerkstuk索引,然後構建Begrip索引相同,這兩項索引都將在合理的時間內完成測試。有沒有人有一個想法可能會導致我的索引器需要這麼長時間?
編輯: 根據要求添加Profielwerkstuk和Begrip的相關注釋部分。
Begrip:
@Indexed
@Analyzer(impl = DutchAnalyzer.class)
public class Begrip {
@Field
private String naam;
@Lob
@Field
private String omschrijving;
@OneToMany(mappedBy = "begrip")
@IndexedEmbedded(includePaths = { "onderwerp.naam" })
private List<OnderwerpBegripRelatie> onderwerpen;
@OneToOne(optional=true, cascade=CascadeType.ALL)
@IndexedEmbedded(includePaths = { "content", "elementen.content" })
private ContainerElement inhoud;
}
Profielwerkstuk:
@Indexed
@Analyzer(impl = DutchAnalyzer.class)
public class Profielwerkstuk {
@Field
private String titel;
@OneToOne(cascade = CascadeType.ALL)
@IndexedEmbedded(includePaths = { "content", "elementen.content" })
private ContainerElement inhoud;
@Lob
@Field
private String bronvermelding;
@OneToMany(mappedBy="profielwerkstuk")
@IndexedEmbedded(includePaths = { "vraag", "toelichting", "eindtermen.keywords.keyword" })
private List<Onderzoeksvraag> onderzoeksvragen = new ArrayList<Onderzoeksvraag>();
}
我可以補充一點,嵌入在Begrip類OnderwerpBegripRelatie是沒有關係的Profielwerkstuk,並Onderzoeksvraag在Profielwerkstuk是不相關的Begrip 。 ContainerElement部分也可能有助於回答這個問題,因爲Profielwerkstuk和Begrip都有@IndexedEmbedded的ContainerElement字段。
ContainerElement:
public class ContainerElement extends Element {
@OneToMany(mappedBy="container", cascade = CascadeType.ALL)
@IndexedEmbedded(includePaths = { "content" })
protected List<Element> elementen;
}
與其父類元素:
public class Element {
@Lob
@Field
private String content;
}
這聽起來對我來說,你的兩個類有一個雙向關聯,你碰上指數化的循環:索引時則索引B的指數的等等......你可以發佈你的類的相關部分? – benzonico 2013-03-09 15:54:12
沒有沒有周期是有一定限度的,因爲他用明確的_includePaths_ – Sanne 2013-03-09 19:29:17