Skip to content

Commit ee904b0

Browse files
committed
Fix VectorSimilarityFloatValueSource implementation for advanceExact
1 parent d95db48 commit ee904b0

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

server/src/main/java/org/elasticsearch/index/mapper/vectors/VectorSimilarityByteValueSource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.apache.lucene.index.LeafReader;
1515
import org.apache.lucene.index.LeafReaderContext;
1616
import org.apache.lucene.index.VectorSimilarityFunction;
17+
import org.apache.lucene.search.DocIdSetIterator;
1718
import org.apache.lucene.search.DoubleValues;
1819
import org.apache.lucene.search.DoubleValuesSource;
1920
import org.apache.lucene.search.IndexSearcher;
@@ -43,7 +44,7 @@ public DoubleValues getValues(LeafReaderContext ctx, DoubleValues scores) throws
4344
final LeafReader reader = ctx.reader();
4445

4546
ByteVectorValues vectorValues = reader.getByteVectorValues(field);
46-
KnnVectorValues.DocIndexIterator iterator = vectorValues.iterator();
47+
final KnnVectorValues.DocIndexIterator iterator = vectorValues.iterator();
4748

4849
return new DoubleValues() {
4950
private int docId = -1;
@@ -55,7 +56,8 @@ public double doubleValue() throws IOException {
5556

5657
@Override
5758
public boolean advanceExact(int doc) throws IOException {
58-
return iterator.advance(doc) == doc;
59+
docId = doc;
60+
return doc >= iterator.docID() && iterator.docID() != DocIdSetIterator.NO_MORE_DOCS && iterator.advance(doc) == doc;
5961
}
6062
};
6163
}

server/src/main/java/org/elasticsearch/index/mapper/vectors/VectorSimilarityFloatValueSource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.apache.lucene.index.LeafReader;
1515
import org.apache.lucene.index.LeafReaderContext;
1616
import org.apache.lucene.index.VectorSimilarityFunction;
17+
import org.apache.lucene.search.DocIdSetIterator;
1718
import org.apache.lucene.search.DoubleValues;
1819
import org.apache.lucene.search.DoubleValuesSource;
1920
import org.apache.lucene.search.IndexSearcher;
@@ -43,7 +44,7 @@ public DoubleValues getValues(LeafReaderContext ctx, DoubleValues scores) throws
4344
final LeafReader reader = ctx.reader();
4445

4546
FloatVectorValues vectorValues = reader.getFloatVectorValues(field);
46-
KnnVectorValues.DocIndexIterator iterator = vectorValues.iterator();
47+
final KnnVectorValues.DocIndexIterator iterator = vectorValues.iterator();
4748

4849
return new DoubleValues() {
4950
private int docId = -1;
@@ -55,7 +56,8 @@ public double doubleValue() throws IOException {
5556

5657
@Override
5758
public boolean advanceExact(int doc) throws IOException {
58-
return iterator.advance(doc) == doc;
59+
docId = doc;
60+
return doc >= iterator.docID() && iterator.docID() != DocIdSetIterator.NO_MORE_DOCS && iterator.advance(doc) == doc;
5961
}
6062
};
6163
}

0 commit comments

Comments
 (0)