From 77c9a197ae6736fae1fd8da4986f02ada913c953 Mon Sep 17 00:00:00 2001 From: Benjamin Trent <4357155+benwtrent@users.noreply.github.com> Date: Wed, 18 Jan 2023 09:22:51 -0500 Subject: [PATCH 1/2] Fix multi-clause knn test --- .../elasticsearch/action/search/KnnSearchSingleNodeTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java b/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java index 3ef32c993217f..c2cad6c37cc9f 100644 --- a/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java @@ -194,7 +194,7 @@ public void testMultiKnnClauses() throws IOException { float[] queryVector = randomVector(); KnnSearchBuilder knnSearch = new KnnSearchBuilder("vector", queryVector, 5, 50).boost(5.0f); - KnnSearchBuilder knnSearch2 = new KnnSearchBuilder("vector_2", queryVector, 5, 50).boost(10.0f); + KnnSearchBuilder knnSearch2 = new KnnSearchBuilder("vector_2", queryVector, 5, 50).boost(50.0f); SearchResponse response = client().prepareSearch("index") .setKnnSearch(List.of(knnSearch, knnSearch2)) .setQuery(QueryBuilders.matchQuery("text", "goodnight")) From ea3c807b29abefed548fc46a27ad9696741f41c9 Mon Sep 17 00:00:00 2001 From: Benjamin Trent <4357155+benwtrent@users.noreply.github.com> Date: Tue, 24 Jan 2023 15:57:12 -0500 Subject: [PATCH 2/2] ensuring vectors are in separate spaces --- .../search/KnnSearchSingleNodeTests.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java b/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java index c2cad6c37cc9f..1d1d29b6c232a 100644 --- a/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/KnnSearchSingleNodeTests.java @@ -186,15 +186,15 @@ public void testMultiKnnClauses() throws IOException { createIndex("index", indexSettings, builder); for (int doc = 0; doc < 10; doc++) { - client().prepareIndex("index").setSource("vector", randomVector(), "text", "hello world", "number", 1).get(); - client().prepareIndex("index").setSource("vector_2", randomVector(), "text", "hello world", "number", 2).get(); + client().prepareIndex("index").setSource("vector", randomVector(1.0f, 2.0f), "text", "hello world", "number", 1).get(); + client().prepareIndex("index").setSource("vector_2", randomVector(20f, 21f), "text", "hello world", "number", 2).get(); client().prepareIndex("index").setSource("text", "goodnight world", "number", 3).get(); } client().admin().indices().prepareRefresh("index").get(); - float[] queryVector = randomVector(); + float[] queryVector = randomVector(20f, 21f); KnnSearchBuilder knnSearch = new KnnSearchBuilder("vector", queryVector, 5, 50).boost(5.0f); - KnnSearchBuilder knnSearch2 = new KnnSearchBuilder("vector_2", queryVector, 5, 50).boost(50.0f); + KnnSearchBuilder knnSearch2 = new KnnSearchBuilder("vector_2", queryVector, 5, 50).boost(10.0f); SearchResponse response = client().prepareSearch("index") .setKnnSearch(List.of(knnSearch, knnSearch2)) .setQuery(QueryBuilders.matchQuery("text", "goodnight")) @@ -213,7 +213,7 @@ public void testMultiKnnClauses() throws IOException { assertThat(agg.getAvg(), equalTo(2.25)); assertThat(agg.getSum(), equalTo(45.0)); - // Because of the boost, vector_2 results should appear first + // Because of the boost & vector distributions, vector_2 results should appear first assertNotNull(response.getHits().getAt(0).field("vector_2")); } @@ -372,4 +372,12 @@ private float[] randomVector() { } return vector; } + + private float[] randomVector(float dimLower, float dimUpper) { + float[] vector = new float[VECTOR_DIMENSION]; + for (int i = 0; i < vector.length; i++) { + vector[i] = (float) randomDoubleBetween(dimLower, dimUpper, true); + } + return vector; + } }