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

目前,我始终有一个静态的IndexWriter实例打开,并且有一个IndexSearcher的静态实例一直保持打开状态,但如果IndexWriter对索引执行任何CRUD操作,则该静态实例会一直重建。我已经在我的索引管理类上实现了Dispose方法,该方法在应用程序结束时关闭IndexWriterIndexSearcher(但是它是一个Web应用程序,因此可能需要几个月的运行时间才能被调用)。

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

最佳答案

Lucene索引编写器,读取器和搜索器是线程安全的(例如,请参见2nd note of the doc of IndexWriter1st of the doc of IndexSearcher),因此在多个线程中重用同一实例没有问题。

根据有关如何管理索引作者和搜索者的描述,我认为您正在重新实现可能会有所帮助的Lucene的两个实用程序类:NRTManagerSearcherManager,这使得管理近乎实时的搜索者非常容易。

关于c# - 在应用程序的整个生命周期中保持Lucene IndexWriter和IndexSearcher处于打开状态是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9377572/

10-16 10:12