diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene95/Lucene95HnswVectorsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene95/Lucene95HnswVectorsWriter.java index 1349624e2803..efbbdd5e539b 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene95/Lucene95HnswVectorsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene95/Lucene95HnswVectorsWriter.java @@ -559,8 +559,12 @@ private HnswGraph getHnswGraphFromReader(String fieldName, KnnVectorsReader knnV return ((Lucene95HnswVectorsReader) knnVectorsReader).getGraph(fieldName); } + // We should not reach here because knnVectorsReader's type is checked in + // selectGraphForInitialization throw new IllegalArgumentException( - "Invalid KnnVectorsReader. Must be of type PerFieldKnnVectorsFormat.FieldsReader or Lucene94HnswVectorsReader"); + "Invalid KnnVectorsReader type for field: " + + fieldName + + ". Must be Lucene95HnswVectorsReader or newer"); } private Map getOldToNewOrdinalMap( @@ -571,6 +575,7 @@ private Map getOldToNewOrdinalMap( Map newIdToOldOrdinal = new HashMap<>(); int oldOrd = 0; + int maxNewDocID = -1; for (int oldId = initializerVectorValues.nextDoc(); oldId != NO_MORE_DOCS; oldId = initializerVectorValues.nextDoc()) { @@ -578,15 +583,18 @@ private Map getOldToNewOrdinalMap( continue; } int newId = initializerDocMap.get(oldId); + maxNewDocID = Math.max(newId, maxNewDocID); newIdToOldOrdinal.put(newId, oldOrd); oldOrd++; } + if (maxNewDocID == -1) { + return Collections.emptyMap(); + } + Map oldToNewOrdinalMap = new HashMap<>(); - int newOrd = 0; - int maxNewDocID = Collections.max(newIdToOldOrdinal.keySet()); VectorValues vectorValues = MergedVectorValues.mergeVectorValues(fieldInfo, mergeState); - + int newOrd = 0; for (int newDocId = vectorValues.nextDoc(); newDocId <= maxNewDocID; newDocId = vectorValues.nextDoc()) {