关于 IndexSearcher/IndexReader 和目录的问题
Questions regarding IndexSearcher/IndexReader and Directory
我正在对使用 Lucene 版本 3.6.1 的现有代码库进行一些更改。
IndexSearcher 已针对每个搜索请求实例化。
IndexReader reader = IndexReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
已经使用了RAMDirectory
,close方法还没有调用。
定期重新索引已完成,并在发生这种情况时创建 RAMDirectory 的新实例。但是现有的IndexReader#close方法还没有被调用。
以下是我的问题。
- IndexReader不调用close方法有什么影响?
- RAMDirectory 不调用 close 方法有什么影响?
- 对索引 reader 的引用未保存在任何地方。所以为了关闭它,我可以做 IndexSearcher.ggetIndexReader().close() 吗?
- 是否有类似的方法来访问目录,以便我可以在重新编制索引时关闭它?
Q> IndexReader不调用close方法有什么影响?
A> 对于基于文件系统的索引,您可能需要 运行 个文件描述符。但是如果所有 IndexSearcher
s 和 IndexReader
s 都变成 GCable,这应该没什么大不了的。也就是说,如果您不关心偶尔的内存峰值——但这取决于您的使用模式。
Q> RAMDirectory不调用close方法有什么影响?
A> 内部地图不会被清除。同样,如果您丢弃 RAMDirectory
的实例并重新创建它,也没什么大不了的。但我仍然会关闭它以避免隐蔽的错误并可能帮助 GC。
Q> 对索引 reader 的引用没有保存在任何地方。所以为了关闭它,我可以做 IndexSearcher.getIndexReader().close()?
A> 是的,一旦创建了 IndexSearcher
,它总是保持对可以使用上述方法访问的原始 IndexReader
的引用。
问> 是否有类似的方法来访问目录,以便在重新编制索引时关闭它?
A> 不。您应该保留此引用。
我正在对使用 Lucene 版本 3.6.1 的现有代码库进行一些更改。
IndexSearcher 已针对每个搜索请求实例化。
IndexReader reader = IndexReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
已经使用了RAMDirectory
,close方法还没有调用。
定期重新索引已完成,并在发生这种情况时创建 RAMDirectory 的新实例。但是现有的IndexReader#close方法还没有被调用。
以下是我的问题。
- IndexReader不调用close方法有什么影响?
- RAMDirectory 不调用 close 方法有什么影响?
- 对索引 reader 的引用未保存在任何地方。所以为了关闭它,我可以做 IndexSearcher.ggetIndexReader().close() 吗?
- 是否有类似的方法来访问目录,以便我可以在重新编制索引时关闭它?
Q> IndexReader不调用close方法有什么影响?
A> 对于基于文件系统的索引,您可能需要 运行 个文件描述符。但是如果所有 IndexSearcher
s 和 IndexReader
s 都变成 GCable,这应该没什么大不了的。也就是说,如果您不关心偶尔的内存峰值——但这取决于您的使用模式。
Q> RAMDirectory不调用close方法有什么影响?
A> 内部地图不会被清除。同样,如果您丢弃 RAMDirectory
的实例并重新创建它,也没什么大不了的。但我仍然会关闭它以避免隐蔽的错误并可能帮助 GC。
Q> 对索引 reader 的引用没有保存在任何地方。所以为了关闭它,我可以做 IndexSearcher.getIndexReader().close()?
A> 是的,一旦创建了 IndexSearcher
,它总是保持对可以使用上述方法访问的原始 IndexReader
的引用。
问> 是否有类似的方法来访问目录,以便在重新编制索引时关闭它?
A> 不。您应该保留此引用。