gpt4 book ai didi

java - Lucene NRTManager 处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:44 28 4
gpt4 key购买 nike

我想了解应该如何使用 Lucene。

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

文档说:

  • IndexWriter 是线程安全的
  • 此类的构造函数采用Directory 对象,因此创建实例似乎成本高昂(如IndexReader 的情况)
  • 所有更改都会定期缓冲和刷新(因此他们似乎鼓励使用单个实例)

    但是:

  • 更改,尽管只有在 commitclose

    之后才会被刷新可见
  • 完成更新(添加/删除)后,应关闭实例
  • 我还发现了这个:Forgot to close the Lucene IndexWriter after adding Documents to the index据说不关闭作家可能会毁了一切

那么我到底应该做什么呢?拥有单个 IndexWriter 实例是个好主意吗(仅提交 并且从不关闭 它)?

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

最佳答案

blog article可能会帮助您了解如何使用 NRTManager 和 SearcherManager。它解释了如何在近乎实时的上下文中处理 commitreopen

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

  • 等待当前合并操作完成(可选),
  • 提交未决数据,
  • 删除目录锁定文件。

这就是为什么如果 IndexWriter 没有关闭而索引仍有未决更改时文档可能不可见的原因。

在长时间运行的应用程序中,您应该在应用程序退出时关闭您的 IndexWriter(在桌面应用程序中,这可以在用户关闭应用程序时完成,而在 web 应用程序中,这可以在一个小服务程序)。

关于java - Lucene NRTManager 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9763293/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com