Skip to content

Commit e741df9

Browse files
authored
Support KNN queries in NativeQuery.
Original Pull Request #2458 Closes #2433
1 parent 3875bb6 commit e741df9

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java

+11
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.elasticsearch.client.elc;
1717

18+
import co.elastic.clients.elasticsearch._types.KnnQuery;
1819
import co.elastic.clients.elasticsearch._types.SortOptions;
1920
import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
2021
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
@@ -53,6 +54,7 @@ public class NativeQuery extends BaseQuery {
5354
private List<SortOptions> sortOptions = Collections.emptyList();
5455

5556
private Map<String, JsonData> searchExtensions = Collections.emptyMap();
57+
@Nullable private KnnQuery knnQuery;
5658

5759
public NativeQuery(NativeQueryBuilder builder) {
5860
super(builder);
@@ -70,6 +72,7 @@ public NativeQuery(NativeQueryBuilder builder) {
7072
"Cannot add an NativeQuery in a NativeQuery");
7173
}
7274
this.springDataQuery = builder.getSpringDataQuery();
75+
this.knnQuery = builder.getKnnQuery();
7376
}
7477

7578
public NativeQuery(@Nullable Query query) {
@@ -124,6 +127,14 @@ public void setSpringDataQuery(@Nullable org.springframework.data.elasticsearch.
124127
this.springDataQuery = springDataQuery;
125128
}
126129

130+
/**
131+
* @since 5.1
132+
*/
133+
@Nullable
134+
public KnnQuery getKnnQuery() {
135+
return knnQuery;
136+
}
137+
127138
@Nullable
128139
public org.springframework.data.elasticsearch.core.query.Query getSpringDataQuery() {
129140
return springDataQuery;

src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java

+15
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.elasticsearch.client.elc;
1717

18+
import co.elastic.clients.elasticsearch._types.KnnQuery;
1819
import co.elastic.clients.elasticsearch._types.SortOptions;
1920
import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
2021
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
@@ -52,6 +53,7 @@ public class NativeQueryBuilder extends BaseQueryBuilder<NativeQuery, NativeQuer
5253
private Map<String, JsonData> searchExtensions = new LinkedHashMap<>();
5354

5455
@Nullable private org.springframework.data.elasticsearch.core.query.Query springDataQuery;
56+
@Nullable private KnnQuery knnQuery;
5557

5658
public NativeQueryBuilder() {}
5759

@@ -91,6 +93,11 @@ public Map<String, JsonData> getSearchExtensions() {
9193
return this.searchExtensions;
9294
}
9395

96+
@Nullable
97+
public KnnQuery getKnnQuery() {
98+
return knnQuery;
99+
}
100+
94101
@Nullable
95102
public org.springframework.data.elasticsearch.core.query.Query getSpringDataQuery() {
96103
return springDataQuery;
@@ -207,6 +214,14 @@ public NativeQueryBuilder withQuery(org.springframework.data.elasticsearch.core.
207214
return this;
208215
}
209216

217+
/**
218+
* @since 5.1
219+
*/
220+
public NativeQueryBuilder withKnnQuery(KnnQuery knnQuery) {
221+
this.knnQuery = knnQuery;
222+
return this;
223+
}
224+
210225
public NativeQuery build() {
211226
Assert.isTrue(query == null || springDataQuery == null, "Cannot have both a native query and a Spring Data query");
212227
return new NativeQuery(this);

src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -1413,7 +1413,8 @@ private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builde
14131413
builder //
14141414
.suggest(query.getSuggester()) //
14151415
.collapse(query.getFieldCollapse()) //
1416-
.sort(query.getSortOptions());
1416+
.sort(query.getSortOptions()) //
1417+
.knn(query.getKnnQuery());
14171418

14181419
if (!isEmpty(query.getAggregations())) {
14191420
builder.aggregations(query.getAggregations());
@@ -1433,7 +1434,8 @@ private void prepareNativeSearch(NativeQuery query, MultisearchBody.Builder buil
14331434
builder //
14341435
.suggest(query.getSuggester()) //
14351436
.collapse(query.getFieldCollapse()) //
1436-
.sort(query.getSortOptions());
1437+
.sort(query.getSortOptions()) //
1438+
.knn(query.getKnnQuery());
14371439

14381440
if (!isEmpty(query.getAggregations())) {
14391441
builder.aggregations(query.getAggregations());

0 commit comments

Comments
 (0)