Skip to content

Commit 6370892

Browse files
Small fix for assertConsistentGraph (#631)
TestKnnGraph.testMultipleVectorFields sometimes breaks with the following message: java.lang.NullPointerException: Cannot invoke "org.apache.lucene.codecs.lucene91.Lucene91HnswVectorsReader.getGraphValues(String)" because "vectorReader" is null This happens in assertConsistentGraph. This patch ensures that for a segment and a field where there is no vectors indexed, we don't run a check on consistent graph.
1 parent 0c97682 commit 6370892

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,11 @@ public void testMultipleVectorFields() throws Exception {
172172
int numDoc = atLeast(100);
173173
int[] dims = new int[numVectorFields];
174174
float[][][] values = new float[numVectorFields][][];
175+
FieldType[] fieldTypes = new FieldType[numVectorFields];
175176
for (int field = 0; field < numVectorFields; field++) {
176177
dims[field] = atLeast(3);
177178
values[field] = randomVectors(numDoc, dims[field]);
179+
fieldTypes[field] = KnnVectorField.createFieldType(dims[field], similarityFunction);
178180
}
179181

180182
try (Directory dir = newDirectory();
@@ -184,8 +186,7 @@ public void testMultipleVectorFields() throws Exception {
184186
for (int field = 0; field < numVectorFields; field++) {
185187
float[] vector = values[field][docID];
186188
if (vector != null) {
187-
FieldType fieldType = KnnVectorField.createFieldType(vector.length, similarityFunction);
188-
doc.add(new KnnVectorField(KNN_GRAPH_FIELD + field, vector, fieldType));
189+
doc.add(new KnnVectorField(KNN_GRAPH_FIELD + field, vector, fieldTypes[field]));
189190
}
190191
}
191192
String idString = Integer.toString(docID);
@@ -428,15 +429,18 @@ private void assertConsistentGraph(IndexWriter iw, float[][] values, String vect
428429
try (DirectoryReader dr = DirectoryReader.open(iw)) {
429430
for (LeafReaderContext ctx : dr.leaves()) {
430431
LeafReader reader = ctx.reader();
431-
VectorValues vectorValues = reader.getVectorValues(vectorField);
432432
PerFieldKnnVectorsFormat.FieldsReader perFieldReader =
433433
(PerFieldKnnVectorsFormat.FieldsReader) ((CodecReader) reader).getVectorReader();
434434
if (perFieldReader == null) {
435435
continue;
436436
}
437437
Lucene91HnswVectorsReader vectorReader =
438438
(Lucene91HnswVectorsReader) perFieldReader.getFieldReader(vectorField);
439+
if (vectorReader == null) {
440+
continue;
441+
}
439442
KnnGraphValues graphValues = vectorReader.getGraphValues(vectorField);
443+
VectorValues vectorValues = reader.getVectorValues(vectorField);
440444
if (vectorValues == null) {
441445
assert graphValues == null;
442446
continue;

0 commit comments

Comments
 (0)