use of org.apache.lucene.document.BinaryDocValuesField in project lucene-solr by apache.
the class TestPerFieldDocValuesFormat method testMergeCalledOnTwoFormats.
public void testMergeCalledOnTwoFormats() throws IOException {
MergeRecordingDocValueFormatWrapper dvf1 = new MergeRecordingDocValueFormatWrapper(TestUtil.getDefaultDocValuesFormat());
MergeRecordingDocValueFormatWrapper dvf2 = new MergeRecordingDocValueFormatWrapper(TestUtil.getDefaultDocValuesFormat());
IndexWriterConfig iwc = new IndexWriterConfig();
iwc.setCodec(new AssertingCodec() {
@Override
public DocValuesFormat getDocValuesFormatForField(String field) {
switch(field) {
case "dv1":
case "dv2":
return dvf1;
case "dv3":
return dvf2;
default:
return super.getDocValuesFormatForField(field);
}
}
});
Directory directory = newDirectory();
IndexWriter iwriter = new IndexWriter(directory, iwc);
Document doc = new Document();
doc.add(new NumericDocValuesField("dv1", 5));
doc.add(new NumericDocValuesField("dv2", 42));
doc.add(new BinaryDocValuesField("dv3", new BytesRef("hello world")));
iwriter.addDocument(doc);
iwriter.commit();
doc = new Document();
doc.add(new NumericDocValuesField("dv1", 8));
doc.add(new NumericDocValuesField("dv2", 45));
doc.add(new BinaryDocValuesField("dv3", new BytesRef("goodbye world")));
iwriter.addDocument(doc);
iwriter.commit();
iwriter.forceMerge(1, true);
iwriter.close();
assertEquals(1, dvf1.nbMergeCalls);
assertEquals(new HashSet<>(Arrays.asList("dv1", "dv2")), new HashSet<>(dvf1.fieldNames));
assertEquals(1, dvf2.nbMergeCalls);
assertEquals(Collections.singletonList("dv3"), dvf2.fieldNames);
directory.close();
}
use of org.apache.lucene.document.BinaryDocValuesField in project lucene-solr by apache.
the class TestBinaryDocValuesUpdates method testUpdatesOrder.
public void testUpdatesOrder() throws Exception {
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
IndexWriter writer = new IndexWriter(dir, conf);
Document doc = new Document();
doc.add(new StringField("upd", "t1", Store.NO));
doc.add(new StringField("upd", "t2", Store.NO));
doc.add(new BinaryDocValuesField("f1", toBytes(1L)));
doc.add(new BinaryDocValuesField("f2", toBytes(1L)));
writer.addDocument(doc);
// update f1 to 2
writer.updateBinaryDocValue(new Term("upd", "t1"), "f1", toBytes(2L));
// update f2 to 2
writer.updateBinaryDocValue(new Term("upd", "t1"), "f2", toBytes(2L));
// update f1 to 3
writer.updateBinaryDocValue(new Term("upd", "t2"), "f1", toBytes(3L));
// update f2 to 3
writer.updateBinaryDocValue(new Term("upd", "t2"), "f2", toBytes(3L));
// update f1 to 4 (but not f2)
writer.updateBinaryDocValue(new Term("upd", "t1"), "f1", toBytes(4L));
writer.close();
DirectoryReader reader = DirectoryReader.open(dir);
BinaryDocValues bdv = reader.leaves().get(0).reader().getBinaryDocValues("f1");
assertEquals(0, bdv.nextDoc());
assertEquals(4, getValue(bdv));
bdv = reader.leaves().get(0).reader().getBinaryDocValues("f2");
assertEquals(0, bdv.nextDoc());
assertEquals(3, getValue(bdv));
reader.close();
dir.close();
}
use of org.apache.lucene.document.BinaryDocValuesField in project lucene-solr by apache.
the class TestBinaryDocValuesUpdates method testChangeCodec.
public void testChangeCodec() throws Exception {
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
// disable merges to simplify test assertions.
conf.setMergePolicy(NoMergePolicy.INSTANCE);
conf.setCodec(new AssertingCodec() {
@Override
public DocValuesFormat getDocValuesFormatForField(String field) {
return TestUtil.getDefaultDocValuesFormat();
}
});
IndexWriter writer = new IndexWriter(dir, conf);
Document doc = new Document();
doc.add(new StringField("id", "d0", Store.NO));
doc.add(new BinaryDocValuesField("f1", toBytes(5L)));
doc.add(new BinaryDocValuesField("f2", toBytes(13L)));
writer.addDocument(doc);
writer.close();
// change format
conf = newIndexWriterConfig(new MockAnalyzer(random()));
// disable merges to simplify test assertions.
conf.setMergePolicy(NoMergePolicy.INSTANCE);
conf.setCodec(new AssertingCodec() {
@Override
public DocValuesFormat getDocValuesFormatForField(String field) {
return new AssertingDocValuesFormat();
}
});
writer = new IndexWriter(dir, conf);
doc = new Document();
doc.add(new StringField("id", "d1", Store.NO));
doc.add(new BinaryDocValuesField("f1", toBytes(17L)));
doc.add(new BinaryDocValuesField("f2", toBytes(2L)));
writer.addDocument(doc);
writer.updateBinaryDocValue(new Term("id", "d0"), "f1", toBytes(12L));
writer.close();
DirectoryReader reader = DirectoryReader.open(dir);
BinaryDocValues f1 = MultiDocValues.getBinaryValues(reader, "f1");
BinaryDocValues f2 = MultiDocValues.getBinaryValues(reader, "f2");
assertEquals(0, f1.nextDoc());
assertEquals(0, f2.nextDoc());
assertEquals(12L, getValue(f1));
assertEquals(13L, getValue(f2));
assertEquals(1, f1.nextDoc());
assertEquals(1, f2.nextDoc());
assertEquals(17L, getValue(f1));
assertEquals(2L, getValue(f2));
reader.close();
dir.close();
}
use of org.apache.lucene.document.BinaryDocValuesField in project lucene-solr by apache.
the class TestBinaryDocValuesUpdates method testUpdateSameDocMultipleTimes.
public void testUpdateSameDocMultipleTimes() throws Exception {
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
IndexWriter writer = new IndexWriter(dir, conf);
Document doc = new Document();
doc.add(new StringField("key", "doc", Store.NO));
doc.add(new BinaryDocValuesField("bdv", toBytes(5L)));
// flushed document
writer.addDocument(doc);
writer.commit();
// in-memory document
writer.addDocument(doc);
// update existing field
writer.updateBinaryDocValue(new Term("key", "doc"), "bdv", toBytes(17L));
// update existing field 2nd time in this commit
writer.updateBinaryDocValue(new Term("key", "doc"), "bdv", toBytes(3L));
writer.close();
final DirectoryReader reader = DirectoryReader.open(dir);
BinaryDocValues bdv = MultiDocValues.getBinaryValues(reader, "bdv");
for (int i = 0; i < reader.maxDoc(); i++) {
assertEquals(i, bdv.nextDoc());
assertEquals(3, getValue(bdv));
}
reader.close();
dir.close();
}
use of org.apache.lucene.document.BinaryDocValuesField in project lucene-solr by apache.
the class TestBinaryDocValuesUpdates method testMultipleDocValuesTypes.
public void testMultipleDocValuesTypes() throws Exception {
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
// prevent merges
conf.setMaxBufferedDocs(10);
IndexWriter writer = new IndexWriter(dir, conf);
for (int i = 0; i < 4; i++) {
Document doc = new Document();
doc.add(new StringField("dvUpdateKey", "dv", Store.NO));
doc.add(new NumericDocValuesField("ndv", i));
doc.add(new BinaryDocValuesField("bdv", new BytesRef(Integer.toString(i))));
doc.add(new SortedDocValuesField("sdv", new BytesRef(Integer.toString(i))));
doc.add(new SortedSetDocValuesField("ssdv", new BytesRef(Integer.toString(i))));
doc.add(new SortedSetDocValuesField("ssdv", new BytesRef(Integer.toString(i * 2))));
writer.addDocument(doc);
}
writer.commit();
// update all docs' bdv field
writer.updateBinaryDocValue(new Term("dvUpdateKey", "dv"), "bdv", toBytes(17L));
writer.close();
final DirectoryReader reader = DirectoryReader.open(dir);
LeafReader r = reader.leaves().get(0).reader();
NumericDocValues ndv = r.getNumericDocValues("ndv");
BinaryDocValues bdv = r.getBinaryDocValues("bdv");
SortedDocValues sdv = r.getSortedDocValues("sdv");
SortedSetDocValues ssdv = r.getSortedSetDocValues("ssdv");
for (int i = 0; i < r.maxDoc(); i++) {
assertEquals(i, ndv.nextDoc());
assertEquals(i, ndv.longValue());
assertEquals(i, bdv.nextDoc());
assertEquals(17, getValue(bdv));
assertEquals(i, sdv.nextDoc());
BytesRef term = sdv.binaryValue();
assertEquals(new BytesRef(Integer.toString(i)), term);
assertEquals(i, ssdv.nextDoc());
long ord = ssdv.nextOrd();
term = ssdv.lookupOrd(ord);
assertEquals(i, Integer.parseInt(term.utf8ToString()));
// For the i=0 case, we added the same value twice, which was dedup'd by IndexWriter so it has only one value:
if (i != 0) {
ord = ssdv.nextOrd();
term = ssdv.lookupOrd(ord);
assertEquals(i * 2, Integer.parseInt(term.utf8ToString()));
}
assertEquals(SortedSetDocValues.NO_MORE_ORDS, ssdv.nextOrd());
}
reader.close();
dir.close();
}
Aggregations