zoukankan      html  css  js  c++  java
  • 有关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);

  • 相关阅读:
    Eclipse 控制台视图和服务器视图中停止Web服务器的差别
    JSP中forEach和forTokens循环的用法
    Java中的消息框
    JS弹出div简单样式
    Java中简单提示异常代码的行号,类名等
    Java简单的数据库连接
    Java简单方法批量修改Windows文件夹下的文件名(简单IO使用)
    Java中对文件的序列化和反序列化
    navicat 连接 mysql 出现Client does not support authentication protocol requested by server
    IoC是什么
  • 原文地址:https://www.cnblogs.com/forfuture1978/p/1752917.html
Copyright © 2011-2022 走看看