在我的Spring / Lucene应用程序中,我使用Lucene IndexWriter
,TrackingIndexWriter
,SearcherManager
和ControlledRealTimeReopenThread
。
现在我正试图索引成千上万的文件。为此,我添加了Apache ActiveMQ并在单独的消息使用者中索引每个文档。
我注意到一个严重的问题 - 如果在下一次应用程序重启后JVM异常终止,我的Lucene索引为空,因为未执行IndexWriter.commit()
操作。
如果我在每个IndexWriter.commit()
之后调用trackingIndexWriter.addDocument(document);
,一切正常。
我认为在每个IndexWriter.commit()
之后使用trackingIndexWriter.addDocument(document);
是个不错的选择,尤其是从效果的角度来看。
如何正确管理我的索引,以便在应用程序异常终止后不丢失它?
答案 0 :(得分:1)
IndexWriter.commit()只会刷新数据。它既不会优化你的索引也不会关闭作者。
可以再次使用相同的Indexwriter添加更多数据。
不要调用IndexWriter.close(),它不仅可以刷新数据,还可以优化索引,并且操作速度非常慢。
完成后,最后您可以关闭进行优化。
因此,从性能的角度来看,每次添加文档后都可以提交。