Skip to content

Commit 12ae2e5

Browse files
committed
Fix a number of release tests after KNN PRs merged
1 parent 98fa3b7 commit 12ae2e5

File tree

4 files changed

+28
-22
lines changed

4 files changed

+28
-22
lines changed

server/src/main/java/org/elasticsearch/search/vectors/KnnSearchBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
562562
builder.field(K_FIELD.getPreferredName(), k);
563563
builder.field(NUM_CANDS_FIELD.getPreferredName(), numCands);
564564

565-
if (visitPercentage != null) {
565+
if (IVF_FORMAT.isEnabled() && visitPercentage != null) {
566566
builder.field(VISIT_PERCENTAGE_FIELD.getPreferredName(), visitPercentage);
567567
}
568568

server/src/test/java/org/elasticsearch/search/builder/SearchSourceBuilderTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
import java.util.function.ToLongFunction;
7878

7979
import static java.util.Collections.emptyMap;
80+
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.IVF_FORMAT;
8081
import static org.hamcrest.CoreMatchers.containsString;
8182
import static org.hamcrest.CoreMatchers.instanceOf;
8283
import static org.hamcrest.Matchers.equalTo;
@@ -826,7 +827,8 @@ public void testSearchSectionsUsageCollection() throws IOException {
826827
searchSourceBuilder.fetchField("field");
827828
// these are not correct runtime mappings but they are counted compared to empty object
828829
searchSourceBuilder.runtimeMappings(Collections.singletonMap("field", "keyword"));
829-
searchSourceBuilder.knnSearch(List.of(new KnnSearchBuilder("field", new float[] {}, 2, 5, 10f, null, null)));
830+
Float percentage = IVF_FORMAT.isEnabled() ? 10f : null;
831+
searchSourceBuilder.knnSearch(List.of(new KnnSearchBuilder("field", new float[] {}, 2, 5, percentage, null, null)));
830832
searchSourceBuilder.pointInTimeBuilder(new PointInTimeBuilder(new BytesArray("pitid")));
831833
searchSourceBuilder.docValueField("field");
832834
searchSourceBuilder.storedField("field");

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

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.Map;
3838

3939
import static java.util.Collections.emptyList;
40+
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.IVF_FORMAT;
4041
import static org.elasticsearch.search.RandomSearchRequestGenerator.randomSearchSourceBuilder;
4142
import static org.hamcrest.Matchers.containsString;
4243

@@ -111,7 +112,7 @@ public void testParseSourceString() throws IOException {
111112
.field(KnnSearch.FIELD_FIELD.getPreferredName(), knnSearch.field)
112113
.field(KnnSearch.K_FIELD.getPreferredName(), knnSearch.k)
113114
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), knnSearch.numCands);
114-
if (knnSearch.visitPercentage != null) {
115+
if (IVF_FORMAT.isEnabled() && knnSearch.visitPercentage != null) {
115116
builder.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), knnSearch.visitPercentage);
116117
}
117118
builder.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), knnSearch.queryVector);
@@ -140,7 +141,7 @@ public void testParseSourceArray() throws IOException {
140141
.field(KnnSearch.FIELD_FIELD.getPreferredName(), knnSearch.field)
141142
.field(KnnSearch.K_FIELD.getPreferredName(), knnSearch.k)
142143
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), knnSearch.numCands);
143-
if (knnSearch.visitPercentage != null) {
144+
if (IVF_FORMAT.isEnabled() && knnSearch.visitPercentage != null) {
144145
builder.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), knnSearch.visitPercentage);
145146
}
146147
builder.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), knnSearch.queryVector);
@@ -176,11 +177,11 @@ public void testNumCandsLessThanK() throws IOException {
176177
.startObject(KnnSearchRequestParser.KNN_SECTION_FIELD.getPreferredName())
177178
.field(KnnSearch.FIELD_FIELD.getPreferredName(), "field")
178179
.field(KnnSearch.K_FIELD.getPreferredName(), 100)
179-
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), 80)
180-
.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), 100.0f)
181-
.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), new float[] { 1.0f, 2.0f, 3.0f })
182-
.endObject()
183-
.endObject();
180+
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), 80);
181+
if (IVF_FORMAT.isEnabled()) {
182+
builder.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), 100.0f);
183+
}
184+
builder.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), new float[] { 1.0f, 2.0f, 3.0f }).endObject().endObject();
184185

185186
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> parseSearchRequest(builder));
186187
assertThat(e.getMessage(), containsString("[num_candidates] cannot be less than [k]"));
@@ -193,17 +194,18 @@ public void testNumCandsExceedsLimit() throws IOException {
193194
.startObject(KnnSearchRequestParser.KNN_SECTION_FIELD.getPreferredName())
194195
.field(KnnSearch.FIELD_FIELD.getPreferredName(), "field")
195196
.field(KnnSearch.K_FIELD.getPreferredName(), 100)
196-
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), 10002)
197-
.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), 100.0f)
198-
.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), new float[] { 1.0f, 2.0f, 3.0f })
199-
.endObject()
200-
.endObject();
197+
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), 10002);
198+
if (IVF_FORMAT.isEnabled()) {
199+
builder.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), 100.0f);
200+
}
201+
builder.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), new float[] { 1.0f, 2.0f, 3.0f }).endObject().endObject();
201202

202203
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> parseSearchRequest(builder));
203204
assertThat(e.getMessage(), containsString("[num_candidates] cannot exceed [10000]"));
204205
}
205206

206207
public void testVisitPercnetageLessThan0() throws IOException {
208+
assumeTrue("visit_percentage is only supported if IVF format is enabled", IVF_FORMAT.isEnabled());
207209
XContentType xContentType = randomFrom(XContentType.values());
208210
XContentBuilder builder = XContentBuilder.builder(xContentType.xContent())
209211
.startObject()
@@ -220,7 +222,8 @@ public void testVisitPercnetageLessThan0() throws IOException {
220222
assertThat(e.getMessage(), containsString("[visit_percentage] must be between 0 and 100"));
221223
}
222224

223-
public void testVisitPercnetageGreaterThan100() throws IOException {
225+
public void testVisitPercentageGreaterThan100() throws IOException {
226+
assumeTrue("visit_percentage is only supported if IVF format is enabled", IVF_FORMAT.isEnabled());
224227
XContentType xContentType = randomFrom(XContentType.values());
225228
XContentBuilder builder = XContentBuilder.builder(xContentType.xContent())
226229
.startObject()
@@ -244,11 +247,11 @@ public void testInvalidK() throws IOException {
244247
.startObject(KnnSearchRequestParser.KNN_SECTION_FIELD.getPreferredName())
245248
.field(KnnSearch.FIELD_FIELD.getPreferredName(), "field")
246249
.field(KnnSearch.K_FIELD.getPreferredName(), 0)
247-
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), 10)
248-
.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), 100.0f)
249-
.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), new float[] { 1.0f, 2.0f, 3.0f })
250-
.endObject()
251-
.endObject();
250+
.field(KnnSearch.NUM_CANDS_FIELD.getPreferredName(), 10);
251+
if (IVF_FORMAT.isEnabled()) {
252+
builder.field(KnnSearch.VISIT_PERCENTAGE_FIELD.getPreferredName(), 100.0f);
253+
}
254+
builder.field(KnnSearch.QUERY_VECTOR_FIELD.getPreferredName(), new float[] { 1.0f, 2.0f, 3.0f }).endObject().endObject();
252255

253256
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> parseSearchRequest(builder));
254257
assertThat(e.getMessage(), containsString("[k] must be greater than 0"));
@@ -281,7 +284,7 @@ private KnnSearch randomKnnSearch() {
281284

282285
int k = randomIntBetween(1, 100);
283286
int numCands = randomIntBetween(k, 1000);
284-
Float visitPercentage = randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true);
287+
Float visitPercentage = (IVF_FORMAT.isEnabled() == false && randomBoolean()) ? null : randomFloatBetween(0.0f, 100.0f, true);
285288
return new KnnSearch(field, vector, k, numCands, visitPercentage);
286289
}
287290

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/analysis/VerifierTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2376,12 +2376,13 @@ public void testVectorSimilarityFunctionsNullArgs() throws Exception {
23762376
}
23772377

23782378
public void testFullTextFunctionsWithSemanticText() {
2379+
assumeTrue("requires knn function", EsqlCapabilities.Cap.KNN_FUNCTION_V5.isEnabled());
23792380
checkFullTextFunctionsWithSemanticText("knn(semantic, [0, 1, 2])");
23802381
checkFullTextFunctionsWithSemanticText("match(semantic, \"hello world\")");
23812382
checkFullTextFunctionsWithSemanticText("semantic:\"hello world\"");
23822383
}
23832384

2384-
public void checkFullTextFunctionsWithSemanticText(String functionInvocation) {
2385+
private void checkFullTextFunctionsWithSemanticText(String functionInvocation) {
23852386
query("from test | where " + functionInvocation, fullTextAnalyzer);
23862387
}
23872388

0 commit comments

Comments
 (0)