我正在对使用LuceneVersion3.6.1的现有代码库进行一些更改。
每个搜索请求都实例化了IndexSearcher。
IndexReader reader = IndexReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);已经使用了RAMDirectory,而关方法还没有计算出来。
当这种情况发生时,定期重新索引并创建RAMDirectory的新实例。但是还没有调用现有的IndexReader#close方法。
以下是我的问题。
发布于 2015-01-13 17:05:10
Q>不调用close方法对IndexReader有什么影响?
A>用于基于文件系统的索引,您可能会运行文件描述符。但是,如果所有的IndexSearcher和IndexReader都变成了GCable,这就不是什么大事了。也就是说,如果您不关心偶尔出现的内存峰值--但这取决于您的使用模式。
Q>不调用close方法对RAMDirectory有什么影响?
A>内部地图无法清除。同样,如果您丢弃了RAMDirectory的实例并重新创建它,那就没什么大不了的。但我仍然会关闭它,以避免隐秘的错误,并可能帮助GC。
Q>对索引读取器的引用不在任何地方保存。所以为了关闭它,我可以做IndexSearcher.getIndexReader().close()?吗?
A>是的,一旦创建了IndexSearcher,它总是保持对可以使用上述方法访问的原始IndexReader的引用。
Q>是否有类似的方式来访问目录,以便在重新索引发生时关闭它?
A>号您的目的是保存此引用。
https://stackoverflow.com/questions/27918276
复制相似问题