Skip to content

Commit 4633b88

Browse files
authored
Add checkDimension check to Lucene104ScalarQuantizedVectorScorer#getRandomVectorScorer (#15359)
1 parent 6f42ab3 commit 4633b88

File tree

4 files changed

+12
-17
lines changed

4 files changed

+12
-17
lines changed

lucene/core/src/java/org/apache/lucene/codecs/hnsw/FlatVectorsScorer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,11 @@ RandomVectorScorer getRandomVectorScorer(
6767
RandomVectorScorer getRandomVectorScorer(
6868
VectorSimilarityFunction similarityFunction, KnnVectorValues vectorValues, byte[] target)
6969
throws IOException;
70+
71+
static void checkDimensions(int queryLen, int fieldLen) {
72+
if (queryLen != fieldLen) {
73+
throw new IllegalArgumentException(
74+
"vector query dimension: " + queryLen + " differs from field dimension: " + fieldLen);
75+
}
76+
}
7077
}

lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104ScalarQuantizedVectorScorer.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,6 @@ public Lucene104ScalarQuantizedVectorScorer(FlatVectorsScorer nonQuantizedDelega
3939
this.nonQuantizedDelegate = nonQuantizedDelegate;
4040
}
4141

42-
static void checkDimensions(int queryLen, int fieldLen) {
43-
if (queryLen != fieldLen) {
44-
throw new IllegalArgumentException(
45-
"vector query dimension: " + queryLen + " differs from field dimension: " + fieldLen);
46-
}
47-
}
48-
4942
@Override
5043
public RandomVectorScorerSupplier getRandomVectorScorerSupplier(
5144
VectorSimilarityFunction similarityFunction, KnnVectorValues vectorValues)
@@ -62,7 +55,7 @@ public RandomVectorScorer getRandomVectorScorer(
6255
VectorSimilarityFunction similarityFunction, KnnVectorValues vectorValues, float[] target)
6356
throws IOException {
6457
if (vectorValues instanceof QuantizedByteVectorValues qv) {
65-
checkDimensions(target.length, qv.dimension());
58+
FlatVectorsScorer.checkDimensions(target.length, qv.dimension());
6659
OptimizedScalarQuantizer quantizer = qv.getQuantizer();
6760
byte[] targetQuantized =
6861
new byte
@@ -93,6 +86,7 @@ public float score(int node) throws IOException {
9386
public RandomVectorScorer getRandomVectorScorer(
9487
VectorSimilarityFunction similarityFunction, KnnVectorValues vectorValues, byte[] target)
9588
throws IOException {
89+
FlatVectorsScorer.checkDimensions(target.length, vectorValues.dimension());
9690
return nonQuantizedDelegate.getRandomVectorScorer(similarityFunction, vectorValues, target);
9791
}
9892

lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99ScalarQuantizedVectorScorer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ static UpdateableRandomVectorScorer fromVectorSimilarity(
9595
VectorSimilarityFunction sim,
9696
float constMultiplier,
9797
QuantizedByteVectorValues values) {
98+
FlatVectorsScorer.checkDimensions(values.dimension(), targetBytes.length);
9899
return switch (sim) {
99100
case EUCLIDEAN -> new Euclidean(values, constMultiplier, targetBytes);
100101
case COSINE, DOT_PRODUCT ->

lucene/core/src/java21/org/apache/lucene/internal/vectorization/Lucene99MemorySegmentFlatVectorsScorer.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ private RandomVectorScorerSupplier getByteScorerSupplier(
8484
public RandomVectorScorer getRandomVectorScorer(
8585
VectorSimilarityFunction similarityType, KnnVectorValues vectorValues, float[] target)
8686
throws IOException {
87-
checkDimensions(target.length, vectorValues.dimension());
87+
FlatVectorsScorer.checkDimensions(target.length, vectorValues.dimension());
8888
if (vectorValues instanceof FloatVectorValues fvv
8989
&& fvv instanceof HasIndexSlice floatVectorValues
9090
&& floatVectorValues.getSlice() != null) {
@@ -102,7 +102,7 @@ public RandomVectorScorer getRandomVectorScorer(
102102
public RandomVectorScorer getRandomVectorScorer(
103103
VectorSimilarityFunction similarityType, KnnVectorValues vectorValues, byte[] queryVector)
104104
throws IOException {
105-
checkDimensions(queryVector.length, vectorValues.dimension());
105+
FlatVectorsScorer.checkDimensions(queryVector.length, vectorValues.dimension());
106106
// a quantized values here is a wrapping or delegation issue
107107
assert !(vectorValues instanceof QuantizedByteVectorValues);
108108
if (vectorValues instanceof ByteVectorValues bvv
@@ -118,13 +118,6 @@ public RandomVectorScorer getRandomVectorScorer(
118118
return delegate.getRandomVectorScorer(similarityType, vectorValues, queryVector);
119119
}
120120

121-
static void checkDimensions(int queryLen, int fieldLen) {
122-
if (queryLen != fieldLen) {
123-
throw new IllegalArgumentException(
124-
"vector query dimension: " + queryLen + " differs from field dimension: " + fieldLen);
125-
}
126-
}
127-
128121
@Override
129122
public String toString() {
130123
return "Lucene99MemorySegmentFlatVectorsScorer()";

0 commit comments

Comments
 (0)