几种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范畴,对实时性要求较高的地方就无法使用了;
作者:today4king
出处:https://www.cnblogs.com/jinzhao/archive/2012/05/03/2481018.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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的详细介绍基本介绍篇