在应用程序的整个生命周期中保持Lucene IndexWriter和IndexSearcher处于打开状态是一种好习惯吗

jcvandan:

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

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

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

jpountz:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章