Example usage for org.apache.lucene.index DirectoryReader openIfChanged

List of usage examples for org.apache.lucene.index DirectoryReader openIfChanged

Introduction

In this page you can find the example usage for org.apache.lucene.index DirectoryReader openIfChanged.

Prototype

public static DirectoryReader openIfChanged(DirectoryReader oldReader) throws IOException 

Source Link

Document

If the index has changed since the provided reader was opened, open and return a new reader; else, return null.

Usage

From source file:org.elasticsearch.common.lucene.uid.VersionsTests.java

License:Apache License

public static DirectoryReader reopen(DirectoryReader reader, boolean newReaderExpected) throws IOException {
    DirectoryReader newReader = DirectoryReader.openIfChanged(reader);
    if (newReader != null) {
        reader.close();//from w ww .j  a v a  2s .  co  m
    } else {
        assertFalse(newReaderExpected);
    }
    return newReader;
}

From source file:org.elasticsearch.deps.lucene.SimpleLuceneTests.java

License:Apache License

@Test
public void testAddDocAfterPrepareCommit() throws Exception {
    Directory dir = new RAMDirectory();
    IndexWriter indexWriter = new IndexWriter(dir,
            new IndexWriterConfig(Lucene.VERSION, Lucene.STANDARD_ANALYZER));
    Document document = new Document();
    document.add(new TextField("_id", "1", Field.Store.YES));
    indexWriter.addDocument(document);//from w  ww.ja  v a2s .co m
    DirectoryReader reader = DirectoryReader.open(indexWriter, true);
    assertThat(reader.numDocs(), equalTo(1));

    indexWriter.prepareCommit();
    // Returns null b/c no changes.
    assertThat(DirectoryReader.openIfChanged(reader), equalTo(null));

    document = new Document();
    document.add(new TextField("_id", "2", Field.Store.YES));
    indexWriter.addDocument(document);
    indexWriter.commit();
    reader = DirectoryReader.openIfChanged(reader);
    assertThat(reader.numDocs(), equalTo(2));
}

From source file:org.elasticsearch.deps.lucene.SimpleLuceneTests.java

License:Apache License

private DirectoryReader refreshReader(DirectoryReader reader) throws IOException {
    DirectoryReader oldReader = reader;//from  w w w.j  a va2 s . c o m
    reader = DirectoryReader.openIfChanged(reader);
    if (reader != oldReader) {
        oldReader.close();
    }
    return reader;
}

From source file:org.elasticsearch.index.cache.filter.FilterCacheTests.java

License:Apache License

private DirectoryReader refreshReader(DirectoryReader reader) throws IOException {
    IndexReader oldReader = reader;// w  w w . j  av a  2s  .  c  o  m
    reader = DirectoryReader.openIfChanged(reader);
    if (reader != oldReader) {
        oldReader.close();
    }
    return reader;
}

From source file:org.elasticsearch.index.store.DistributorInTheWildTest.java

License:Apache License

@Override
protected void doSearching(ExecutorService es, long stopTime) throws Exception {

    boolean anyOpenDelFiles = false;

    DirectoryReader r = DirectoryReader.open(writer, true);

    while (System.currentTimeMillis() < stopTime && !failed.get()) {
        if (random().nextBoolean()) {
            if (VERBOSE) {
                logger.info("TEST: now reopen r=" + r);
            }/*from w ww  .  j  ava2  s .  c om*/
            final DirectoryReader r2 = DirectoryReader.openIfChanged(r);
            if (r2 != null) {
                r.close();
                r = r2;
            }
        } else {
            if (VERBOSE) {
                logger.info("TEST: now close reader=" + r);
            }
            r.close();
            writer.commit();
            final Set<String> openDeletedFiles = getOpenDeletedFiles(dir);
            if (openDeletedFiles.size() > 0) {
                logger.info("OBD files: " + openDeletedFiles);
            }
            anyOpenDelFiles |= openDeletedFiles.size() > 0;
            //assertEquals("open but deleted: " + openDeletedFiles, 0, openDeletedFiles.size());
            if (VERBOSE) {
                logger.info("TEST: now open");
            }
            r = DirectoryReader.open(writer, true);
        }
        if (VERBOSE) {
            logger.info("TEST: got new reader=" + r);
        }
        //logger.info("numDocs=" + r.numDocs() + "
        //openDelFileCount=" + dir.openDeleteFileCount());

        if (r.numDocs() > 0) {
            fixedSearcher = new IndexSearcher(r, es);
            smokeTestSearcher(fixedSearcher);
            runSearchThreads(System.currentTimeMillis() + 500);
        }
    }
    r.close();

    //logger.info("numDocs=" + r.numDocs() + " openDelFileCount=" + dir.openDeleteFileCount());
    final Set<String> openDeletedFiles = getOpenDeletedFiles(dir);
    if (openDeletedFiles.size() > 0) {
        logger.info("OBD files: " + openDeletedFiles);
    }
    anyOpenDelFiles |= openDeletedFiles.size() > 0;

    assertFalse("saw non-zero open-but-deleted count", anyOpenDelFiles);
}

From source file:org.elasticsearch.test.unit.common.lucene.uid.UidFieldTests.java

License:Apache License

@Test
public void testUidField() throws Exception {
    IndexWriter writer = new IndexWriter(new RAMDirectory(),
            new IndexWriterConfig(Lucene.VERSION, Lucene.STANDARD_ANALYZER));

    DirectoryReader directoryReader = DirectoryReader.open(writer, true);
    AtomicReader atomicReader = SlowCompositeReaderWrapper.wrap(directoryReader);
    MatcherAssert.assertThat(UidField.loadVersion(atomicReader.getContext(), new Term("_uid", "1")),
            equalTo(-1l));/*  w  w  w .j  a va  2  s.  c om*/

    Document doc = new Document();
    doc.add(new Field("_uid", "1", UidFieldMapper.Defaults.FIELD_TYPE));
    writer.addDocument(doc);
    directoryReader = DirectoryReader.openIfChanged(directoryReader);
    atomicReader = SlowCompositeReaderWrapper.wrap(directoryReader);
    assertThat(UidField.loadVersion(atomicReader.getContext(), new Term("_uid", "1")), equalTo(-2l));
    assertThat(UidField.loadDocIdAndVersion(atomicReader.getContext(), new Term("_uid", "1")).version,
            equalTo(-2l));

    doc = new Document();
    doc.add(new UidField("_uid", "1", 1));
    writer.updateDocument(new Term("_uid", "1"), doc);
    directoryReader = DirectoryReader.openIfChanged(directoryReader);
    atomicReader = SlowCompositeReaderWrapper.wrap(directoryReader);
    assertThat(UidField.loadVersion(atomicReader.getContext(), new Term("_uid", "1")), equalTo(1l));
    assertThat(UidField.loadDocIdAndVersion(atomicReader.getContext(), new Term("_uid", "1")).version,
            equalTo(1l));

    doc = new Document();
    UidField uid = new UidField("_uid", "1", 2);
    doc.add(uid);
    writer.updateDocument(new Term("_uid", "1"), doc);
    directoryReader = DirectoryReader.openIfChanged(directoryReader);
    atomicReader = SlowCompositeReaderWrapper.wrap(directoryReader);
    assertThat(UidField.loadVersion(atomicReader.getContext(), new Term("_uid", "1")), equalTo(2l));
    assertThat(UidField.loadDocIdAndVersion(atomicReader.getContext(), new Term("_uid", "1")).version,
            equalTo(2l));

    // test reuse of uid field
    doc = new Document();
    uid.version(3);
    doc.add(uid);
    writer.updateDocument(new Term("_uid", "1"), doc);
    directoryReader = DirectoryReader.openIfChanged(directoryReader);
    atomicReader = SlowCompositeReaderWrapper.wrap(directoryReader);
    assertThat(UidField.loadVersion(atomicReader.getContext(), new Term("_uid", "1")), equalTo(3l));
    assertThat(UidField.loadDocIdAndVersion(atomicReader.getContext(), new Term("_uid", "1")).version,
            equalTo(3l));

    writer.deleteDocuments(new Term("_uid", "1"));
    directoryReader = DirectoryReader.openIfChanged(directoryReader);
    atomicReader = SlowCompositeReaderWrapper.wrap(directoryReader);
    assertThat(UidField.loadVersion(atomicReader.getContext(), new Term("_uid", "1")), equalTo(-1l));
    assertThat(UidField.loadDocIdAndVersion(atomicReader.getContext(), new Term("_uid", "1")), nullValue());
}

From source file:org.elasticsearch.xpack.core.security.authz.accesscontrol.DocumentSubsetReaderTests.java

License:Open Source License

/** Same test as in FieldSubsetReaderTests, test that core cache key (needed for NRT) is working */
public void testCoreCacheKey() throws Exception {
    Directory dir = newDirectory();/*from  w w w  .j  a va2 s .com*/
    IndexWriterConfig iwc = new IndexWriterConfig(null);
    iwc.setMaxBufferedDocs(100);
    iwc.setMergePolicy(NoMergePolicy.INSTANCE);
    IndexWriter iw = new IndexWriter(dir, iwc);

    // add two docs, id:0 and id:1
    Document doc = new Document();
    Field idField = new StringField("id", "", Field.Store.NO);
    doc.add(idField);
    idField.setStringValue("0");
    iw.addDocument(doc);
    idField.setStringValue("1");
    iw.addDocument(doc);

    // open reader
    DirectoryReader ir = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(iw),
            new ShardId("_index", "_na_", 0));
    ir = DocumentSubsetReader.wrap(ir, bitsetFilterCache, new MatchAllDocsQuery());
    assertEquals(2, ir.numDocs());
    assertEquals(1, ir.leaves().size());

    // delete id:0 and reopen
    iw.deleteDocuments(new Term("id", "0"));
    DirectoryReader ir2 = DirectoryReader.openIfChanged(ir);

    // we should have the same cache key as before
    assertEquals(1, ir2.numDocs());
    assertEquals(1, ir2.leaves().size());
    assertSame(ir.leaves().get(0).reader().getCoreCacheHelper().getKey(),
            ir2.leaves().get(0).reader().getCoreCacheHelper().getKey());
    // However we don't support caching on the reader cache key since we override deletes
    assertNull(ir.leaves().get(0).reader().getReaderCacheHelper());
    assertNull(ir2.leaves().get(0).reader().getReaderCacheHelper());

    TestUtil.checkReader(ir);
    IOUtils.close(ir, ir2, iw, dir);
}

From source file:org.elasticsearch.xpack.core.security.authz.accesscontrol.FieldSubsetReaderTests.java

License:Open Source License

/** test that core cache key (needed for NRT) is working */
public void testCoreCacheKey() throws Exception {
    Directory dir = newDirectory();/*  ww w  .j a  va2 s  .  co m*/
    IndexWriterConfig iwc = new IndexWriterConfig(null);
    iwc.setMaxBufferedDocs(100);
    iwc.setMergePolicy(NoMergePolicy.INSTANCE);
    IndexWriter iw = new IndexWriter(dir, iwc);

    // add two docs, id:0 and id:1
    Document doc = new Document();
    Field idField = new StringField("id", "", Field.Store.NO);
    doc.add(idField);
    idField.setStringValue("0");
    iw.addDocument(doc);
    idField.setStringValue("1");
    iw.addDocument(doc);

    // open reader
    DirectoryReader ir = FieldSubsetReader.wrap(DirectoryReader.open(iw),
            new CharacterRunAutomaton(Automata.makeString("id")));
    assertEquals(2, ir.numDocs());
    assertEquals(1, ir.leaves().size());

    // delete id:0 and reopen
    iw.deleteDocuments(new Term("id", "0"));
    DirectoryReader ir2 = DirectoryReader.openIfChanged(ir);

    // we should have the same cache key as before
    assertEquals(1, ir2.numDocs());
    assertEquals(1, ir2.leaves().size());
    assertSame(ir.leaves().get(0).reader().getCoreCacheHelper().getKey(),
            ir2.leaves().get(0).reader().getCoreCacheHelper().getKey());

    TestUtil.checkReader(ir);
    IOUtils.close(ir, ir2, iw, dir);
}

From source file:org.hip.vif.core.search.VIFIndexing.java

License:Open Source License

/** Creates a read-only <code>IndexReader</code> to read content documents from the index.
 *
 * @return {@link IndexReader}//from  w w w  . j av  a2  s .  c  om
 * @throws CorruptIndexException
 * @throws IOException */
public synchronized IndexReader createContentIndexReader() throws CorruptIndexException, IOException { // NOPMD
    final IndexReader outReader = DirectoryReader.openIfChanged((DirectoryReader) contentIndexReader);
    if (outReader != null) {
        contentIndexReader.close();
        contentIndexReader = outReader;
    }
    return contentIndexReader;
}

From source file:org.hip.vif.core.search.VIFIndexing.java

License:Open Source License

/** Creates a read-only <code>IndexReader</code> to read member documents from the index.
 *
 * @return {@link IndexReader}//from  w  w w . java 2 s  .  com
 * @throws CorruptIndexException
 * @throws IOException */
public synchronized IndexReader createMemberIndexReader() throws CorruptIndexException, IOException { // NOPMD
    final IndexReader outReader = DirectoryReader.openIfChanged((DirectoryReader) memberIndexReader);
    if (outReader != null) {
        memberIndexReader.close();
        memberIndexReader = outReader;
    }
    return memberIndexReader;
}