2016-07-06 131 views
0

在我的Spring/Lucene應用程序中,我使用的是Lucene IndexWriter,TrackingIndexWriter,SearcherManagerControlledRealTimeReopenThreadLucene索引在應用程序重新啓動後被刪除

現在我試圖索引成千上萬的文件。爲此,我添加了Apache ActiveMQ並將每個文檔編入一個單獨的消息使用者中。

我注意到一個嚴重的問題 - 在下次應用程序重新啓動後JVM異常終止的情況下,我的Lucene索引爲空,因爲沒有執行IndexWriter.commit()操作。

如果我在每個trackingIndexWriter.addDocument(document);之後調用IndexWriter.commit()一切正常。

我認爲在每個trackingIndexWriter.addDocument(document);之後使用IndexWriter.commit()並不是一個好主意,特別是從性能的角度來看。

如何正確管理我的索引以便在應用程序異常終止後不丟失它?

回答

1

IndexWriter.commit()只會刷新數據。它既不會優化您的索引,也不會關閉作者。

可以再次使用同一個Indexwriter來添加更多數據。

不要調用IndexWriter.close()這不僅會刷新數據,還會優化索引並且操作速度相當慢。

一旦你完成了,最後你可以關閉做優化。

因此從性能的角度來看,在每次添加文檔後都可以進行提交。

相關問題