关于 IndexSearcher/IndexReader 和目录的问题

Questions regarding IndexSearcher/IndexReader and Directory

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

IndexSearcher 已针对每个搜索请求实例化。

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

已经使用了RAMDirectoryclose方法还没有调用。

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

以下是我的问题。

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

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

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

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

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