Release highlights
editRelease highlights
editThese are the important new features and changes in minor releases. Every release also updates the Java API Client to the latest API specification. This includes new APIs and bug fixes in the specification of existing APIs.
For a list of detailed changes, including bug fixes, please see the GitHub project realease notes.
Version 8.19
editBreaking changes
-
PinnedRetriever:rankWindowSizefield modified fromintto nullableInteger -
LinearRetriever:rankWindowSizefield modified fromintto nullableInteger -
SubmitRequest: removed wrong fieldminCompatibleShardNode -
AliasesRequest: removed wrong fieldmasterTimeout -
DeleteAliasResponse: parent class changed fromAcknowledgedResponseBasetoIndicesAliasesResponseBody -
PipelineSettings: replaced deprecated fieldsqueueMaxBytesNumberandqueueMaxBytesUnitswith current fieldqueueMaxBytes
Version 8.18
editBreaking changes
While we try to limit breaking changes to the minimum between minor versions of the client, all the following changes were necessary to keep the client code in sync with the server code and to fix client side bugs.
-
Removed deprecated
LanguageAnalyzer -
Removed unused
NodeReloadError -
Removed unused
SearchApplicationListItem -
Removed
InferenceRequest,InferenceResponse,InferenceResult,InferenceResultVariantas part of a complete refactor of the Inference API -
SearchRequest,SubmitRequest:indicesBoostfield modified fromList<Map<String,Double>>toList<NamedValue<Double>>, because the server does not accept more than one value in the map.-
Old:
esClient.search(s -> s .index("*") .indicesBoost(Map.of("index", 1.0)) ,Void.class); -
New:
esClient.search(s -> s .index("*") .indicesBoost(NamedValue.of("index", 1.0)) ,Void.class);
-
-
PutMappingRequest:dynamicTemplatesfield modified fromList<Map<String, DynamicTemplate>>toList<NamedValue<DynamicTemplate>>, same reason as above. -
DenseVectorIndexOptions:typefield modified fromStringto enumDenseVectorIndexOptionsType -
DenseVectorProperty:-
elementTypefield modified fromStringto enumDenseVectorElementType -
similarityfield modified fromStringto enumDenseVectorSimilarity
-
-
DynamicTemplate:runtimefield modified fromPropertytoRuntimeField, fixing a previous wrong mapping of the property. -
ObjectProperty:subobjectsfield modified fromBooleantoSubobjects -
TypeMapping:subobjectsfield modified fromBooleantoSubobjects -
FollowerIndexParameters:-
maxOutstandingReadRequestsfield modified frominttoLong, now optional -
maxOutstandingWriteRequestsfield modified frominttoInteger, now optional -
maxReadRequestOperationCountfield modified frominttoInteger, now optional -
maxWriteBufferCountfield modified frominttoInteger, now optional -
maxWriteRequestOperationCountfield modified frominttoInteger, now optional
-
-
FollowRequest-
maxOutstandingWriteRequestsfield modified fromLongtoInteger -
maxReadRequestOperationCountfield modified fromLongtoInteger -
maxWriteBufferCountfield modified fromLongtoInteger -
maxWriteRequestOperationCountfield modified fromLongtoInteger
-
-
ScriptsPainlessExecuteRequest:contextfield modified fromStringtoPainlessContext -
DataStreamWithLifecycle:lifecyclefield modified fromDataStreamLifecycletoDataStreamLifecycleWithRollover -
elasticsearch.search_application.PutRequest:searchApplicationfield modified fromSearchApplicationtoSearchApplicationParameters -
TrainedModelDeploymentNodesStats:routingStatefield modified fromTrainedModelAssignmentRoutingTabletoTrainedModelAssignmentRoutingStateAndReason
New Features
-
BulkIngester retry policy
Retry logic can now be enabled allowing the BulkIngester to retry operations that failed with error 429 (too many requests), hoping that the error will recover and the request will go through. Users can configure the desired backoff policy using the backoffPolicy() method in the BulkIngester builder:
BulkIngester ingester = BulkIngester.of(b -> b .client(client) ... .listener(listener) .flushInterval(1000, TimeUnit.MILLISECONDS) .backoffPolicy(BackoffPolicy.constantBackoff(50L, 8))This is an example of constant backoff, meaning the single failed operation will be retried 8 times every 50 milliseconds.
-
Default class for methods requiring TDocument
Some requests in the client require a second parameter to define the result class, for example
search, meaning the compiler will complain while the query is being written, which can be annoying. We added overload methods that useVoid.classas default type, so that the correct type can be eventually added later into writing the query.Example with
search:-
Old:
esClient.search(s -> s .index("my-index") .query(q -> q .matchAll(m -> m) ) ,Object.class); -
New:
esClient.search(s -> s .index("my-index") .query(q -> q .matchAll(m -> m) ) );
-
-
Builder setters overloads with variant type
Added more setters allowing to build requests with a specific type variant instead of having to use the parent class and then select the desired variant later.
Example with
query, where thequeryfield can now accept aMatchAllQuery(or any other variant) directly:-
Old:
esClient.search(s -> s .index("my-index") .query(q -> q .matchAll(m -> m) ) ); -
New:
esClient.search(s -> s .index("my-index") .query(MatchAllQuery.of(m -> m)) );Example with
aggregations, where theaggregationsfield can now acceptAverageAggregation(or any other variant) directly: -
Old:
// using functional builder shortcut esClient.search(s -> s .aggregations("agg", a -> a .avg(av -> av .field("price") ) ) ); // using Aggregation class builder esClient.search(s -> s .aggregations("agg", Aggregation.of(ag -> ag .avg(av -> av .field("price")) ) ) ); -
New:
esClient.search(s -> s .aggregations("agg", AverageAggregation.of(av -> av .field("price")) ) );
-
Version 8.17
edit- No new feature.
Version 8.16
edit-
ElasticsearchClientis nowCloseable. Closing a client object also closes the underlying transport - #851 -
Added option to make the response body available in case of deserialization error- #886.
-
While it has always been possible to set the log level to
traceand have the client print both the json bodies of the requests and responses, it’s often not the best solution because of the large amount of information printed. -
To enable the feature:
RestClientOptions options = new RestClientOptions(RequestOptions.DEFAULT, true); ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper(), options); ElasticsearchClient esClientWithOptions = new ElasticsearchClient(transport);
-
To retrieve the original body from the TransportException that gets thrown in case of deserialization errors:
try{ // some code that returns faulty json } catch (TransportException ex){ try (RepeatableBodyResponse repeatableResponse = (RepeatableBodyResponse) ex.response()) { BinaryData body = repeatableResponse.body(); } }
-
While it has always been possible to set the log level to
Version 8.15
edit- New Connector API available
- Fixed bug in BulkIngester - #830
- Various bug fixes, among which are #844, #847
-
Changed builders for queries that use generic types, for example:
-
Old RangeQuery:
RangeQuery ra = RangeQuery.of(r -> r // no distinction between various types (date, term, number) .field("day") .gte(JsonData.of("2024-06-20")) // must use custom json for fields because there's no defined type .lte(JsonData.of("2024-07-05")) .boost(1.0F) .format("yyyy-MM-dd") .relation(RangeRelation.Contains)); -
New RangeQuery:
RangeQuery ra = RangeQuery.of(r -> r .date(d -> d // choose query type before .field("day") .gte("20-06-24") // field now only accepts valid type for the specified query .lte("20-07-24") .boost(1.0F) .format("yyyy-MM-dd") .relation(RangeRelation.Contains)));
-
Version 8.14
edit- No new feature.
Version 8.13
editVersion 8.12
edit- No new feature.
Version 8.11
edit- No new feature.
Version 8.10
editVersion 8.9
edit- Refactor RestClientTransport to allow using other http client libraries - #584
Version 8.8
edit- Throw a TransportException when an error response cannot be parsed - #579
- Speed up URL path encoding and remove dependency on httpclient - #576
- Add buffered lookahead and JsonData implementation for Jackson - #489, #567
- Expose additional BulkIngester metrics - #513
- Allow unparsed binary data to be used for ingestion - #508
Version 8.7
editVersion 8.6
editVersion 8.5
edit- Add support for API endpoints that return binary content, such as the Vector tile API - #434
- Add support for plugin-defined custom components - #370, #371
- Add SSL setup helper class and documentation - #390
Version 8.4
edit-
Add troubleshooting documentation on
MissingRequiredPropertyException- #301 - Allow serializing aggregations without typed keys. This is useful in scenarios where the Java application is used as a proxy and the responses are sent back to its client - #316
Version 8.3
edit-
Add
toString()implementation to all value classes - #269
Version 8.2
edit-
Add the
withJson()method to all builder classes - #200 - Add troubleshooting docs for jakarta-json and build systems like Spring - #215
- Improve JSON mapping errors by adding location and property path in the exception message - #237
Version 8.1
edit- Add documentation for HLRC’s compatibility mode with Elasticsearch 8.x - #230