From 29ca7a8dbfeeeebdd5dae1000edf12e5400e5eae Mon Sep 17 00:00:00 2001 From: carlosdelest Date: Thu, 10 Jul 2025 18:33:26 +0200 Subject: [PATCH 1/4] Unmute tests muted in #129550 as they were fixed in #127322 --- .../src/main/resources/knn-function.csv-spec | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/x-pack/plugin/esql/qa/testFixtures/src/main/resources/knn-function.csv-spec b/x-pack/plugin/esql/qa/testFixtures/src/main/resources/knn-function.csv-spec index c6105b82f2300..0b91b23db516a 100644 --- a/x-pack/plugin/esql/qa/testFixtures/src/main/resources/knn-function.csv-spec +++ b/x-pack/plugin/esql/qa/testFixtures/src/main/resources/knn-function.csv-spec @@ -29,8 +29,7 @@ chartreuse | [127.0, 255.0, 0.0] // end::knn-function-result[] ; -# https://github.com/elastic/elasticsearch/issues/129550 - Add as an example to knn function documentation -knnSearchWithSimilarityOption-Ignore +knnSearchWithSimilarityOption required_capability: knn_function_v2 from colors metadata _score @@ -208,8 +207,7 @@ green | false maroon | false ; -# https://github.com/elastic/elasticsearch/issues/129550 -testKnnWithNonPushableDisjunctions-Ignore +testKnnWithNonPushableDisjunctions required_capability: knn_function_v2 from colors metadata _score @@ -225,8 +223,7 @@ lemon chiffon papaya whip ; -# https://github.com/elastic/elasticsearch/issues/129550 -testKnnWithNonPushableDisjunctionsOnComplexExpressions-Ignore +testKnnWithNonPushableDisjunctionsOnComplexExpressions required_capability: knn_function_v2 from colors metadata _score From 6512be8949894a03305def6b6e20448c554f987d Mon Sep 17 00:00:00 2001 From: carlosdelest Date: Fri, 11 Jul 2025 11:57:12 +0200 Subject: [PATCH 2/4] Return no match when no dimensions have been set --- .../index/mapper/vectors/DenseVectorFieldMapper.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java index 4d1c4fc41526c..c1000c68b4867 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java @@ -35,6 +35,7 @@ import org.apache.lucene.search.FieldExistsQuery; import org.apache.lucene.search.KnnByteVectorQuery; import org.apache.lucene.search.KnnFloatVectorQuery; +import org.apache.lucene.search.MatchNoDocsQuery; import org.apache.lucene.search.PatienceKnnVectorQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.join.BitSetProducer; @@ -2530,6 +2531,9 @@ public Query createKnnQuery( "to perform knn search on field [" + name() + "], its mapping must have [index] set to [true]" ); } + if (dims == null) { + return new MatchNoDocsQuery("No data has been indexed for field [" + name() + "]"); + } KnnSearchStrategy knnSearchStrategy = heuristic.getKnnSearchStrategy(); return switch (getElementType()) { case BYTE -> createKnnByteQuery( From b5ff75778625e2fb4523316eda033b7c2efbdb7b Mon Sep 17 00:00:00 2001 From: carlosdelest Date: Fri, 11 Jul 2025 11:57:19 +0200 Subject: [PATCH 3/4] Add tests --- .../test/search.vectors/40_knn_search.yml | 33 +++++++++++++++++++ .../elasticsearch/search/SearchFeatures.java | 4 ++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search.vectors/40_knn_search.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search.vectors/40_knn_search.yml index 35e59b0e4e31a..e617d08940f84 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search.vectors/40_knn_search.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search.vectors/40_knn_search.yml @@ -670,3 +670,36 @@ setup: properties: embedding: type: dense_vector + + +--- +"Searching with no data dimensions specified": + - requires: + cluster_features: "search.vectors.no_dimensions_bugfix" + reason: "Search with no dimensions bugfix" + + - do: + indices.create: + index: empty-test + body: + mappings: + properties: + vector: + type: dense_vector + index: true + + - do: + search: + index: empty-test + body: + fields: [ "name" ] + knn: + field: vector + query_vector: [ -0.5, 90.0, -10, 14.8, -156.0 ] + k: 3 + num_candidates: 3 + rescore_vector: + oversample: 1.5 + similarity: 0.1 + + - match: { hits.total.value: 0 } diff --git a/server/src/main/java/org/elasticsearch/search/SearchFeatures.java b/server/src/main/java/org/elasticsearch/search/SearchFeatures.java index 0c2f7c2aa625b..80ccd4c188538 100644 --- a/server/src/main/java/org/elasticsearch/search/SearchFeatures.java +++ b/server/src/main/java/org/elasticsearch/search/SearchFeatures.java @@ -32,6 +32,7 @@ public Set getFeatures() { public static final NodeFeature INT_SORT_FOR_INT_SHORT_BYTE_FIELDS = new NodeFeature("search.sort.int_sort_for_int_short_byte_fields"); static final NodeFeature MULTI_MATCH_CHECKS_POSITIONS = new NodeFeature("search.multi.match.checks.positions"); public static final NodeFeature BBQ_HNSW_DEFAULT_INDEXING = new NodeFeature("search.vectors.mappers.default_bbq_hnsw"); + public static final NodeFeature SEARCH_WITH_NO_DIMENSIONS_BUGFIX = new NodeFeature("search.vectors.no_dimensions_bugfix"); @Override public Set getTestFeatures() { @@ -41,7 +42,8 @@ public Set getTestFeatures() { RESCORER_MISSING_FIELD_BAD_REQUEST, INT_SORT_FOR_INT_SHORT_BYTE_FIELDS, MULTI_MATCH_CHECKS_POSITIONS, - BBQ_HNSW_DEFAULT_INDEXING + BBQ_HNSW_DEFAULT_INDEXING, + SEARCH_WITH_NO_DIMENSIONS_BUGFIX ); } } From 664130218e7cf8d52263d9c9d83285f49c8de804 Mon Sep 17 00:00:00 2001 From: Carlos Delgado <6339205+carlosdelest@users.noreply.github.com> Date: Fri, 11 Jul 2025 12:04:13 +0200 Subject: [PATCH 4/4] Update docs/changelog/131081.yaml --- docs/changelog/131081.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/changelog/131081.yaml diff --git a/docs/changelog/131081.yaml b/docs/changelog/131081.yaml new file mode 100644 index 0000000000000..e0557f17968a4 --- /dev/null +++ b/docs/changelog/131081.yaml @@ -0,0 +1,6 @@ +pr: 131081 +summary: Fix knn search error when dimensions are not set +area: Vector Search +type: bug +issues: + - 129550