有关Lucene的问题(6):Lucene的事务性
来源:互联网 发布:nginx 绝对路径配置 编辑:程序博客网 时间:2024/06/06 18:35
所谓事务性,本多指数据库的属性,包括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);
- 有关Lucene的问题(6):Lucene的事务性
- 有关Lucene的问题(6):Lucene的事务性
- 有关Lucene的问题(6):Lucene的事务性
- Lucene的事务性
- 有关Lucene的问题(5):Lucene中的TooManyClause异常
- 有关Lucene的问题(5):Lucene中的TooManyClause异常
- 有关Lucene的问题:用Lucene构建实时索引
- 有关Lucene的问题:用Lucene构建实时索引
- 有关Lucene的问题(5):Lucene中的TooManyClause异常
- 有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题
- 有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题
- 有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题
- 有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题
- 有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题
- 有关Lucene的问题(3): 向量空间模型与Lucene的打分机制
- 有关Lucene的问题(4):影响Lucene对文档打分的四种方式
- 有关Lucene的问题(4):影响Lucene对文档打分的四种方式
- 有关Lucene的问题(3): 向量空间模型与Lucene的打分机制
- vue的跨域问题
- springaop
- 人群行为分析--Understanding Pedestrian Behaviors from Stationary Crowd Groups
- JavaWeb开发中关于页面那些事儿(一)
- 正则表达式替换img标签src值
- 有关Lucene的问题(6):Lucene的事务性
- BZOJ 4104: [Thu Summer Camp 2015]解密运算
- ButtonKnife在library报“Attribute value must be constant”
- 简易菜单界面
- Android之无法隐藏标题栏 继承AppCompatActivity的Activity无法隐藏标题栏解决方案
- 分享几个视频音频学习网站
- GitHub和webstorm配置
- new(std::nothrow) 和 new() 的区别
- Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目