Skip to content

Commit 19d3056

Browse files
author
m.khludnev
committed
add Binary DV via IW.updateBDV()
1 parent 8e8e37d commit 19d3056

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

lucene/core/src/java/org/apache/lucene/index/IndexWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1931,7 +1931,7 @@ public long updateBinaryDocValue(Term term, String field, BytesRef value) throws
19311931
if (value == null) {
19321932
throw new IllegalArgumentException("cannot update a field to a null value: " + field);
19331933
}
1934-
globalFieldNumberMap.verifyOrCreateDvOnlyField(field, DocValuesType.BINARY, true);
1934+
globalFieldNumberMap.verifyOrCreateDvOnlyField(field, DocValuesType.BINARY, false);
19351935
try {
19361936
return maybeProcessEvents(
19371937
docWriter.updateDocValues(new BinaryDocValuesUpdate(term, field, value)));

lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,41 @@ public void testSimple() throws Exception {
149149
dir.close();
150150
}
151151

152+
public void testSimpleAddBDVFieldViaUpdate() throws Exception {
153+
Directory dir = newDirectory();
154+
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
155+
// make sure random config doesn't flush on us
156+
conf.setMaxBufferedDocs(10);
157+
conf.setRAMBufferSizeMB(IndexWriterConfig.DISABLE_AUTO_FLUSH);
158+
IndexWriter writer = new IndexWriter(dir, conf);
159+
writer.addDocument(doc(0)); // val=1
160+
writer.addDocument(doc(1)); // val=2
161+
if (random().nextBoolean()) { // randomly commit before the update is sent
162+
writer.commit();
163+
}
164+
writer.updateBinaryDocValue(new Term("id", "doc-0"), "new", toBytes(2)); // doc=0, exp=2
165+
166+
final DirectoryReader reader;
167+
if (random().nextBoolean()) { // not NRT
168+
writer.close();
169+
reader = DirectoryReader.open(dir);
170+
} else { // NRT
171+
reader = DirectoryReader.open(writer);
172+
writer.close();
173+
}
174+
175+
assertEquals(1, reader.leaves().size());
176+
LeafReader r = reader.leaves().get(0).reader();
177+
BinaryDocValues bdv = r.getBinaryDocValues("new");
178+
assertEquals(0, bdv.nextDoc());
179+
assertEquals(2, getValue(bdv));
180+
assertEquals(NO_MORE_DOCS, bdv.nextDoc());
181+
//assertEquals(2, getValue(bdv));
182+
reader.close();
183+
184+
dir.close();
185+
}
186+
152187
public void testUpdateFewSegments() throws Exception {
153188
Directory dir = newDirectory();
154189
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));

0 commit comments

Comments
 (0)