它在Lucene文档中指出,在整个应用程序中使用IndexWriter和IndexSearcher的一个实例最快。
目前,我一直有一个静态的IndexWriter
open 实例,并且它的一个静态实例IndexSearcher
始终保持打开状态,但是如果IndexWriter
对索引执行任何CRUD操作,则将其重建。我已经在我的索引管理类上实现了Dispose方法,该方法会同时关闭IndexWriter
和IndexSearcher
结束应用程序的时间(但是它是一个Web应用程序,因此可能需要运行数月才能被调用)。
这听起来像做事的合理方式吗?而且,使用静态实例还会带来多线程问题吗?即我应该在使用时锁定我的作家和搜索者吗?
Lucene索引编写器,阅读器和搜索器是线程安全的(例如,请参阅IndexWriter文档的第二个注释或IndexSearcher文档的1 个注释),因此在多个线程中重用同一实例没有问题。
根据有关如何管理索引作者和搜索者的描述,我认为您正在重新实现可能对您有所帮助的Lucene的两个实用程序类:NRTManager和SearcherManager,它们使管理近乎实时的搜索者非常容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句