首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于IndexSearcher/IndexReader和Directory的问题

关于IndexSearcher/IndexReader和Directory的问题
EN

Stack Overflow用户
提问于 2015-01-13 09:00:56
回答 1查看 203关注 0票数 0

我正在对使用LuceneVersion3.6.1的现有代码库进行一些更改。

每个搜索请求都实例化了IndexSearcher。

代码语言:javascript
复制
 IndexReader reader = IndexReader.open(index);
 IndexSearcher searcher = new IndexSearcher(reader);

已经使用了RAMDirectory,而方法还没有计算出来。

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

以下是我的问题。

  1. 不调用close方法对IndexReader有什么影响?
  2. 不调用close方法对RAMDirectory有什么影响?
  3. 对索引读取器的引用在任何地方都不保存。因此,为了关闭它,我可以执行IndexSearcher.ggetIndexReader().close()吗?
  4. 是否有类似的方式来访问目录,以便在重新索引时关闭它?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-13 17:05:10

Q>不调用close方法对IndexReader有什么影响?

A>用于基于文件系统的索引,您可能会运行文件描述符。但是,如果所有的IndexSearcherIndexReader都变成了GCable,这就不是什么大事了。也就是说,如果您不关心偶尔出现的内存峰值--但这取决于您的使用模式。

Q>不调用close方法对RAMDirectory有什么影响?

A>内部地图无法清除。同样,如果您丢弃了RAMDirectory的实例并重新创建它,那就没什么大不了的。但我仍然会关闭它,以避免隐秘的错误,并可能帮助GC。

Q>对索引读取器的引用不在任何地方保存。所以为了关闭它,我可以做IndexSearcher.getIndexReader().close()?吗?

A>是的,一旦创建了IndexSearcher,它总是保持对可以使用上述方法访问的原始IndexReader的引用。

Q>是否有类似的方式来访问目录,以便在重新索引发生时关闭它?

A>号您的目的是保存此引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27918276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档