zoukankan      html  css  js  c++  java
  • 几种Lucene.Net打开IndexReader的方式

    入门第一式:

    IndexReader.Open(Dir,readOnly);

    当readOnly为true的时候效率最高,最好不要用Reader删除修改记录;

    入门第二式:

    reader.Reopen(readOnly);

    优点:比第一式效率高,推荐使用;

    缺点:前提是需要有Reader存在;

    入门第三式:

    writer.GetReader();

    优点:NRL的实现,对实时性要求高的不二选择;

    缺点:writer说它很痛苦,因为每次调用内部都会flush一次以保证所有index会被启用;

    追求效率(中阶):

            public class IndexReaderProxy
            {
                private IndexReader _indexReader;
                private readonly object _indexReaderLock = new object();
    
                public IndexReaderProxy(Directory directory, bool readOnly)
                {
                    _indexReader = IndexReader.Open(directory, readOnly);
                }
    
                public IndexReader GetCurrentIndexReader()
                {
                    ReopenIndexReaderIfNotCurrent();
                    return _indexReader;
                }
    
                private void ReopenIndexReaderIfNotCurrent()
                {
                    if (_indexReader.IsCurrent()) return;
                    lock (_indexReaderLock)
                    {
                        if (_indexReader.IsCurrent()) return;
                        var newIndexReader = _indexReader.Reopen();
                        _indexReader.Close();
                        _indexReader = newIndexReader;
                    }
                }
            }
    

     优点:效率和实时的一个平衡,在对实时要求不高的地方使用;

    缺点:不属于NRL范畴,对实时性要求较高的地方就无法使用了;

  • 相关阅读:
    安装centos虚拟机
    关于区别广播域与冲突域
    网络七层架构
    怎么有效避免黑客使用跳板软件进行攻击窃取信息数据
    C语言猜数字游戏
    页置换算法FIFO、LRU、OPT
    Samza的ApplicationMaster
    Samza文档翻译 : Comparison Introduction
    Samza文档翻译 : Architecture
    Samza文档翻译 : Concepts
  • 原文地址:https://www.cnblogs.com/jinzhao/p/2481018.html
Copyright © 2011-2022 走看看