Skip to content

Commit 3dbb1e7

Browse files
committed
Update to Elasticsearch 7.17.3.
Original Pull Request #2145 Closes #2144 (cherry picked from commit 0950dd6)
1 parent e5efd31 commit 3dbb1e7

File tree

10 files changed

+57
-44
lines changed

10 files changed

+57
-44
lines changed

pom.xml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
<url>https://github.com/spring-projects/spring-data-elasticsearch</url>
1919

2020
<properties>
21-
<elasticsearch>7.17.2</elasticsearch>
22-
<elasticsearch-java>7.17.2</elasticsearch-java>
21+
<!-- version of the RestHighLevelClient -->
22+
<elasticsearch-rhlc>7.17.3</elasticsearch-rhlc>
23+
<!-- version of the new ElasticsearchClient -->
24+
<elasticsearch-java>7.17.3</elasticsearch-java>
2325
<log4j>2.17.1</log4j>
2426
<netty>4.1.65.Final</netty>
2527
<springdata.commons>2.7.0-SNAPSHOT</springdata.commons>
@@ -139,7 +141,7 @@
139141
<dependency>
140142
<groupId>org.elasticsearch.client</groupId>
141143
<artifactId>elasticsearch-rest-high-level-client</artifactId>
142-
<version>${elasticsearch}</version>
144+
<version>${elasticsearch-rhlc}</version>
143145
<exclusions>
144146
<exclusion>
145147
<groupId>commons-logging</groupId>
@@ -163,7 +165,7 @@
163165
<dependency>
164166
<groupId>org.elasticsearch.client</groupId>
165167
<artifactId>elasticsearch-rest-client</artifactId> <!-- is Apache 2-->
166-
<version>${elasticsearch}</version>
168+
<version>${elasticsearch-java}</version>
167169
<exclusions>
168170
<exclusion>
169171
<groupId>commons-logging</groupId>

src/main/asciidoc/preface.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ The following table shows the Elasticsearch versions that are used by Spring Dat
3434
[cols="^,^,^,^,^",options="header"]
3535
|===
3636
| Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework | Spring Boot
37-
| 2022.0 (Raj) | 4.4.x | 7.17.2 | 5.3.x | 2.7.x
37+
| 2022.0 (Raj) | 4.4.x | 7.17.3 | 5.3.x | 2.7.x
3838
| 2021.1 (Q) | 4.3.x | 7.15.2 | 5.3.x | 2.6.x
3939
| 2021.0 (Pascal) | 4.2.x | 7.12.0 | 5.3.x | 2.5.x
4040
| 2020.0 (Ockham)footnote:oom[Out of maintenance] | 4.1.xfootnote:oom[] | 7.9.3 | 5.3.2 | 2.4.x

src/main/asciidoc/reference/elasticsearch-migration-guide-4.3-4.4.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ The dependencies for the new Elasticsearch client are still optional in Spring D
8282
<dependency>
8383
<groupId>co.elastic.clients</groupId>
8484
<artifactId>elasticsearch-java</artifactId>
85-
<version>7.17.2</version>
85+
<version>7.17.3</version>
8686
<exclusions>
8787
<exclusion>
8888
<groupId>commons-logging</groupId>
@@ -93,7 +93,7 @@ The dependencies for the new Elasticsearch client are still optional in Spring D
9393
<dependency>
9494
<groupId>org.elasticsearch.client</groupId>
9595
<artifactId>elasticsearch-rest-client</artifactId> <!-- is Apache 2-->
96-
<version>7.17.2</version>
96+
<version>7.17.3</version>
9797
<exclusions>
9898
<exclusion>
9999
<groupId>commons-logging</groupId>

src/main/asciidoc/reference/elasticsearch-new.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
== New in Spring Data Elasticsearch 4.4
66

77
* Introduction of new imperative and reactive clients using the classes from the new Elasticsearch Java client
8-
* Upgrade to Elasticsearch 7.17.2.
8+
* Upgrade to Elasticsearch 7.17.3.
99

1010
[[new-features.4-3-0]]
1111
== New in Spring Data Elasticsearch 4.3

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import co.elastic.clients.elasticsearch.core.*;
2323
import co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem;
2424
import co.elastic.clients.elasticsearch.core.msearch.MultiSearchResponseItem;
25+
import co.elastic.clients.elasticsearch.core.search.ResponseBody;
2526
import co.elastic.clients.json.JsonpMapper;
2627
import co.elastic.clients.transport.Version;
2728

@@ -353,8 +354,8 @@ protected <T> SearchScrollHits<T> searchScrollContinue(String scrollId, long scr
353354
return getSearchScrollHits(clazz, index, response);
354355
}
355356

356-
private <T, R extends SearchResponse<EntityAsMap>> SearchScrollHits<T> getSearchScrollHits(Class<T> clazz,
357-
IndexCoordinates index, R response) {
357+
private <T> SearchScrollHits<T> getSearchScrollHits(Class<T> clazz, IndexCoordinates index,
358+
ResponseBody<EntityAsMap> response) {
358359
ReadDocumentCallback<T> documentCallback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index);
359360
SearchDocumentResponseCallback<SearchScrollHits<T>> callback = new ReadSearchScrollDocumentResponseCallback<>(clazz,
360361
index);
@@ -446,7 +447,8 @@ private List<SearchHits<?>> doMultiSearch(List<MultiSearchQueryParameter> multiS
446447
MultiSearchQueryParameter queryParameter = queryIterator.next();
447448
MultiSearchResponseItem<EntityAsMap> responseItem = responseIterator.next();
448449

449-
// if responseItem kind is Result then responsItem.value is a MultiSearchItem which is derived from SearchResponse
450+
// if responseItem kind is Result then responseItem.value is a MultiSearchItem which is derived from
451+
// SearchResponse
450452

451453
if (responseItem.isResult()) {
452454

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import co.elastic.clients.ApiClient;
1919
import co.elastic.clients.elasticsearch._types.ErrorResponse;
2020
import co.elastic.clients.elasticsearch.core.*;
21+
import co.elastic.clients.elasticsearch.core.search.ResponseBody;
2122
import co.elastic.clients.transport.ElasticsearchTransport;
2223
import co.elastic.clients.transport.JsonEndpoint;
2324
import co.elastic.clients.transport.TransportOptions;
@@ -218,7 +219,7 @@ public Mono<DeleteByQueryResponse> deleteByQuery(
218219
// endregion
219220
// region search
220221

221-
public <T> Mono<SearchResponse<T>> search(SearchRequest request, Class<T> tDocumentClass) {
222+
public <T> Mono<ResponseBody<T>> search(SearchRequest request, Class<T> tDocumentClass) {
222223

223224
Assert.notNull(request, "request must not be null");
224225
Assert.notNull(tDocumentClass, "tDocumentClass must not be null");
@@ -227,7 +228,7 @@ public <T> Mono<SearchResponse<T>> search(SearchRequest request, Class<T> tDocum
227228
SearchRequest.createSearchEndpoint(this.getDeserializer(tDocumentClass)), transportOptions));
228229
}
229230

230-
public <T> Mono<SearchResponse<T>> search(Function<SearchRequest.Builder, ObjectBuilder<SearchRequest>> fn,
231+
public <T> Mono<ResponseBody<T>> search(Function<SearchRequest.Builder, ObjectBuilder<SearchRequest>> fn,
231232
Class<T> tDocumentClass) {
232233

233234
Assert.notNull(fn, "fn must not be null");

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

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import co.elastic.clients.elasticsearch.core.*;
2323
import co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem;
2424
import co.elastic.clients.elasticsearch.core.get.GetResult;
25+
import co.elastic.clients.elasticsearch.core.search.ResponseBody;
2526
import co.elastic.clients.json.JsonpMapper;
2627
import co.elastic.clients.transport.Version;
2728
import reactor.core.publisher.Flux;
@@ -326,22 +327,27 @@ private Flux<SearchDocument> doScroll(SearchRequest searchRequest) {
326327

327328
Time scrollTimeout = searchRequest.scroll() != null ? searchRequest.scroll() : Time.of(t -> t.time("1m"));
328329

329-
Flux<SearchResponse<EntityAsMap>> searchResponses = Flux.usingWhen(Mono.fromSupplier(ScrollState::new), //
330-
state -> Mono
331-
.from(execute((ClientCallback<Publisher<SearchResponse<EntityAsMap>>>) client -> client
332-
.search(searchRequest, EntityAsMap.class))) //
333-
.expand(entityAsMapSearchResponse -> {
334-
335-
state.updateScrollId(entityAsMapSearchResponse.scrollId());
336-
337-
if (entityAsMapSearchResponse.hits() == null
338-
|| CollectionUtils.isEmpty(entityAsMapSearchResponse.hits().hits())) {
339-
return Mono.empty();
340-
}
341-
342-
return Mono.from(execute((ClientCallback<Publisher<ScrollResponse<EntityAsMap>>>) client -> client.scroll(
343-
ScrollRequest.of(sr -> sr.scrollId(state.getScrollId()).scroll(scrollTimeout)), EntityAsMap.class)));
344-
}),
330+
Flux<ResponseBody<EntityAsMap>> searchResponses = Flux.usingWhen(Mono.fromSupplier(ScrollState::new), //
331+
state -> {
332+
return Mono
333+
.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client1 -> client1
334+
.search(searchRequest, EntityAsMap.class))) //
335+
.expand(entityAsMapSearchResponse -> {
336+
337+
state.updateScrollId(entityAsMapSearchResponse.scrollId());
338+
339+
if (entityAsMapSearchResponse.hits() == null
340+
|| CollectionUtils.isEmpty(entityAsMapSearchResponse.hits().hits())) {
341+
return Mono.empty();
342+
}
343+
344+
return Mono.from(execute((ClientCallback<Publisher<ScrollResponse<EntityAsMap>>>) client1 -> {
345+
ScrollRequest scrollRequest = ScrollRequest
346+
.of(sr -> sr.scrollId(state.getScrollId()).scroll(scrollTimeout));
347+
return client1.scroll(scrollRequest, EntityAsMap.class);
348+
}));
349+
});
350+
},
345351
this::cleanupScroll, (state, ex) -> cleanupScroll(state), this::cleanupScroll);
346352

347353
return searchResponses.flatMapIterable(entityAsMapSearchResponse -> entityAsMapSearchResponse.hits().hits())
@@ -363,15 +369,15 @@ protected Mono<Long> doCount(Query query, Class<?> entityType, IndexCoordinates
363369
SearchRequest searchRequest = requestConverter.searchRequest(query, entityType, index, true, false);
364370

365371
return Mono
366-
.from(execute((ClientCallback<Publisher<SearchResponse<EntityAsMap>>>) client -> client.search(searchRequest,
372+
.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client -> client.search(searchRequest,
367373
EntityAsMap.class)))
368374
.map(searchResponse -> searchResponse.hits().total() != null ? searchResponse.hits().total().value() : 0L);
369375
}
370376

371377
private Flux<SearchDocument> doFind(SearchRequest searchRequest) {
372378

373379
return Mono
374-
.from(execute((ClientCallback<Publisher<SearchResponse<EntityAsMap>>>) client -> client.search(searchRequest,
380+
.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client -> client.search(searchRequest,
375381
EntityAsMap.class))) //
376382
.flatMapIterable(entityAsMapSearchResponse -> entityAsMapSearchResponse.hits().hits()) //
377383
.map(entityAsMapHit -> DocumentAdapters.from(entityAsMapHit, jsonpMapper));
@@ -391,7 +397,7 @@ protected <T> Mono<SearchDocumentResponse> doFindForResponse(Query query, Class<
391397
.toFuture();
392398

393399
return Mono
394-
.from(execute((ClientCallback<Publisher<SearchResponse<EntityAsMap>>>) client -> client.search(searchRequest,
400+
.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client -> client.search(searchRequest,
395401
EntityAsMap.class)))
396402
.map(searchResponse -> SearchDocumentResponseBuilder.from(searchResponse, entityCreator, jsonpMapper));
397403
}

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import co.elastic.clients.elasticsearch.core.SearchResponse;
2020
import co.elastic.clients.elasticsearch.core.search.Hit;
2121
import co.elastic.clients.elasticsearch.core.search.HitsMetadata;
22+
import co.elastic.clients.elasticsearch.core.search.ResponseBody;
2223
import co.elastic.clients.elasticsearch.core.search.Suggestion;
2324
import co.elastic.clients.elasticsearch.core.search.TotalHits;
2425
import co.elastic.clients.json.JsonpMapper;
@@ -45,21 +46,22 @@ class SearchDocumentResponseBuilder {
4546
/**
4647
* creates a SearchDocumentResponse from the {@link SearchResponse}
4748
*
48-
* @param searchResponse the Elasticsearch search response
49+
* @param responseBody the Elasticsearch response body
4950
* @param entityCreator function to create an entity from a {@link SearchDocument}
5051
* @param jsonpMapper to map JsonData objects
5152
* @return the SearchDocumentResponse
5253
*/
53-
public static <T> SearchDocumentResponse from(SearchResponse<EntityAsMap> searchResponse,
54+
@SuppressWarnings("DuplicatedCode")
55+
public static <T> SearchDocumentResponse from(ResponseBody<EntityAsMap> responseBody,
5456
SearchDocumentResponse.EntityCreator<T> entityCreator, JsonpMapper jsonpMapper) {
5557

56-
Assert.notNull(searchResponse, "searchResponse must not be null");
58+
Assert.notNull(responseBody, "responseBody must not be null");
5759
Assert.notNull(entityCreator, "entityCreator must not be null");
5860

59-
HitsMetadata<EntityAsMap> hitsMetadata = searchResponse.hits();
60-
String scrollId = searchResponse.scrollId();
61-
Map<String, Aggregate> aggregations = searchResponse.aggregations();
62-
Map<String, List<Suggestion<EntityAsMap>>> suggest = searchResponse.suggest();
61+
HitsMetadata<EntityAsMap> hitsMetadata = responseBody.hits();
62+
String scrollId = responseBody.scrollId();
63+
Map<String, Aggregate> aggregations = responseBody.aggregations();
64+
Map<String, List<Suggestion<EntityAsMap>>> suggest = responseBody.suggest();
6365

6466
return from(hitsMetadata, scrollId, aggregations, suggest, entityCreator, jsonpMapper);
6567
}

src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import co.elastic.clients.elasticsearch.core.IndexRequest;
2626
import co.elastic.clients.elasticsearch.core.IndexResponse;
2727
import co.elastic.clients.elasticsearch.core.SearchRequest;
28-
import co.elastic.clients.elasticsearch.core.SearchResponse;
28+
import co.elastic.clients.elasticsearch.core.search.ResponseBody;
2929
import co.elastic.clients.elasticsearch.indices.ElasticsearchIndicesClient;
3030
import co.elastic.clients.elasticsearch.indices.IndexSettings;
3131
import co.elastic.clients.transport.ElasticsearchTransport;
@@ -300,7 +300,7 @@ void search() {
300300
.query(query -> query.match(matchQuery -> matchQuery.field("content").query(FieldValue.of("content1"))))
301301
.build();
302302

303-
SearchResponse<EntityAsMap> searchResponse = null;
303+
ResponseBody<EntityAsMap> searchResponse = null;
304304
try {
305305
searchResponse = searchImperative(searchRequest);
306306
assertThat(searchResponse).isNotNull();
@@ -316,11 +316,11 @@ void search() {
316316
}
317317
}
318318

319-
private SearchResponse<EntityAsMap> searchImperative(SearchRequest searchRequest) throws IOException {
319+
private ResponseBody<EntityAsMap> searchImperative(SearchRequest searchRequest) throws IOException {
320320
return imperativeElasticsearchClient.search(searchRequest, EntityAsMap.class);
321321
}
322322

323-
private SearchResponse<EntityAsMap> searchReactive(SearchRequest searchRequest) {
323+
private ResponseBody<EntityAsMap> searchReactive(SearchRequest searchRequest) {
324324
return Objects.requireNonNull(reactiveElasticsearchClient.search(searchRequest, EntityAsMap.class).block());
325325
}
326326
// endregion

src/test/resources/testcontainers-elasticsearch.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#
1616
#
1717
sde.testcontainers.image-name=docker.elastic.co/elasticsearch/elasticsearch
18-
sde.testcontainers.image-version=7.17.2
18+
sde.testcontainers.image-version=7.17.3
1919
#
2020
#
2121
# 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

0 commit comments

Comments
 (0)