IndexReader已解决的问题

IndexReader已解决的问题

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

设计和实时搜索的发展,IndexReader饮酒数成为0当调用doClose,和SegmentReader再有一个addCoreClosedListener控制的方法SegmentCoreReaders当操作接近。搜索Lucene该代码只有在FieldCacheImpl见电话,的回调>是让SegmentCoreReaders关闭之后从field cache中删除field cache。

查看Lucene core 4.0的代码,使用的FieldCache仅仅有Field Comparator,FieldCacheRangeFilter,FieldValueFilter等,看起来假设全然基于docvalues做排序和filter,不须要考虑。

另外假设考虑的话,filed cache基于docId,所以内存索引快照并不须要每一个都相应一个field cache,仅仅要映射到最新的field cache就可以,仅仅要读取时不逾越max doc id就可以。因此RamIndexReader.getCoreCacheKey返回相应RamIndexWriter就可以。

另外,SegmentCoreReaders的关闭文件句柄操作时IOUtils.close(termVectorsLocal, fieldsReaderLocal,…)。
实时搜索时每一个IndexSearcher都须要关闭其Reader的,这样在反复打开时不会有遗漏的文件句柄。

要真正释放资源,应该在new新的实时搜索searcher时不操作(new时自己主动有一个引用计数了),在searcher替换时调用旧Reader的decRef方法。
搜索前调用一次incRef,搜索完毕调用一次decRef。

详细到内存索引Reader,其doClose能够什么都不做。

RealTimeIndexWriter的close,分别调用RamIndexWriter的close方法,SegmentReaderAndLiveDocs的close方法。SegmentReaderAndLiveDocs内部有一个实时的SegmentReader,它也要Close。

每次快照生成的SegmentReader共用一个core。

ConcreateCompositeReader incRef和decRef时应该对以下的全部AtomicReader操作。

这样的手动的incRef,decRef笨方法,和easy错误,假设Java7可以直接使用AutoClosable.

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117466.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号