Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lucene NRTManager处理_Java_Lucene - Fatal编程技术网

Java Lucene NRTManager处理

Java Lucene NRTManager处理,java,lucene,Java,Lucene,我正在努力理解如何使用Lucene 据我所知,创建IndexReader成本很高,因此使用搜索管理器应该是正确的选择。但是,SearchManager应该由NRTManager生成(顺便说一句,对于执行的每个添加或删除操作,它应该替换IndexWriter)。但是为了有一个NRTManager,我应该首先有一个IndexWriter,我的问题来了 文件说: IndexWriter是线程安全的 此类的构造函数接受一个目录对象,因此创建instace的成本似乎很高(如IndexReader) 所有

我正在努力理解如何使用Lucene

据我所知,创建
IndexReader
成本很高,因此使用
搜索管理器应该是正确的选择。但是,
SearchManager
应该由
NRTManager
生成(顺便说一句,对于执行的每个添加或删除操作,它应该替换
IndexWriter
)。但是为了有一个
NRTManager
,我应该首先有一个
IndexWriter
,我的问题来了

文件说:

  • IndexWriter是线程安全的
  • 此类的构造函数接受一个
    目录
    对象,因此创建instace的成本似乎很高(如IndexReader)
  • 所有更改都会定期缓冲和刷新(因此它们似乎鼓励使用单个实例)

    但是:

  • 更改(尽管已刷新)仅在
    提交
    关闭

  • 完成更新(添加/删除)后,应关闭实例
  • 我也发现了这一点:据说不关闭一个作家可能会毁掉一切
那我该怎么办呢?拥有一个
IndexWriter
实例是一个好主意吗(只做
commit
而不做
close
it)

此外,如果我使用
NRTManager
,如何进行
提交
?甚至可能吗?

这可能会帮助您了解如何使用NRTManager和SearcherManager。它解释了如何在近乎实时的上下文中处理
commit
s和
重新打开
s

关于您的IndexWriter问题,是的,鼓励使用单个IndexWriter,但您始终需要在某个时候关闭IndexWriter。关闭IndexWriter将执行以下几项操作:

  • 等待当前合并操作完成(可选)
  • 提交挂起的数据
  • 删除目录锁文件
这就是为什么如果IndexWriter未关闭,而索引仍有挂起的更改,文档可能不可见


在长时间运行的应用程序中,您应该在应用程序退出时关闭IndexWriter(在桌面应用程序中,这可以在用户关闭应用程序时完成,在webapp中,这可以通过servlet的destroy方法完成)

谢谢你们,那个博客上的好文章。这让我意识到我不需要NRTManager(在我的情况下,它只会使事情变得过于复杂)。至于IndexWriter的关闭,我将遵循您的建议。