diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java index 0dec41fb1..b4237e378 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java @@ -15,6 +15,7 @@ */ package org.springframework.data.elasticsearch.client.elc; +import co.elastic.clients.elasticsearch._types.KnnQuery; import co.elastic.clients.elasticsearch._types.SortOptions; import co.elastic.clients.elasticsearch._types.aggregations.Aggregation; import co.elastic.clients.elasticsearch._types.query_dsl.Query; @@ -53,6 +54,7 @@ public class NativeQuery extends BaseQuery { private List sortOptions = Collections.emptyList(); private Map searchExtensions = Collections.emptyMap(); + @Nullable private KnnQuery knnQuery; public NativeQuery(NativeQueryBuilder builder) { super(builder); @@ -70,6 +72,7 @@ public NativeQuery(NativeQueryBuilder builder) { "Cannot add an NativeQuery in a NativeQuery"); } this.springDataQuery = builder.getSpringDataQuery(); + this.knnQuery = builder.getKnnQuery(); } public NativeQuery(@Nullable Query query) { @@ -124,6 +127,14 @@ public void setSpringDataQuery(@Nullable org.springframework.data.elasticsearch. this.springDataQuery = springDataQuery; } + /** + * @since 5.1 + */ + @Nullable + public KnnQuery getKnnQuery() { + return knnQuery; + } + @Nullable public org.springframework.data.elasticsearch.core.query.Query getSpringDataQuery() { return springDataQuery; diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java index 86de08fcd..7ffe553cb 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java @@ -15,6 +15,7 @@ */ package org.springframework.data.elasticsearch.client.elc; +import co.elastic.clients.elasticsearch._types.KnnQuery; import co.elastic.clients.elasticsearch._types.SortOptions; import co.elastic.clients.elasticsearch._types.aggregations.Aggregation; import co.elastic.clients.elasticsearch._types.query_dsl.Query; @@ -52,6 +53,7 @@ public class NativeQueryBuilder extends BaseQueryBuilder searchExtensions = new LinkedHashMap<>(); @Nullable private org.springframework.data.elasticsearch.core.query.Query springDataQuery; + @Nullable private KnnQuery knnQuery; public NativeQueryBuilder() {} @@ -91,6 +93,11 @@ public Map getSearchExtensions() { return this.searchExtensions; } + @Nullable + public KnnQuery getKnnQuery() { + return knnQuery; + } + @Nullable public org.springframework.data.elasticsearch.core.query.Query getSpringDataQuery() { return springDataQuery; @@ -207,6 +214,14 @@ public NativeQueryBuilder withQuery(org.springframework.data.elasticsearch.core. return this; } + /** + * @since 5.1 + */ + public NativeQueryBuilder withKnnQuery(KnnQuery knnQuery) { + this.knnQuery = knnQuery; + return this; + } + public NativeQuery build() { Assert.isTrue(query == null || springDataQuery == null, "Cannot have both a native query and a Spring Data query"); return new NativeQuery(this); diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java index 93c29f1f3..2bd8c5334 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java @@ -1413,7 +1413,8 @@ private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builde builder // .suggest(query.getSuggester()) // .collapse(query.getFieldCollapse()) // - .sort(query.getSortOptions()); + .sort(query.getSortOptions()) // + .knn(query.getKnnQuery()); if (!isEmpty(query.getAggregations())) { builder.aggregations(query.getAggregations()); @@ -1433,7 +1434,8 @@ private void prepareNativeSearch(NativeQuery query, MultisearchBody.Builder buil builder // .suggest(query.getSuggester()) // .collapse(query.getFieldCollapse()) // - .sort(query.getSortOptions()); + .sort(query.getSortOptions()) // + .knn(query.getKnnQuery()); if (!isEmpty(query.getAggregations())) { builder.aggregations(query.getAggregations());