2016-07-06 84 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()这不仅会刷新数据,还会优化索引并且操作速度相当慢。

一旦你完成了,最后你可以关闭做优化。

因此从性能的角度来看,在每次添加文档后都可以进行提交。

相关问题