zoukankan      html  css  js  c++  java
  • IndexReader已解决的问题

    设计和实时搜索的发展,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.

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

  • 相关阅读:
    Aptana 由于没有关闭编辑器而导致的启动不起来了。
    postgresql备份导入数据库小记
    [转] js 事件冒泡 阻止
    ruby 取得ip
    [ 转 ] 网页聊天室的原理
    ryby 数组笔记
    第一个rails应用
    vue-router-5-命名路由
    vue-router-4-编程式导航
    vue-router-3-嵌套路由
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4666835.html
Copyright © 2011-2022 走看看