diff --git a/pom.xml b/pom.xml
index ae19fa3cf..1eec82e2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,8 +18,10 @@
https://github.com/spring-projects/spring-data-elasticsearch
- 7.17.2
- 7.17.2
+
+ 7.17.3
+
+ 7.17.3
2.17.1
4.1.65.Final
3.0.0-SNAPSHOT
@@ -139,7 +141,7 @@
org.elasticsearch.client
elasticsearch-rest-high-level-client
- ${elasticsearch}
+ ${elasticsearch-rhlc}
commons-logging
@@ -163,7 +165,7 @@
org.elasticsearch.client
elasticsearch-rest-client
- ${elasticsearch}
+ ${elasticsearch-java}
commons-logging
diff --git a/src/main/asciidoc/preface.adoc b/src/main/asciidoc/preface.adoc
index e713f544e..9fe6f8beb 100644
--- a/src/main/asciidoc/preface.adoc
+++ b/src/main/asciidoc/preface.adoc
@@ -34,7 +34,7 @@ The following table shows the Elasticsearch versions that are used by Spring Dat
[cols="^,^,^,^,^",options="header"]
|===
| Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework | Spring Boot
-| 2022.0 (Raj) | 4.4.x | 7.17.2 | 5.3.x | 2.7.x
+| 2022.0 (Raj) | 4.4.x | 7.17.3 | 5.3.x | 2.7.x
| 2021.1 (Q) | 4.3.x | 7.15.2 | 5.3.x | 2.6.x
| 2021.0 (Pascal) | 4.2.x | 7.12.0 | 5.3.x | 2.5.x
| 2020.0 (Ockham)footnote:oom[Out of maintenance] | 4.1.xfootnote:oom[] | 7.9.3 | 5.3.2 | 2.4.x
diff --git a/src/main/asciidoc/reference/elasticsearch-migration-guide-4.3-4.4.adoc b/src/main/asciidoc/reference/elasticsearch-migration-guide-4.3-4.4.adoc
index bffc1c4fc..929961ac6 100644
--- a/src/main/asciidoc/reference/elasticsearch-migration-guide-4.3-4.4.adoc
+++ b/src/main/asciidoc/reference/elasticsearch-migration-guide-4.3-4.4.adoc
@@ -82,7 +82,7 @@ The dependencies for the new Elasticsearch client are still optional in Spring D
co.elastic.clients
elasticsearch-java
- 7.17.2
+ 7.17.3
commons-logging
@@ -93,7 +93,7 @@ The dependencies for the new Elasticsearch client are still optional in Spring D
org.elasticsearch.client
elasticsearch-rest-client
- 7.17.2
+ 7.17.3
commons-logging
diff --git a/src/main/asciidoc/reference/elasticsearch-new.adoc b/src/main/asciidoc/reference/elasticsearch-new.adoc
index e03d693c7..11feabdcc 100644
--- a/src/main/asciidoc/reference/elasticsearch-new.adoc
+++ b/src/main/asciidoc/reference/elasticsearch-new.adoc
@@ -5,7 +5,7 @@
== New in Spring Data Elasticsearch 4.4
* Introduction of new imperative and reactive clients using the classes from the new Elasticsearch Java client
-* Upgrade to Elasticsearch 7.17.2.
+* Upgrade to Elasticsearch 7.17.3.
[[new-features.4-3-0]]
== New in Spring Data Elasticsearch 4.3
diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java
index ca0f319aa..545c23aff 100644
--- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java
+++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java
@@ -22,6 +22,7 @@
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem;
import co.elastic.clients.elasticsearch.core.msearch.MultiSearchResponseItem;
+import co.elastic.clients.elasticsearch.core.search.ResponseBody;
import co.elastic.clients.json.JsonpMapper;
import co.elastic.clients.transport.Version;
@@ -353,8 +354,8 @@ protected SearchScrollHits searchScrollContinue(String scrollId, long scr
return getSearchScrollHits(clazz, index, response);
}
- private > SearchScrollHits getSearchScrollHits(Class clazz,
- IndexCoordinates index, R response) {
+ private SearchScrollHits getSearchScrollHits(Class clazz, IndexCoordinates index,
+ ResponseBody response) {
ReadDocumentCallback documentCallback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index);
SearchDocumentResponseCallback> callback = new ReadSearchScrollDocumentResponseCallback<>(clazz,
index);
@@ -446,7 +447,8 @@ private List> doMultiSearch(List multiS
MultiSearchQueryParameter queryParameter = queryIterator.next();
MultiSearchResponseItem responseItem = responseIterator.next();
- // if responseItem kind is Result then responsItem.value is a MultiSearchItem which is derived from SearchResponse
+ // if responseItem kind is Result then responseItem.value is a MultiSearchItem which is derived from
+ // SearchResponse
if (responseItem.isResult()) {
diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java
index 2be10341f..6b0782c0e 100644
--- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java
+++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java
@@ -18,6 +18,7 @@
import co.elastic.clients.ApiClient;
import co.elastic.clients.elasticsearch._types.ErrorResponse;
import co.elastic.clients.elasticsearch.core.*;
+import co.elastic.clients.elasticsearch.core.search.ResponseBody;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.JsonEndpoint;
import co.elastic.clients.transport.TransportOptions;
@@ -218,7 +219,7 @@ public Mono deleteByQuery(
// endregion
// region search
- public Mono> search(SearchRequest request, Class tDocumentClass) {
+ public Mono> search(SearchRequest request, Class tDocumentClass) {
Assert.notNull(request, "request must not be null");
Assert.notNull(tDocumentClass, "tDocumentClass must not be null");
@@ -227,7 +228,7 @@ public Mono> search(SearchRequest request, Class tDocum
SearchRequest.createSearchEndpoint(this.getDeserializer(tDocumentClass)), transportOptions));
}
- public Mono> search(Function> fn,
+ public Mono> search(Function> fn,
Class tDocumentClass) {
Assert.notNull(fn, "fn must not be null");
diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java
index 4ddc4dfa3..f2587b023 100644
--- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java
+++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java
@@ -22,6 +22,7 @@
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem;
import co.elastic.clients.elasticsearch.core.get.GetResult;
+import co.elastic.clients.elasticsearch.core.search.ResponseBody;
import co.elastic.clients.json.JsonpMapper;
import co.elastic.clients.transport.Version;
import reactor.core.publisher.Flux;
@@ -326,22 +327,27 @@ private Flux doScroll(SearchRequest searchRequest) {
Time scrollTimeout = searchRequest.scroll() != null ? searchRequest.scroll() : Time.of(t -> t.time("1m"));
- Flux> searchResponses = Flux.usingWhen(Mono.fromSupplier(ScrollState::new), //
- state -> Mono
- .from(execute((ClientCallback>>) client -> client
- .search(searchRequest, EntityAsMap.class))) //
- .expand(entityAsMapSearchResponse -> {
-
- state.updateScrollId(entityAsMapSearchResponse.scrollId());
-
- if (entityAsMapSearchResponse.hits() == null
- || CollectionUtils.isEmpty(entityAsMapSearchResponse.hits().hits())) {
- return Mono.empty();
- }
-
- return Mono.from(execute((ClientCallback>>) client -> client.scroll(
- ScrollRequest.of(sr -> sr.scrollId(state.getScrollId()).scroll(scrollTimeout)), EntityAsMap.class)));
- }),
+ Flux> searchResponses = Flux.usingWhen(Mono.fromSupplier(ScrollState::new), //
+ state -> {
+ return Mono
+ .from(execute((ClientCallback>>) client1 -> client1
+ .search(searchRequest, EntityAsMap.class))) //
+ .expand(entityAsMapSearchResponse -> {
+
+ state.updateScrollId(entityAsMapSearchResponse.scrollId());
+
+ if (entityAsMapSearchResponse.hits() == null
+ || CollectionUtils.isEmpty(entityAsMapSearchResponse.hits().hits())) {
+ return Mono.empty();
+ }
+
+ return Mono.from(execute((ClientCallback>>) client1 -> {
+ ScrollRequest scrollRequest = ScrollRequest
+ .of(sr -> sr.scrollId(state.getScrollId()).scroll(scrollTimeout));
+ return client1.scroll(scrollRequest, EntityAsMap.class);
+ }));
+ });
+ },
this::cleanupScroll, (state, ex) -> cleanupScroll(state), this::cleanupScroll);
return searchResponses.flatMapIterable(entityAsMapSearchResponse -> entityAsMapSearchResponse.hits().hits())
@@ -363,7 +369,7 @@ protected Mono doCount(Query query, Class> entityType, IndexCoordinates
SearchRequest searchRequest = requestConverter.searchRequest(query, entityType, index, true, false);
return Mono
- .from(execute((ClientCallback>>) client -> client.search(searchRequest,
+ .from(execute((ClientCallback>>) client -> client.search(searchRequest,
EntityAsMap.class)))
.map(searchResponse -> searchResponse.hits().total() != null ? searchResponse.hits().total().value() : 0L);
}
@@ -371,7 +377,7 @@ protected Mono doCount(Query query, Class> entityType, IndexCoordinates
private Flux doFind(SearchRequest searchRequest) {
return Mono
- .from(execute((ClientCallback>>) client -> client.search(searchRequest,
+ .from(execute((ClientCallback>>) client -> client.search(searchRequest,
EntityAsMap.class))) //
.flatMapIterable(entityAsMapSearchResponse -> entityAsMapSearchResponse.hits().hits()) //
.map(entityAsMapHit -> DocumentAdapters.from(entityAsMapHit, jsonpMapper));
@@ -391,7 +397,7 @@ protected Mono doFindForResponse(Query query, Class<
.toFuture();
return Mono
- .from(execute((ClientCallback>>) client -> client.search(searchRequest,
+ .from(execute((ClientCallback>>) client -> client.search(searchRequest,
EntityAsMap.class)))
.map(searchResponse -> SearchDocumentResponseBuilder.from(searchResponse, entityCreator, jsonpMapper));
}
diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/SearchDocumentResponseBuilder.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/SearchDocumentResponseBuilder.java
index ab2b63739..0b0aa014f 100644
--- a/src/main/java/org/springframework/data/elasticsearch/client/elc/SearchDocumentResponseBuilder.java
+++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/SearchDocumentResponseBuilder.java
@@ -19,6 +19,7 @@
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.elasticsearch.core.search.HitsMetadata;
+import co.elastic.clients.elasticsearch.core.search.ResponseBody;
import co.elastic.clients.elasticsearch.core.search.Suggestion;
import co.elastic.clients.elasticsearch.core.search.TotalHits;
import co.elastic.clients.json.JsonpMapper;
@@ -45,21 +46,22 @@ class SearchDocumentResponseBuilder {
/**
* creates a SearchDocumentResponse from the {@link SearchResponse}
*
- * @param searchResponse the Elasticsearch search response
+ * @param responseBody the Elasticsearch response body
* @param entityCreator function to create an entity from a {@link SearchDocument}
* @param jsonpMapper to map JsonData objects
* @return the SearchDocumentResponse
*/
- public static SearchDocumentResponse from(SearchResponse searchResponse,
+ @SuppressWarnings("DuplicatedCode")
+ public static SearchDocumentResponse from(ResponseBody responseBody,
SearchDocumentResponse.EntityCreator entityCreator, JsonpMapper jsonpMapper) {
- Assert.notNull(searchResponse, "searchResponse must not be null");
+ Assert.notNull(responseBody, "responseBody must not be null");
Assert.notNull(entityCreator, "entityCreator must not be null");
- HitsMetadata hitsMetadata = searchResponse.hits();
- String scrollId = searchResponse.scrollId();
- Map aggregations = searchResponse.aggregations();
- Map>> suggest = searchResponse.suggest();
+ HitsMetadata hitsMetadata = responseBody.hits();
+ String scrollId = responseBody.scrollId();
+ Map aggregations = responseBody.aggregations();
+ Map>> suggest = responseBody.suggest();
return from(hitsMetadata, scrollId, aggregations, suggest, entityCreator, jsonpMapper);
}
diff --git a/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java b/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java
index b28275186..b0c3e9819 100644
--- a/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java
@@ -25,7 +25,7 @@
import co.elastic.clients.elasticsearch.core.IndexRequest;
import co.elastic.clients.elasticsearch.core.IndexResponse;
import co.elastic.clients.elasticsearch.core.SearchRequest;
-import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.search.ResponseBody;
import co.elastic.clients.elasticsearch.indices.ElasticsearchIndicesClient;
import co.elastic.clients.elasticsearch.indices.IndexSettings;
import co.elastic.clients.transport.ElasticsearchTransport;
@@ -300,7 +300,7 @@ void search() {
.query(query -> query.match(matchQuery -> matchQuery.field("content").query(FieldValue.of("content1"))))
.build();
- SearchResponse searchResponse = null;
+ ResponseBody searchResponse = null;
try {
searchResponse = searchImperative(searchRequest);
assertThat(searchResponse).isNotNull();
@@ -316,11 +316,11 @@ void search() {
}
}
- private SearchResponse searchImperative(SearchRequest searchRequest) throws IOException {
+ private ResponseBody searchImperative(SearchRequest searchRequest) throws IOException {
return imperativeElasticsearchClient.search(searchRequest, EntityAsMap.class);
}
- private SearchResponse searchReactive(SearchRequest searchRequest) {
+ private ResponseBody searchReactive(SearchRequest searchRequest) {
return Objects.requireNonNull(reactiveElasticsearchClient.search(searchRequest, EntityAsMap.class).block());
}
// endregion
diff --git a/src/test/resources/testcontainers-elasticsearch.properties b/src/test/resources/testcontainers-elasticsearch.properties
index fc55f6131..94557e34b 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=7.17.2
+sde.testcontainers.image-version=7.17.3
#
#
# 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