正在關閉Lucene IndexWriter
在每個文件添加後減慢我的索引過程?我應該讓Lucene IndexWriter在整個索引中保持打開狀態,還是在每次添加文檔後關閉?
我想象一下,關閉和打開索引編寫器會減慢我的索引過程,還是對於Lucene來說不正確?
基本上,我在Spring批處理作業中有一個Lucene索引器步驟,我在ItemProcessor
中創建索引。索引器步驟是一個分區步驟,我創建了IndexWriter
,當創建ItemProcessor
並保持打開狀態直至完成步驟。
@Bean
@StepScope
public ItemProcessor<InputVO,OutputVO> luceneIndexProcessor(@Value("#{stepExecutionContext[field1]}") String str) throws Exception{
boolean exists = IndexUtils.checkIndexDir(str);
String indexDir = IndexUtils.createAndGetIndexPath(str, exists);
IndexWriterUtils indexWriterUtils = new IndexWriterUtils(indexDir, exists);
IndexWriter indexWriter = indexWriterUtils.createIndexWriter();
return new LuceneIndexProcessor(indexWriter);
}
有沒有辦法在步驟完成後關閉這個IndexWriter
?
此外,我遇到了問題,因爲我也在這一步中搜索以查找重複的文檔,但是我在打開閱讀器和搜索之前通過添加writer.commit();
來解決此問題。
請建議在每次添加文檔之後是否需要關閉並打開,或者始終保持打開狀態?以及如何關閉StepExecutionListenerSupport
的afterStep
?
最初,我正在關閉並重新打開每個文檔,但索引過程非常緩慢,所以我認爲這可能是原因。
您應該*確保*爲整個索引過程保持一個「IndexWriter」打開。正如您已經看到的,爲每個文檔打開一個新文檔預計會大大減緩它的速度。 – femtoRgon