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);

  • 相关阅读:
    hdu5728 PowMod
    CF1156E Special Segments of Permutation
    CF1182E Product Oriented Recurrence
    CF1082E Increasing Frequency
    CF623B Array GCD
    CF1168B Good Triple
    CF1175E Minimal Segment Cover
    php 正则
    windows 下安装composer
    windows apache "The requested operation has failed" 启动失败
  • 原文地址:https://www.cnblogs.com/forfuture1978/p/1752917.html
Copyright © 2011-2022 走看看