Release highlights

edit

These 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.16

edit
  • ElasticsearchClient is now Closeable. 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 trace and 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();
          }
      }

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("2024-06-20")    // field now only accepts valid type for the specified query
              .lte("2024-07-05")
              .boost(1.0F)
              .format("yyyy-MM-dd")
              .relation(RangeRelation.Contains)));

Version 8.14

edit
  • No new feature.

Version 8.13

edit
  • Add ES|QL helpers - #763
  • Add an example SpringBoot application - #737

Version 8.12

edit
  • No new feature.

Version 8.11

edit
  • No new feature.

Version 8.10

edit
  • Add instrumentation API and native OpenTelemetry implementation - #588, docs

Version 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

edit
  • Add BulkIngester helper - #474, #513, docs
  • Allow unparsed binary data to be used for ingestion - #508, docs
  • Add convenience method BooleanQuery.hasClauses() - #525

Version 8.6

edit
  • Allow using java.lang.reflect.Type in addition to java.lang.Class to define application types for deserialization - #438
  • Add buffered lookahead for Jackson to speed up union deserialization - #489
  • Cache the result of JsonProvider.provider() - #485

Version 8.5

edit

Version 8.4

edit

Version 8.3

edit
  • Add toString() implementation to all value classes - #269

Version 8.2

edit

Version 8.1

edit

Version 8.0

edit
  • Change the JSON-P implementation from Glassfish to Parsson - #63
  • Accept null values in lists - #68