diff --git a/pom.xml b/pom.xml index 49fc30f2b..bad6d528a 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 3.3.1-SNAPSHOT - 8.13.2 + 8.13.4 1.0.8.RELEASE 0.14.4 diff --git a/src/main/antora/modules/ROOT/pages/elasticsearch/elasticsearch-new.adoc b/src/main/antora/modules/ROOT/pages/elasticsearch/elasticsearch-new.adoc index e9705e4db..8ef868fab 100644 --- a/src/main/antora/modules/ROOT/pages/elasticsearch/elasticsearch-new.adoc +++ b/src/main/antora/modules/ROOT/pages/elasticsearch/elasticsearch-new.adoc @@ -1,6 +1,11 @@ [[new-features]] = What's new +[[new-features.5-3-1]] +== New in Spring Data Elasticsearch 5.3.1 + +* Upgrade to Elasticsearch 8.13.4. + [[new-features.5-3-0]] == New in Spring Data Elasticsearch 5.3 diff --git a/src/main/antora/modules/ROOT/pages/elasticsearch/versions.adoc b/src/main/antora/modules/ROOT/pages/elasticsearch/versions.adoc index 8fe2fc70e..25746673b 100644 --- a/src/main/antora/modules/ROOT/pages/elasticsearch/versions.adoc +++ b/src/main/antora/modules/ROOT/pages/elasticsearch/versions.adoc @@ -6,7 +6,7 @@ The following table shows the Elasticsearch and Spring versions that are used by [cols="^,^,^,^",options="header"] |=== | Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework -| 2024.0 (?) | 5.3.x | 8.13.2 | ? +| 2024.0 | 5.3.1 | 8.13.4 | 6.1.x | 2023.1 (Vaughan) | 5.2.x | 8.11.1 | 6.1.x | 2023.0 (Ullmann) | 5.1.x | 8.7.1 | 6.0.x | 2022.0 (Turing) | 5.0.xfootnote:oom[Out of maintenance] | 8.5.3 | 6.0.x 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 880cb7ae0..f1b5fdc24 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 @@ -16,6 +16,7 @@ package org.springframework.data.elasticsearch.client.elc; import co.elastic.clients.elasticsearch._types.KnnQuery; +import co.elastic.clients.elasticsearch._types.KnnSearch; import co.elastic.clients.elasticsearch._types.SortOptions; import co.elastic.clients.elasticsearch._types.aggregations.Aggregation; import co.elastic.clients.elasticsearch._types.query_dsl.Query; @@ -54,6 +55,7 @@ public class NativeQuery extends BaseQuery { private Map searchExtensions = Collections.emptyMap(); @Nullable private KnnQuery knnQuery; + @Nullable private List knnSearches = Collections.emptyList(); public NativeQuery(NativeQueryBuilder builder) { super(builder); @@ -71,6 +73,7 @@ public NativeQuery(NativeQueryBuilder builder) { } this.springDataQuery = builder.getSpringDataQuery(); this.knnQuery = builder.getKnnQuery(); + this.knnSearches = builder.getKnnSearches(); } public NativeQuery(@Nullable Query query) { @@ -129,6 +132,14 @@ public KnnQuery getKnnQuery() { return knnQuery; } + /** + * @since 5.3.1 + */ + @Nullable + public List getKnnSearches() { + return knnSearches; + } + @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 d290dd782..1956a75ea 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 @@ -16,6 +16,7 @@ package org.springframework.data.elasticsearch.client.elc; import co.elastic.clients.elasticsearch._types.KnnQuery; +import co.elastic.clients.elasticsearch._types.KnnSearch; import co.elastic.clients.elasticsearch._types.SortOptions; import co.elastic.clients.elasticsearch._types.aggregations.Aggregation; import co.elastic.clients.elasticsearch._types.query_dsl.Query; @@ -26,6 +27,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -52,6 +54,7 @@ public class NativeQueryBuilder extends BaseQueryBuilder knnSearches = Collections.emptyList(); public NativeQueryBuilder() {} @@ -92,6 +95,14 @@ public KnnQuery getKnnQuery() { return knnQuery; } + /** + * @since 5.3.1 + */ + @Nullable + public List getKnnSearches() { + return knnSearches; + } + @Nullable public org.springframework.data.elasticsearch.core.query.Query getSpringDataQuery() { return springDataQuery; 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 c0fa6d932..c0aafd60e 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 @@ -1719,7 +1719,18 @@ private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builde ; if (query.getKnnQuery() != null) { - builder.knn(query.getKnnQuery()); + var kq = query.getKnnQuery(); + builder.knn(ksb -> ksb + .field(kq.field()) + .queryVector(kq.queryVector()) + .numCandidates(kq.numCandidates()) + .filter(kq.filter()) + .similarity(kq.similarity())); + + } + + if (!isEmpty(query.getKnnSearches())) { + builder.knn(query.getKnnSearches()); } if (!isEmpty(query.getAggregations())) { @@ -1740,7 +1751,18 @@ private void prepareNativeSearch(NativeQuery query, MultisearchBody.Builder buil .sort(query.getSortOptions()); if (query.getKnnQuery() != null) { - builder.knn(query.getKnnQuery()); + var kq = query.getKnnQuery(); + builder.knn(ksb -> ksb + .field(kq.field()) + .queryVector(kq.queryVector()) + .numCandidates(kq.numCandidates()) + .filter(kq.filter()) + .similarity(kq.similarity())); + + } + + if (!isEmpty(query.getKnnSearches())) { + builder.knn(query.getKnnSearches()); } if (!isEmpty(query.getAggregations())) { diff --git a/src/test/resources/testcontainers-elasticsearch.properties b/src/test/resources/testcontainers-elasticsearch.properties index 487a77738..669b532c0 100644 --- a/src/test/resources/testcontainers-elasticsearch.properties +++ b/src/test/resources/testcontainers-elasticsearch.properties @@ -15,7 +15,7 @@ # # sde.testcontainers.image-name=docker.elastic.co/elasticsearch/elasticsearch -sde.testcontainers.image-version=8.13.2 +sde.testcontainers.image-version=8.13.4 # # # needed as we do a DELETE /* at the end of the tests, will be required from 8.0 on, produces a warning since 7.13