diff --git a/lucene/core/src/test/org/apache/lucene/TestDemoDocValue.java b/lucene/core/src/test/org/apache/lucene/TestDemoDocValue.java index 1049daaa93a..3c8a0eb31d8 100644 --- a/lucene/core/src/test/org/apache/lucene/TestDemoDocValue.java +++ b/lucene/core/src/test/org/apache/lucene/TestDemoDocValue.java @@ -123,6 +123,48 @@ public class TestDemoDocValue extends LuceneTestCase { ireader.close(); directory.close(); } + + public void testTwoDocumentsMerged() throws IOException { + Analyzer analyzer = new MockAnalyzer(random()); + + // Store the index in memory: + Directory directory = newDirectory(); + // To store an index on disk, use this instead: + // Directory directory = FSDirectory.open(new File("/tmp/testindex")); + // we don't use RandomIndexWriter because it might add more docvalues than we expect !!!!1 + IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer); + iwc.setMergePolicy(newLogMergePolicy()); + IndexWriter iwriter = new IndexWriter(directory, iwc); + Document doc = new Document(); + doc.add(newField("id", "0", StringField.TYPE_STORED)); + doc.add(new PackedLongDocValuesField("dv", 1)); + iwriter.addDocument(doc); + iwriter.commit(); + doc = new Document(); + doc.add(newField("id", "1", StringField.TYPE_STORED)); + doc.add(new PackedLongDocValuesField("dv", 3)); + iwriter.addDocument(doc); + iwriter.forceMerge(1); + iwriter.close(); + + // Now search the index: + IndexReader ireader = DirectoryReader.open(directory); // read-only=true + assert ireader.leaves().size() == 1; + DocValues dv = ireader.leaves().get(0).reader().docValues("dv"); + for(int i=0;i<2;i++) { + StoredDocument doc2 = ireader.leaves().get(0).reader().document(i); + long expected; + if (doc2.get("id").equals("0")) { + expected = 1; + } else { + expected = 3; + } + assertEquals(expected, dv.getSource().getInt(i)); + } + + ireader.close(); + directory.close(); + } public void testBigRange() throws IOException { Analyzer analyzer = new MockAnalyzer(random()); @@ -198,6 +240,48 @@ public class TestDemoDocValue extends LuceneTestCase { ireader.close(); directory.close(); } + + public void testBytesTwoDocumentsMerged() throws IOException { + Analyzer analyzer = new MockAnalyzer(random()); + + // Store the index in memory: + Directory directory = newDirectory(); + // To store an index on disk, use this instead: + // Directory directory = FSDirectory.open(new File("/tmp/testindex")); + // we don't use RandomIndexWriter because it might add more docvalues than we expect !!!!1 + IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer); + iwc.setMergePolicy(newLogMergePolicy()); + IndexWriter iwriter = new IndexWriter(directory, iwc); + Document doc = new Document(); + doc.add(newField("id", "0", StringField.TYPE_STORED)); + doc.add(new StraightBytesDocValuesField("dv", new BytesRef("hello world 1"))); + iwriter.addDocument(doc); + iwriter.commit(); + doc = new Document(); + doc.add(newField("id", "1", StringField.TYPE_STORED)); + doc.add(new StraightBytesDocValuesField("dv", new BytesRef("hello world 2"))); + iwriter.addDocument(doc); + iwriter.forceMerge(1); + iwriter.close(); + + // Now search the index: + IndexReader ireader = DirectoryReader.open(directory); // read-only=true + assert ireader.leaves().size() == 1; + DocValues dv = ireader.leaves().get(0).reader().docValues("dv"); + for(int i=0;i<2;i++) { + StoredDocument doc2 = ireader.leaves().get(0).reader().document(i); + String expected; + if (doc2.get("id").equals("0")) { + expected = "hello world 1"; + } else { + expected = "hello world 2"; + } + assertEquals(expected, dv.getSource().getBytes(i, new BytesRef()).utf8ToString()); + } + + ireader.close(); + directory.close(); + } public void testDemoSortedBytes() throws IOException { Analyzer analyzer = new MockAnalyzer(random());