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