几种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范畴,对实时性要求较高的地方就无法使用了;

posted @   today4king  阅读(666)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2011-05-03 iPhone手机开发平台入门介绍和教程
2009-05-03 Cookie的详细介绍基本介绍篇
点击右上角即可分享
微信分享提示
主题色彩