Skip to content

Commit fd790ff

Browse files
authored
Fix ExactKnnQueryBuilderTests testToQuery (elastic#110357) (elastic#110589)
closes elastic#110357 With the loosening of what is considered a unit vector, we need to ensure we only normalize for equality checking if the query vector is indeed not a unit vector.
1 parent e8556c1 commit fd790ff

File tree

3 files changed

+5
-5
lines changed

3 files changed

+5
-5
lines changed

muted-tests.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,6 @@ tests:
8888
- class: org.elasticsearch.backwards.SearchWithMinCompatibleSearchNodeIT
8989
method: testMinVersionAsOldVersion
9090
issue: https://github.com/elastic/elasticsearch/issues/109454
91-
- class: org.elasticsearch.search.vectors.ExactKnnQueryBuilderTests
92-
method: testToQuery
93-
issue: https://github.com/elastic/elasticsearch/issues/110357
9491
- class: org.elasticsearch.search.aggregations.bucket.terms.RareTermsIT
9592
method: testSingleValuedString
9693
issue: https://github.com/elastic/elasticsearch/issues/110388

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public class DenseVectorFieldMapper extends FieldMapper {
9898
public static final String COSINE_MAGNITUDE_FIELD_SUFFIX = "._magnitude";
9999
private static final float EPS = 1e-3f;
100100

101-
static boolean isNotUnitVector(float magnitude) {
101+
public static boolean isNotUnitVector(float magnitude) {
102102
return Math.abs(magnitude - 1.0f) > EPS;
103103
}
104104

server/src/test/java/org/elasticsearch/search/vectors/ExactKnnQueryBuilderTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.elasticsearch.common.compress.CompressedXContent;
1515
import org.elasticsearch.index.IndexVersions;
1616
import org.elasticsearch.index.mapper.MapperService;
17+
import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper;
1718
import org.elasticsearch.index.query.SearchExecutionContext;
1819
import org.elasticsearch.plugins.Plugin;
1920
import org.elasticsearch.test.AbstractQueryTestCase;
@@ -87,7 +88,9 @@ protected void doAssertLuceneQuery(ExactKnnQueryBuilder queryBuilder, Query quer
8788
DenseVectorQuery.Floats denseVectorQuery = (DenseVectorQuery.Floats) query;
8889
assertEquals(VECTOR_FIELD, denseVectorQuery.field);
8990
float[] expected = Arrays.copyOf(queryBuilder.getQuery().asFloatVector(), queryBuilder.getQuery().asFloatVector().length);
90-
if (context.getIndexSettings().getIndexVersionCreated().onOrAfter(IndexVersions.NORMALIZED_VECTOR_COSINE)) {
91+
float magnitude = VectorUtil.dotProduct(expected, expected);
92+
if (context.getIndexSettings().getIndexVersionCreated().onOrAfter(IndexVersions.NORMALIZED_VECTOR_COSINE)
93+
&& DenseVectorFieldMapper.isNotUnitVector(magnitude)) {
9194
VectorUtil.l2normalize(expected);
9295
assertArrayEquals(expected, denseVectorQuery.getQuery(), 0.0f);
9396
} else {

0 commit comments

Comments
 (0)