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

jcv*_*dan 5 c# java lucene indexing

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

目前我有一个静态的IndexWriteropen 实例,并且它的静态实例IndexSearcher始终保持打开状态,但是如果IndexWriter对索引执行任何CRUD操作则重建.我已经实施了关闭两个在我的索引管理类Dispose方法IndexWriter,并IndexSearcher在应用程序结束(但它是一个Web应用程序,所以这是有可能不被调用运行的几个月).

这听起来像是合理的做事方式吗?并且使用静态实例也存在多线程问题..?即我在使用时应该锁定我的作家和搜索者吗?

jpo*_*ntz 6

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

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

  • java-和c#-implementation之间有什么区别还是相同? (2认同)