【问题标题】:Questions regarding IndexSearcher/IndexReader and Directory关于 IndexSearcher/IndexReader 和 Directory 的问题
【发布时间】:2015-01-14 01:05:10
【问题描述】:

我正在对使用 Lucene 版本 3.6.1 的现有代码库进行一些更改。

IndexSearcher 已被每个搜索​​请求实例化。

 IndexReader reader = IndexReader.open(index);
 IndexSearcher searcher = new IndexSearcher(reader);

RAMDirectory 已使用,close 方法尚未调用。

定期重新索引完成并在发生这种情况时创建 RAMDirectory 的新实例。但是现有的 IndexReader#close 方法并没有被调用。

以下是我的问题。

  1. IndexReader 不调用 close 方法有什么影响?
  2. 在 RAMDirectory 上不调用 close 方法有什么影响?
  3. 索引阅读器的引用没有保存在任何地方。所以为了关闭它,我可以做 IndexSearcher.ggetIndexReader().close() 吗?
  4. 是否有类似的方法可以访问目录,以便在重新编制索引时关闭它?

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    Q> IndexReader不调用close方法有什么影响?
    A> 对于基于文件系统的索引,您可能会运行文件描述符。但是如果所有IndexSearchers 和IndexReaders 都变成GCable,这应该没什么大不了的。也就是说,如果您不关心偶尔的内存峰值 - 但这取决于您的使用模式。

    Q> RAMDirectory不调用close方法有什么影响?
    A> 内部地图不会被清除。同样,如果您丢弃 RAMDirectory 的实例并重新创建它,这没什么大不了的。但我仍然会关闭它以避免隐蔽错误并可能帮助 GC。

    Q> 对索引阅读器的引用没有保存在任何地方。所以为了关闭它,我可以做IndexSearcher.getIndexReader().close()?
    A> 是的,一旦IndexSearcher 被创建,它始终保持对原始IndexReader 的引用,可以使用上述方法访问。

    Q> 是否有类似的方法可以访问目录,以便在重新编制索引时关闭它?
    A> 不。您应该保留此引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2012-03-06
      • 2019-04-05
      • 2021-01-19
      相关资源
      最近更新 更多