在应用程序的生命周期内保持Lucene IndexWriter和IndexSearcher打开状态是否是一种好习惯



它在Lucene文档中指出,在应用程序中使用IndexWriter和IndexSearcher的一个实例是最快的。

目前,我有一个IndexWriter的静态实例一直处于打开状态,还有一个IndexSearcher的静态实例始终保持打开状态,但当IndexWriter对索引执行任何CRUD操作时会重新生成。我在我的索引管理类上实现了一个Dispose方法,该方法在应用程序结束时关闭IndexWriterIndexSearcher(但它是一个web应用程序,因此可能需要运行数月才能调用)。

这样做听起来合理吗?使用静态实例是否也会带来多线程的问题。。?也就是说,我应该在使用时锁定我的编写器和搜索器吗?

Lucene索引编写器、读取器和搜索器都是线程安全的(例如,请参阅IndexWriter文档的第二个注释或IndexSearcher文档的第一个注释),因此在多个线程中重用相同的实例是没有问题的。

根据对如何管理索引编写器和搜索器的描述,我认为您正在重新实现Lucene的两个实用程序类,您可能会发现这两个类很有帮助:NRTManager和SearcherManager,它们使管理近实时搜索器变得非常容易。

相关内容

最新更新