Skip to content

Commit 05af651

Browse files
authored
Applied lucene.bug.VectorSimilarityFunction.doubleVal.patch.txt (#15329)
1 parent 10cb3ee commit 05af651

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

lucene/CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ API Changes
147147

148148
New Features
149149
---------------------
150+
* GITHUB#15328: VectorSimilarityFunction.getValues() now implements doubleVal allowing its
151+
use in FunctionScoreQuery. (hossman)
152+
150153
* GITHUB#14565: Add ParentsChildrenBlockJoinQuery that supports parent and child filter in the same query
151154
along with limiting number of child documents to retrieve per parent. (Jinny Wang)
152155

lucene/queries/src/java/org/apache/lucene/queries/function/valuesource/VectorSimilarityFunction.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ public float floatVal(int doc) throws IOException {
5252
return func(doc, vector1Vals, vector2Vals);
5353
}
5454

55+
@Override
56+
public double doubleVal(int doc) throws IOException {
57+
return floatVal(doc);
58+
}
59+
5560
@Override
5661
public String strVal(int doc) throws IOException {
5762
return Float.toString(floatVal(doc));

lucene/queries/src/test/org/apache/lucene/queries/function/TestKnnVectorSimilarityFunctions.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.lucene.queries.function.valuesource.FloatKnnVectorFieldSource;
3535
import org.apache.lucene.queries.function.valuesource.FloatVectorSimilarityFunction;
3636
import org.apache.lucene.search.IndexSearcher;
37+
import org.apache.lucene.search.MatchAllDocsQuery;
3738
import org.apache.lucene.search.Query;
3839
import org.apache.lucene.search.ScoreDoc;
3940
import org.apache.lucene.search.Sort;
@@ -113,8 +114,7 @@ public void vectorSimilarity_floatConstantVectors_shouldReturnFloatSimilarity()
113114
var v1 = new ConstKnnFloatValueSource(new float[] {1, 2, 3});
114115
var v2 = new ConstKnnFloatValueSource(new float[] {5, 4, 1});
115116
assertHits(
116-
new FunctionQuery(
117-
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
117+
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
118118
new float[] {0.04f, 0.04f});
119119
}
120120

@@ -123,8 +123,7 @@ public void vectorSimilarity_byteConstantVectors_shouldReturnFloatSimilarity() t
123123
var v1 = new ConstKnnByteVectorValueSource(new byte[] {1, 2, 3});
124124
var v2 = new ConstKnnByteVectorValueSource(new byte[] {2, 5, 6});
125125
assertHits(
126-
new FunctionQuery(
127-
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
126+
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
128127
new float[] {0.05f, 0.05f});
129128
}
130129

@@ -133,8 +132,7 @@ public void vectorSimilarity_floatFieldVectors_shouldReturnFloatSimilarity() thr
133132
var v1 = new FloatKnnVectorFieldSource("knnFloatField1");
134133
var v2 = new FloatKnnVectorFieldSource("knnFloatField2");
135134
assertHits(
136-
new FunctionQuery(
137-
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
135+
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
138136
new float[] {0.049776014f, 0.049776014f});
139137
}
140138

@@ -143,8 +141,7 @@ public void vectorSimilarity_byteFieldVectors_shouldReturnFloatSimilarity() thro
143141
var v1 = new ByteKnnVectorFieldSource("knnByteField1");
144142
var v2 = new ByteKnnVectorFieldSource("knnByteField2");
145143
assertHits(
146-
new FunctionQuery(
147-
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
144+
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
148145
new float[] {0.1f, 0.1f});
149146
}
150147

@@ -154,8 +151,7 @@ public void vectorSimilarity_FloatConstAndFloatFieldVectors_shouldReturnFloatSim
154151
var v1 = new ConstKnnFloatValueSource(new float[] {1, 2, 4});
155152
var v2 = new FloatKnnVectorFieldSource("knnFloatField1");
156153
assertHits(
157-
new FunctionQuery(
158-
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
154+
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
159155
new float[] {0.5f, 0.5f});
160156
}
161157

@@ -165,8 +161,7 @@ public void vectorSimilarity_ByteConstAndByteFieldVectors_shouldReturnFloatSimil
165161
var v1 = new ConstKnnByteVectorValueSource(new byte[] {1, 2, 4});
166162
var v2 = new ByteKnnVectorFieldSource("knnByteField1");
167163
assertHits(
168-
new FunctionQuery(
169-
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
164+
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
170165
new float[] {0.5f, 0.5f});
171166
}
172167

@@ -175,8 +170,7 @@ public void vectorSimilarity_missingFloatVectorField_shouldReturnZero() throws E
175170
var v1 = new ConstKnnFloatValueSource(new float[] {2.f, 1.f, 1.f});
176171
var v2 = new FloatKnnVectorFieldSource("knnFloatField3");
177172
assertHits(
178-
new FunctionQuery(
179-
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
173+
new FloatVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
180174
new float[] {0.5f, 0.f});
181175
}
182176

@@ -185,8 +179,7 @@ public void vectorSimilarity_missingByteVectorField_shouldReturnZero() throws Ex
185179
var v1 = new ConstKnnByteVectorValueSource(new byte[] {2, 1, 1});
186180
var v2 = new ByteKnnVectorFieldSource("knnByteField3");
187181
assertHits(
188-
new FunctionQuery(
189-
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2)),
182+
new ByteVectorSimilarityFunction(VectorSimilarityFunction.EUCLIDEAN, v1, v2),
190183
new float[] {0.5f, 0.f});
191184
}
192185

@@ -259,6 +252,12 @@ public void vectorSimilarity_wrongFieldType_shouldRaiseException() {
259252
() -> searcher.search(new FunctionQuery(idVectorSimilarityFunction), 10));
260253
}
261254

255+
private static void assertHits(final ValueSource func, final float[] scores) throws Exception {
256+
assertHits(new FunctionQuery(func), scores);
257+
assertHits(
258+
new FunctionScoreQuery(new MatchAllDocsQuery(), func.asDoubleValuesSource()), scores);
259+
}
260+
262261
private static void assertHits(Query q, float[] scores) throws Exception {
263262
ScoreDoc[] expected = new ScoreDoc[scores.length];
264263
int[] expectedDocs = new int[scores.length];

0 commit comments

Comments
 (0)