Skip to content

Commit 8b9c350

Browse files
committed
Fix NPE in flat_bbq scorer when all vectors are missing
1 parent 8ec65ef commit 8b9c350

File tree

4 files changed

+8
-2
lines changed

4 files changed

+8
-2
lines changed

server/src/main/java/org/elasticsearch/index/codec/vectors/es816/ES816BinaryFlatVectorsScorer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public RandomVectorScorer getRandomVectorScorer(
5959
float[] target
6060
) throws IOException {
6161
if (vectorValues instanceof BinarizedByteVectorValues binarizedVectors) {
62+
assert binarizedVectors.getQuantizer() != null
63+
: "BinarizedByteVectorValues must have a quantizer for ES816BinaryFlatVectorsScorer";
64+
assert binarizedVectors.size() > 0 : "BinarizedByteVectorValues must have at least one vector for ES816BinaryFlatVectorsScorer";
6265
BinaryQuantizer quantizer = binarizedVectors.getQuantizer();
6366
float[] centroid = binarizedVectors.getCentroid();
6467
// FIXME: precompute this once?

server/src/main/java/org/elasticsearch/index/codec/vectors/es816/ES816BinaryQuantizedVectorsReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ static void validateFieldEntry(FieldInfo info, FieldEntry fieldEntry) {
160160
@Override
161161
public RandomVectorScorer getRandomVectorScorer(String field, float[] target) throws IOException {
162162
FieldEntry fi = fields.get(field);
163-
if (fi == null) {
163+
if (fi == null || fi.size() == 0) {
164164
return null;
165165
}
166166
return vectorScorer.getRandomVectorScorer(

server/src/main/java/org/elasticsearch/index/codec/vectors/es818/ES818BinaryFlatVectorsScorer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public RandomVectorScorer getRandomVectorScorer(
6666
float[] target
6767
) throws IOException {
6868
if (vectorValues instanceof BinarizedByteVectorValues binarizedVectors) {
69+
assert binarizedVectors.getQuantizer() != null
70+
: "BinarizedByteVectorValues must have a quantizer for ES816BinaryFlatVectorsScorer";
71+
assert binarizedVectors.size() > 0 : "BinarizedByteVectorValues must have at least one vector for ES816BinaryFlatVectorsScorer";
6972
OptimizedScalarQuantizer quantizer = binarizedVectors.getQuantizer();
7073
float[] centroid = binarizedVectors.getCentroid();
7174
// We make a copy as the quantization process mutates the input

server/src/main/java/org/elasticsearch/index/codec/vectors/es818/ES818BinaryQuantizedVectorsReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ static void validateFieldEntry(FieldInfo info, FieldEntry fieldEntry) {
160160
@Override
161161
public RandomVectorScorer getRandomVectorScorer(String field, float[] target) throws IOException {
162162
FieldEntry fi = fields.get(field);
163-
if (fi == null) {
163+
if (fi == null || fi.size() == 0) {
164164
return null;
165165
}
166166
return vectorScorer.getRandomVectorScorer(

0 commit comments

Comments
 (0)