List of usage examples for org.apache.lucene.index IndexWriter getDirectory
public Directory getDirectory()
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(); } }