Skip to content

Commit 5f297f1

Browse files
authored
Upgrade to Elasticsearch 8.16.1.
Original Pull Request spring-projects#3019 Closes spring-projects#3017
1 parent 028239f commit 5f297f1

File tree

13 files changed

+57
-28
lines changed

13 files changed

+57
-28
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<springdata.commons>3.5.0-SNAPSHOT</springdata.commons>
2222

2323
<!-- version of the ElasticsearchClient -->
24-
<elasticsearch-java>8.15.3</elasticsearch-java>
24+
<elasticsearch-java>8.16.1</elasticsearch-java>
2525

2626
<hoverfly>0.19.0</hoverfly>
2727
<log4j>2.23.1</log4j>

src/main/antora/modules/ROOT/pages/elasticsearch/elasticsearch-new.adoc

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
[[new-features]]
22
= What's new
33

4+
[[new-features.5-5-0]]
5+
== New in Spring Data Elasticsearch 5.5
6+
* Upgrade to Elasticsearch 8.16.1.
7+
48
[[new-features.5-4-0]]
59
== New in Spring Data Elasticsearch 5.4
610

711
* Upgrade to Elasticsearch 8.15.3.
812
* Allow to customize the mapped type name for `@InnerField` and `@Field` annotations.
913
* Support for Elasticsearch SQL.
10-
* Add support for retrieving request executionDuration.
14+
* Add support for retrieving request executionDuration.
1115

1216
[[new-features.5-3-0]]
1317
== New in Spring Data Elasticsearch 5.3

src/main/antora/modules/ROOT/pages/elasticsearch/versions.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ The following table shows the Elasticsearch and Spring versions that are used by
66
[cols="^,^,^,^",options="header"]
77
|===
88
| Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework
9-
| 2025.0 (in development) | 5.5.x | 8.15.3 | 6.2.x
10-
| 2024.1 | 5.4.x | 8.15.3 | 6.1.x
9+
| 2025.0 (in development) | 5.5.x | 8.16.1 | 6.2.x
10+
| 2024.1 | 5.4.x | 8.15.5 | 6.1.x
1111
| 2024.0 | 5.3.x | 8.13.4 | 6.1.x
1212
| 2023.1 (Vaughan) | 5.2.xfootnote:oom[Out of maintenance] | 8.11.1 | 6.1.x
1313
| 2023.0 (Ullmann) | 5.1.xfootnote:oom[] | 8.7.1 | 6.0.x

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

+7-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import co.elastic.clients.elasticsearch.ElasticsearchClient;
1919
import co.elastic.clients.transport.ElasticsearchTransport;
2020

21+
import java.io.IOException;
22+
2123
import org.elasticsearch.client.RestClient;
2224
import org.springframework.util.Assert;
2325

@@ -36,7 +38,10 @@ public AutoCloseableElasticsearchClient(ElasticsearchTransport transport) {
3638
}
3739

3840
@Override
39-
public void close() throws Exception {
40-
transport.close();
41+
public void close() throws IOException {
42+
// since Elasticsearch 8.16 the ElasticsearchClient implements (through ApiClient) the Closeable interface and
43+
// handles closing of the underlying transport. We now just call the base class, but keep this as we
44+
// have been implementing AutoCloseable since 4.4 and won't change that to a mere Closeable
45+
super.close();
4146
}
4247
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ public static ElasticsearchTransport getElasticsearchTransport(RestClient restCl
329329
Assert.notNull(jsonpMapper, "jsonpMapper must not be null");
330330

331331
TransportOptions.Builder transportOptionsBuilder = transportOptions != null ? transportOptions.toBuilder()
332-
: new RestClientOptions(RequestOptions.DEFAULT).toBuilder();
332+
: new RestClientOptions(RequestOptions.DEFAULT, false).toBuilder();
333333

334334
RestClientOptions.Builder restClientOptionsBuilder = getRestClientOptionsBuilder(transportOptions);
335335

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,6 @@ public JsonpMapper jsonpMapper() {
135135
* @return the options that should be added to every request. Must not be {@literal null}
136136
*/
137137
public TransportOptions transportOptions() {
138-
return new RestClientOptions(RequestOptions.DEFAULT);
138+
return new RestClientOptions(RequestOptions.DEFAULT, false);
139139
}
140140
}

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

+10-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import co.elastic.clients.util.ObjectBuilder;
2828
import reactor.core.publisher.Mono;
2929

30+
import java.io.IOException;
3031
import java.util.function.Function;
3132

3233
import org.springframework.lang.Nullable;
@@ -56,8 +57,11 @@ public ReactiveElasticsearchClient withTransportOptions(@Nullable TransportOptio
5657
}
5758

5859
@Override
59-
public void close() throws Exception {
60-
transport.close();
60+
public void close() throws IOException {
61+
// since Elasticsearch 8.16 the ElasticsearchClient implements (through ApiClient) the Closeable interface and
62+
// handles closing of the underlying transport. We now just call the base class, but keep this as we
63+
// have been implementing AutoCloseable since 4.4 and won't change that to a mere Closeable
64+
super.close();
6165
}
6266

6367
// region child clients
@@ -127,7 +131,8 @@ public <T> Mono<GetResponse<T>> get(GetRequest request, Class<T> tClass) {
127131
// java.lang.Class<TDocument>)
128132
// noinspection unchecked
129133
JsonEndpoint<GetRequest, GetResponse<T>, ErrorResponse> endpoint = (JsonEndpoint<GetRequest, GetResponse<T>, ErrorResponse>) GetRequest._ENDPOINT;
130-
endpoint = new EndpointWithResponseMapperAttr<>(endpoint, "co.elastic.clients:Deserializer:_global.get.Response.TDocument",
134+
endpoint = new EndpointWithResponseMapperAttr<>(endpoint,
135+
"co.elastic.clients:Deserializer:_global.get.Response.TDocument",
131136
getDeserializer(tClass));
132137

133138
return Mono.fromFuture(transport.performRequestAsync(request, endpoint, transportOptions));
@@ -172,7 +177,8 @@ public <T> Mono<MgetResponse<T>> mget(MgetRequest request, Class<T> clazz) {
172177

173178
// noinspection unchecked
174179
JsonEndpoint<MgetRequest, MgetResponse<T>, ErrorResponse> endpoint = (JsonEndpoint<MgetRequest, MgetResponse<T>, ErrorResponse>) MgetRequest._ENDPOINT;
175-
endpoint = new EndpointWithResponseMapperAttr<>(endpoint, "co.elastic.clients:Deserializer:_global.mget.Response.TDocument",
180+
endpoint = new EndpointWithResponseMapperAttr<>(endpoint,
181+
"co.elastic.clients:Deserializer:_global.mget.Response.TDocument",
176182
this.getDeserializer(clazz));
177183

178184
return Mono.fromFuture(transport.performRequestAsync(request, endpoint, transportOptions));

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,6 @@ public JsonpMapper jsonpMapper() {
125125
* @return the options that should be added to every request. Must not be {@literal null}
126126
*/
127127
public TransportOptions transportOptions() {
128-
return new RestClientOptions(RequestOptions.DEFAULT).toBuilder().build();
128+
return new RestClientOptions(RequestOptions.DEFAULT, false).toBuilder().build();
129129
}
130130
}

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

+17-11
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import co.elastic.clients.elasticsearch.indices.ExistsIndexTemplateRequest;
5252
import co.elastic.clients.elasticsearch.indices.ExistsRequest;
5353
import co.elastic.clients.elasticsearch.indices.update_aliases.Action;
54+
import co.elastic.clients.elasticsearch.sql.query.SqlFormat;
5455
import co.elastic.clients.json.JsonData;
5556
import co.elastic.clients.json.JsonpDeserializer;
5657
import co.elastic.clients.json.JsonpMapper;
@@ -533,17 +534,22 @@ public co.elastic.clients.elasticsearch.indices.GetTemplateRequest indicesGetTem
533534
public co.elastic.clients.elasticsearch.sql.QueryRequest sqlQueryRequest(SqlQuery query) {
534535
Assert.notNull(query, "Query must not be null.");
535536

536-
return co.elastic.clients.elasticsearch.sql.QueryRequest.of(sqb -> {
537-
sqb.query(query.getQuery()).catalog(query.getCatalog()).columnar(query.getColumnar()).cursor(query.getCursor())
538-
.fetchSize(query.getFetchSize()).fieldMultiValueLeniency(query.getFieldMultiValueLeniency())
539-
.indexUsingFrozen(query.getIndexIncludeFrozen()).keepAlive(time(query.getKeepAlive()))
540-
.keepOnCompletion(query.getKeepOnCompletion()).pageTimeout(time(query.getPageTimeout()))
541-
.requestTimeout(time(query.getRequestTimeout()))
542-
.waitForCompletionTimeout(time(query.getWaitForCompletionTimeout())).filter(getQuery(query.getFilter(), null))
543-
.timeZone(Objects.toString(query.getTimeZone(), null)).format("json");
544-
545-
return sqb;
546-
});
537+
return co.elastic.clients.elasticsearch.sql.QueryRequest.of(sqb -> sqb
538+
.query(query.getQuery())
539+
.catalog(query.getCatalog())
540+
.columnar(query.getColumnar())
541+
.cursor(query.getCursor())
542+
.fetchSize(query.getFetchSize())
543+
.fieldMultiValueLeniency(query.getFieldMultiValueLeniency())
544+
.indexUsingFrozen(query.getIndexIncludeFrozen())
545+
.keepAlive(time(query.getKeepAlive()))
546+
.keepOnCompletion(query.getKeepOnCompletion())
547+
.pageTimeout(time(query.getPageTimeout()))
548+
.requestTimeout(time(query.getRequestTimeout()))
549+
.waitForCompletionTimeout(time(query.getWaitForCompletionTimeout()))
550+
.filter(getQuery(query.getFilter(), null))
551+
.timeZone(Objects.toString(query.getTimeZone(), null))
552+
.format(SqlFormat.Json));
547553
}
548554

549555
// endregion

src/main/java/org/springframework/data/elasticsearch/core/query/highlight/HighlightCommonParameters.java

+8
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ public String getBoundaryScannerLocale() {
8080
return boundaryScannerLocale;
8181
}
8282

83+
/**
84+
* @deprecated the underlying functionality is deprecated since Elasticsearch 8.8.
85+
*/
86+
@Deprecated(since = "5.5")
8387
public boolean getForceSource() {
8488
return forceSource;
8589
}
@@ -173,6 +177,10 @@ public SELF withBoundaryScannerLocale(String boundaryScannerLocale) {
173177
return (SELF) this;
174178
}
175179

180+
/**
181+
* @deprecated the underlying functionality is deprecated since Elasticsearch 8.8.
182+
*/
183+
@Deprecated(since = "5.5")
176184
public SELF withForceSource(boolean forceSource) {
177185
this.forceSource = forceSource;
178186
return (SELF) this;

src/main/kotlin/org/springframework/data/elasticsearch/core/SearchOperationsExtensions.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ inline fun <reified T : Any> SearchOperations.searchOne(query: Query): SearchHit
3333
inline fun <reified T : Any> SearchOperations.searchOne(query: Query, index: IndexCoordinates): SearchHit<T>? =
3434
searchOne(query, T::class.java, index)
3535

36-
inline fun <reified T : Any> SearchOperations.multiSearch(queries: List<out Query>): List<SearchHits<T>> =
36+
inline fun <reified T : Any> SearchOperations.multiSearch(queries: List<Query>): List<SearchHits<T>> =
3737
multiSearch(queries, T::class.java)
3838

3939
inline fun <reified T : Any> SearchOperations.multiSearch(
40-
queries: List<out Query>,
40+
queries: List<Query>,
4141
index: IndexCoordinates
4242
): List<SearchHits<T>> =
4343
multiSearch(queries, T::class.java, index)

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public class DevTests {
7777
private static final SimpleElasticsearchMappingContext mappingContext = new SimpleElasticsearchMappingContext();
7878
private static final MappingElasticsearchConverter converter = new MappingElasticsearchConverter(mappingContext);
7979

80-
private final TransportOptions transportOptions = new RestClientOptions(RequestOptions.DEFAULT).toBuilder()
80+
private final TransportOptions transportOptions = new RestClientOptions(RequestOptions.DEFAULT, false).toBuilder()
8181
.addHeader("X-SpringDataElasticsearch-AlwaysThere", "true").setParameter("pretty", "true").build();
8282

8383
private final JsonpMapper jsonpMapper = new JacksonJsonpMapper();

src/test/resources/testcontainers-elasticsearch.properties

+1-1
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=8.15.3
18+
sde.testcontainers.image-version=8.16.1
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)