有关Lucene的问题(6):Lucene的事务性
所谓事务性,本多指数据库的属性,包括ACID四个基本要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
我们这里主要讨论隔离性,Lucene的IndexReader和IndexWriter具有隔离性。
- 当IndexReader.open打开一个索引的时候,相对于给当前索引进行了一次snapshot,此后的任何修改都不会被看到。
- 仅当IndexReader.open打开一个索引后,才有可能看到从上次打开后对索引的修改。
- 当IndexWriter没有调用Commit的时候,其修改的内容是不能够被看到的,哪怕IndexReader被重新打开。
- 欲使最新的修改被看到,一方面IndexWriter需要commit,一方面IndexReader重新打开。
下面我们举几个例子来说明上述隔离性:
(1) 首先做准备,索引十篇文档 File indexDir = new File("TestIsolation/index"); IndexWriter writer = new IndexWriter(FSDirectory.open(indexDir), new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED); for(int i =0; i < 10; i++){ indexDocs(writer); } writer.close(); (2) 然后再索引十篇文档,并不commit writer = new IndexWriter(FSDirectory.open(indexDir), new StandardAnalyzer(Version.LUCENE_CURRENT), IndexWriter.MaxFieldLength.LIMITED); for(int i =0; i < 10; i++){ indexDocs(writer); } (3) 打开一个IndexReader,但是由于IndexWriter没有commit,所以仍然仅看到十篇文档。 IndexReader reader = IndexReader.open(FSDirectory.open(indexDir)); IndexSearcher searcher = new IndexSearcher(reader); TopDocs docs = searcher.search(new TermQuery(new Term("contents","hello")), 50); System.out.println(docs.totalHits); (4) IndexWriter进行提交commit writer.commit(); (5) 不重新打开IndexReader,进行搜索,仍然仅看到十篇文档。 docs = searcher.search(new TermQuery(new Term("contents","hello")), 50); System.out.println(docs.totalHits); (6) IndexReader重新打开,则可以看到二十篇文档。 reader = IndexReader.open(FSDirectory.open(indexDir)); searcher = new IndexSearcher(reader); docs = searcher.search(new TermQuery(new Term("contents","hello")), 50); System.out.println(docs.totalHits); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述