Example usage for org.apache.lucene.index IndexWriter getDirectory

List of usage examples for org.apache.lucene.index IndexWriter getDirectory

Introduction

In this page you can find the example usage for org.apache.lucene.index IndexWriter getDirectory.

Prototype

public Directory getDirectory() 

Source Link

Document

Returns the Directory used by this index.

Usage

From source file:org.eclipse.smila.search.lucene.index.access.IndexWriterPool.java

License:Open Source License

/**
 * Closes all created IndexWriter objects.
 * //from   w w  w . j a  v a2s  . c o m
 * @throws IndexException
 *           if any error occurs
 */
public static synchronized void closeAll() throws IndexException {
    final Iterator<IndexWriter> it = POOL.values().iterator();
    while (it.hasNext()) {
        final IndexWriter indexWriter = it.next();
        if (indexWriter != null) {
            try {
                indexWriter.close();
                if (LOG.isInfoEnabled()) {
                    LOG.info("Closed IndexWriter for Lucene index " + indexWriter.getDirectory());
                }
            } catch (final Exception e) {
                LOG.error("Failed to close an index writer", e);
            }
        } // if
    } // while
    POOL.clear();
}

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

License:Apache License

@Test
public void testMergingOldIndices() throws Exception {
    final IndexWriterConfig iwConf = new IndexWriterConfig(Lucene.VERSION, new KeywordAnalyzer());
    iwConf.setMergePolicy(new IndexUpgraderMergePolicy(iwConf.getMergePolicy()));
    final Directory dir = newDirectory();
    final IndexWriter iw = new IndexWriter(dir, iwConf);

    // 1st segment, no _version
    Document document = new Document();
    // Add a dummy field (enough to trigger #3237)
    document.add(new StringField("a", "b", Store.NO));
    StringField uid = new StringField(UidFieldMapper.NAME, "1", Store.YES);
    document.add(uid);//  w  w w . j  a  v a  2s.co m
    iw.addDocument(document);
    uid.setStringValue("2");
    iw.addDocument(document);
    iw.commit();

    // 2nd segment, old layout
    document = new Document();
    UidField uidAndVersion = new UidField("3", 3L);
    document.add(uidAndVersion);
    iw.addDocument(document);
    uidAndVersion.uid = "4";
    uidAndVersion.version = 4L;
    iw.addDocument(document);
    iw.commit();

    // 3rd segment new layout
    document = new Document();
    uid.setStringValue("5");
    Field version = new NumericDocValuesField(VersionFieldMapper.NAME, 5L);
    document.add(uid);
    document.add(version);
    iw.addDocument(document);
    uid.setStringValue("6");
    version.setLongValue(6L);
    iw.addDocument(document);
    iw.commit();

    final Map<String, Long> expectedVersions = ImmutableMap.<String, Long>builder().put("1", 0L).put("2", 0L)
            .put("3", 0L).put("4", 4L).put("5", 5L).put("6", 6L).build();

    // Force merge and check versions
    iw.forceMerge(1);
    final AtomicReader ir = SlowCompositeReaderWrapper.wrap(DirectoryReader.open(iw.getDirectory()));
    final NumericDocValues versions = ir.getNumericDocValues(VersionFieldMapper.NAME);
    assertThat(versions, notNullValue());
    for (int i = 0; i < ir.maxDoc(); ++i) {
        final String uidValue = ir.document(i).get(UidFieldMapper.NAME);
        final long expectedVersion = expectedVersions.get(uidValue);
        assertThat(versions.get(i), equalTo(expectedVersion));
    }

    iw.close();
    assertThat(IndexWriter.isLocked(iw.getDirectory()), is(false));
    ir.close();
    dir.close();
}

From source file:org.elasticsearch.index.cache.id.SimpleIdCacheTests.java

License:Apache License

@Test
public void testDeletedDocuments() throws Exception {
    SimpleIdCache idCache = createSimpleIdCache(Tuple.tuple("child", "parent"));
    IndexWriter writer = createIndexWriter();
    // Begins with parent, ends with child docs
    final Document parent = doc("parent", "1");
    writer.addDocument(parent);// w ww.jav  a2s  .c  o m
    writer.addDocument(childDoc("child", "1", "parent", "1"));
    writer.addDocument(childDoc("child", "2", "parent", "1"));
    writer.addDocument(childDoc("child", "3", "parent", "1"));
    writer.commit();

    final String parentUid = parent.get("_uid");
    assert parentUid != null;
    writer.deleteDocuments(new Term("_uid", parentUid));

    writer.close();
    DirectoryReader topLevelReader = DirectoryReader.open(writer.getDirectory());
    List<AtomicReaderContext> leaves = topLevelReader.getContext().leaves();
    idCache.refresh(leaves);

    assertThat(leaves.size(), equalTo(1));
    IdReaderCache readerCache = idCache.reader(leaves.get(0).reader());
    IdReaderTypeCache typeCache = readerCache.type("parent");
    assertThat(typeCache.idByDoc(0).toUtf8(), equalTo("1"));
}

From source file:org.elasticsearch.index.cache.id.SimpleIdCacheTests.java

License:Apache License

@Test
public void testRefresh() throws Exception {
    SimpleIdCache idCache = createSimpleIdCache(Tuple.tuple("child", "parent"));
    IndexWriter writer = createIndexWriter();
    // Begins with parent, ends with child docs
    writer.addDocument(doc("parent", "1"));
    writer.addDocument(childDoc("child", "1", "parent", "1"));
    writer.addDocument(childDoc("child", "2", "parent", "1"));
    writer.addDocument(childDoc("child", "3", "parent", "1"));
    writer.addDocument(childDoc("child", "4", "parent", "1"));
    writer.commit();//from  w  w w.j  a  va 2  s. co m

    // Begins with child, ends with parent docs
    writer.addDocument(childDoc("child", "5", "parent", "2"));
    writer.addDocument(doc("parent", "2"));
    writer.addDocument(doc("parent", "3"));
    writer.addDocument(doc("parent", "4"));
    writer.addDocument(doc("parent", "5"));
    writer.commit();

    // Begins with parent, child docs in the middle and ends with parent doc
    writer.addDocument(doc("parent", "6"));
    writer.addDocument(childDoc("child", "6", "parent", "6"));
    writer.addDocument(childDoc("child", "7", "parent", "6"));
    writer.addDocument(childDoc("child", "8", "parent", "5"));
    writer.addDocument(childDoc("child", "9", "parent", "4"));
    writer.addDocument(doc("parent", "7"));
    writer.commit();

    // Garbage segment
    writer.addDocument(doc("zzz", "1"));
    writer.addDocument(doc("xxx", "2"));
    writer.addDocument(doc("aaa", "3"));
    writer.addDocument(doc("ccc", "4"));
    writer.addDocument(doc("parent", "8"));
    writer.commit();

    writer.close();
    DirectoryReader topLevelReader = DirectoryReader.open(writer.getDirectory());
    List<AtomicReaderContext> leaves = topLevelReader.getContext().leaves();
    idCache.refresh(leaves);

    // Verify simple id cache for segment 1
    IdReaderCache readerCache = idCache.reader(leaves.get(0).reader());
    assertThat(readerCache.type("child"), nullValue());
    IdReaderTypeCache typeCache = readerCache.type("parent");
    assertThat(typeCache.idByDoc(0).toUtf8(), equalTo("1"));
    assertThat(typeCache.idByDoc(1), nullValue());
    assertThat(typeCache.idByDoc(2), nullValue());
    assertThat(typeCache.idByDoc(3), nullValue());
    assertThat(typeCache.idByDoc(4), nullValue());

    assertThat(typeCache.parentIdByDoc(0), nullValue());
    assertThat(typeCache.parentIdByDoc(1).toUtf8(), equalTo("1"));
    assertThat(typeCache.parentIdByDoc(2).toUtf8(), equalTo("1"));
    assertThat(typeCache.parentIdByDoc(3).toUtf8(), equalTo("1"));
    assertThat(typeCache.parentIdByDoc(4).toUtf8(), equalTo("1"));

    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("1"))), equalTo(0));
    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("2"))), equalTo(-1));
    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("3"))), equalTo(-1));
    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("4"))), equalTo(-1));

    // Verify simple id cache for segment 2
    readerCache = idCache.reader(leaves.get(1).reader());
    assertThat(readerCache.type("child"), nullValue());
    typeCache = readerCache.type("parent");
    assertThat(typeCache.idByDoc(0), nullValue());
    assertThat(typeCache.idByDoc(1).toUtf8(), equalTo("2"));
    assertThat(typeCache.idByDoc(2).toUtf8(), equalTo("3"));
    assertThat(typeCache.idByDoc(3).toUtf8(), equalTo("4"));
    assertThat(typeCache.idByDoc(4).toUtf8(), equalTo("5"));

    assertThat(typeCache.parentIdByDoc(0).toUtf8(), equalTo("2"));
    assertThat(typeCache.parentIdByDoc(1), nullValue());
    assertThat(typeCache.parentIdByDoc(2), nullValue());
    assertThat(typeCache.parentIdByDoc(3), nullValue());
    assertThat(typeCache.parentIdByDoc(4), nullValue());

    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("2"))), equalTo(1));
    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("3"))), equalTo(2));
    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("4"))), equalTo(3));
    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("5"))), equalTo(4));

    // Verify simple id cache for segment 3
    readerCache = idCache.reader(leaves.get(2).reader());
    assertThat(readerCache.type("child"), nullValue());
    typeCache = readerCache.type("parent");
    assertThat(typeCache.idByDoc(0).toUtf8(), equalTo("6"));
    assertThat(typeCache.idByDoc(1), nullValue());
    assertThat(typeCache.idByDoc(2), nullValue());
    assertThat(typeCache.idByDoc(3), nullValue());
    assertThat(typeCache.idByDoc(4), nullValue());
    assertThat(typeCache.idByDoc(5).toUtf8(), equalTo("7"));

    assertThat(typeCache.parentIdByDoc(0), nullValue());
    assertThat(typeCache.parentIdByDoc(1).toUtf8(), equalTo("6"));
    assertThat(typeCache.parentIdByDoc(2).toUtf8(), equalTo("6"));
    assertThat(typeCache.parentIdByDoc(3).toUtf8(), equalTo("5"));
    assertThat(typeCache.parentIdByDoc(4).toUtf8(), equalTo("4"));
    assertThat(typeCache.parentIdByDoc(5), nullValue());

    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("6"))), equalTo(0));
    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("7"))), equalTo(5));

    // Verify simple id cache for segment 4
    readerCache = idCache.reader(leaves.get(3).reader());
    assertThat(readerCache.type("child"), nullValue());
    typeCache = readerCache.type("parent");
    assertThat(typeCache.idByDoc(0), nullValue());
    assertThat(typeCache.idByDoc(1), nullValue());
    assertThat(typeCache.idByDoc(2), nullValue());
    assertThat(typeCache.idByDoc(3), nullValue());
    assertThat(typeCache.idByDoc(4).toUtf8(), equalTo("8"));

    assertThat(typeCache.parentIdByDoc(0), nullValue());
    assertThat(typeCache.parentIdByDoc(1), nullValue());
    assertThat(typeCache.parentIdByDoc(2), nullValue());
    assertThat(typeCache.parentIdByDoc(3), nullValue());
    assertThat(typeCache.parentIdByDoc(4), nullValue());

    assertThat(typeCache.docById(new HashedBytesArray(Strings.toUTF8Bytes("8"))), equalTo(4));
}

From source file:org.elasticsearch.index.cache.id.SimpleIdCacheTests.java

License:Apache License

@Test(expected = AssertionError.class)
public void testRefresh_tripAssert() throws Exception {
    SimpleIdCache idCache = createSimpleIdCache(Tuple.tuple("child", "parent"));
    IndexWriter writer = createIndexWriter();
    // Begins with parent, ends with child docs
    writer.addDocument(doc("parent", "1"));
    writer.addDocument(childDoc("child", "1", "parent", "1"));
    writer.addDocument(childDoc("child", "2", "parent", "1"));
    writer.addDocument(childDoc("child", "3", "parent", "1"));
    writer.addDocument(childDoc("child", "4", "parent", "1"));
    // Doc like this should never end up in the index, just wanna trip an assert here!
    Document document = new Document();
    document.add(new StringField(UidFieldMapper.NAME, "parent", Field.Store.NO));
    writer.addDocument(document);//  ww  w. j a  v a2 s. c om
    writer.commit();

    writer.close();
    DirectoryReader topLevelReader = DirectoryReader.open(writer.getDirectory());
    List<AtomicReaderContext> leaves = topLevelReader.getContext().leaves();
    idCache.refresh(leaves);
}

From source file:org.elasticsearch.index.fielddata.IndexFieldDataServiceTests.java

License:Apache License

public void testChangeFieldDataFormat() throws Exception {
    final IndexFieldDataService ifdService = new IndexFieldDataService(new Index("test"),
            new DummyCircuitBreakerService());
    MapperService mapperService = MapperTestUtils.newMapperService(ifdService.index(),
            ImmutableSettings.Builder.EMPTY_SETTINGS);
    ifdService.setIndexService(new StubIndexService(mapperService));
    final BuilderContext ctx = new BuilderContext(null, new ContentPath(1));
    final StringFieldMapper mapper1 = MapperBuilders.stringField("s").tokenized(false)
            .fieldDataSettings(ImmutableSettings.builder().put(FieldDataType.FORMAT_KEY, "paged_bytes").build())
            .build(ctx);//w w  w  .j  a  v a2s  . c om
    final IndexWriter writer = new IndexWriter(new RAMDirectory(),
            new IndexWriterConfig(TEST_VERSION_CURRENT, new KeywordAnalyzer()));
    Document doc = new Document();
    doc.add(new StringField("s", "thisisastring", Store.NO));
    writer.addDocument(doc);
    final IndexReader reader1 = DirectoryReader.open(writer, true);
    IndexFieldData<?> ifd = ifdService.getForField(mapper1);
    assertThat(ifd, instanceOf(PagedBytesIndexFieldData.class));
    Set<AtomicReader> oldSegments = Collections.newSetFromMap(new IdentityHashMap<AtomicReader, Boolean>());
    for (AtomicReaderContext arc : reader1.leaves()) {
        oldSegments.add(arc.reader());
        AtomicFieldData<?> afd = ifd.load(arc);
        assertThat(afd, instanceOf(PagedBytesAtomicFieldData.class));
    }
    // write new segment
    writer.addDocument(doc);
    final IndexReader reader2 = DirectoryReader.open(writer, true);
    final StringFieldMapper mapper2 = MapperBuilders.stringField("s").tokenized(false)
            .fieldDataSettings(ImmutableSettings.builder().put(FieldDataType.FORMAT_KEY, "fst").build())
            .build(ctx);
    ifdService.onMappingUpdate();
    ifd = ifdService.getForField(mapper2);
    assertThat(ifd, instanceOf(FSTBytesIndexFieldData.class));
    for (AtomicReaderContext arc : reader2.leaves()) {
        AtomicFieldData<?> afd = ifd.load(arc);
        if (oldSegments.contains(arc.reader())) {
            assertThat(afd, instanceOf(PagedBytesAtomicFieldData.class));
        } else {
            assertThat(afd, instanceOf(FSTBytesAtomicFieldData.class));
        }
    }
    reader1.close();
    reader2.close();
    writer.close();
    writer.getDirectory().close();
}

From source file:org.elasticsearch.index.merge.policy.BalancedSegmentMergePolicy.java

License:Apache License

private boolean isOptimized(IndexWriter writer, SegmentInfo info) throws IOException {
    return !info.hasDeletions() && !info.hasSeparateNorms() && info.dir == writer.getDirectory()
            && info.getUseCompoundFile() == getUseCompoundFile();
}

From source file:org.elasticsearch.test.unit.common.compress.CompressIndexInputOutputTests.java

License:Apache License

private void verify(IndexWriter writer) throws Exception {
    CheckIndex checkIndex = new CheckIndex(writer.getDirectory());
    CheckIndex.Status status = checkIndex.checkIndex();
    assertThat(status.clean, equalTo(true));
    IndexReader reader = DirectoryReader.open(writer, true);
    final Bits liveDocs = MultiFields.getLiveDocs(reader);
    for (int i = 0; i < reader.maxDoc(); i++) {
        if (liveDocs != null && !liveDocs.get(i)) {
            continue;
        }/*from   w  w w .ja  v a 2  s.  c  o m*/
        Document document = reader.document(i);
        checkDoc(document);
        DocumentStoredFieldVisitor visitor = new DocumentStoredFieldVisitor("id", "field", "count");
        reader.document(i, visitor);
        document = visitor.getDocument();
        checkDoc(document);
    }
    for (int i = 0; i < 100; i++) {
        int doc = ThreadLocalRandom.current().nextInt(reader.maxDoc());
        if (liveDocs != null && !liveDocs.get(i)) {
            continue;
        }
        Document document = reader.document(doc);
        checkDoc(document);
        DocumentStoredFieldVisitor visitor = new DocumentStoredFieldVisitor("id", "field", "count");
        reader.document(doc, visitor);
        document = visitor.getDocument();
        checkDoc(document);
    }
}

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

License:Apache License

@Test
public void testMergingOldIndices() throws Exception {
    final IndexWriterConfig iwConf = new IndexWriterConfig(Lucene.VERSION, new KeywordAnalyzer());
    iwConf.setMergePolicy(new IndexUpgraderMergePolicy(iwConf.getMergePolicy()));
    final Directory dir = newDirectory();
    final IndexWriter iw = new IndexWriter(dir, iwConf);

    // 1st segment, no _version
    Document document = new Document();
    // Add a dummy field (enough to trigger #3237)
    document.add(new StringField("a", "b", Store.NO));
    StringField uid = new StringField(UidFieldMapper.NAME, "1", Store.YES);
    document.add(uid);/* w  ww. j  ava2s .  c  om*/
    iw.addDocument(document);
    uid.setStringValue("2");
    iw.addDocument(document);
    iw.commit();

    // 2nd segment, old layout
    document = new Document();
    UidField uidAndVersion = new UidField("3", 3L);
    document.add(uidAndVersion);
    iw.addDocument(document);
    uidAndVersion.uid = "4";
    uidAndVersion.version = 4L;
    iw.addDocument(document);
    iw.commit();

    // 3rd segment new layout
    document = new Document();
    uid.setStringValue("5");
    Field version = new NumericDocValuesField(UidFieldMapper.VERSION, 5L);
    document.add(uid);
    document.add(version);
    iw.addDocument(document);
    uid.setStringValue("6");
    version.setLongValue(6L);
    iw.addDocument(document);
    iw.commit();

    final Map<String, Long> expectedVersions = ImmutableMap.<String, Long>builder().put("1", 0L).put("2", 0L)
            .put("3", 0L).put("4", 4L).put("5", 5L).put("6", 6L).build();

    // Force merge and check versions
    iw.forceMerge(1);
    final AtomicReader ir = SlowCompositeReaderWrapper.wrap(DirectoryReader.open(iw.getDirectory()));
    final NumericDocValues versions = ir.getNumericDocValues(UidFieldMapper.VERSION);
    assertThat(versions, notNullValue());
    for (int i = 0; i < ir.maxDoc(); ++i) {
        final String uidValue = ir.document(i).get(UidFieldMapper.NAME);
        final long expectedVersion = expectedVersions.get(uidValue);
        assertThat(versions.get(i), equalTo(expectedVersion));
    }

    iw.close();
    assertThat(IndexWriter.isLocked(iw.getDirectory()), is(false));
    ir.close();
    dir.close();
}

From source file:org.ms123.common.data.lucene.LuceneServiceImpl.java

License:Open Source License

public synchronized void commit(LuceneSession session) {
    IndexWriter tiw = session.getIndexWriter();
    String namespace = session.getStoreDesc().getNamespace();
    try {/* w w w  . j  a  v a 2  s.c o m*/
        IndexReader ir = IndexReader.open(tiw, true);
        IndexWriter riw = getRealIndexWriter(namespace);
        deleteExistingDocs(session, riw);
        riw.addIndexes(ir);
        riw.maybeMerge();
        riw.commit();
        tiw.getDirectory().close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}