IMPORTANT: This documentation is no longer updated. Refer to Elastic's version policy and the latest documentation.

Elasticsearch release notes

edit

Elasticsearch version 9.0.0-rc1

edit
Breaking changes
edit

The following changes in Elasticsearch 9.0 might affect your applications and prevent them from operating normally. Before upgrading to 9.0, review these changes and take the described steps to mitigate the impact. Also check out Elasticsearch version 9.0.0-beta1 breaking changes.

Cluster and node setting changesedit
Drop TLS_RSA cipher support for JDK 24

Details
This change removes TLS_RSA ciphers from the list of default supported ciphers, for Elasticsearch deployments running on JDK 24.

Impact
The dropped ciphers are TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, and TLS_RSA_WITH_AES_128_CBC_SHA. TLS connections to Elasticsearch using these ciphers will no longer work. Please configure your clients to use one of supported cipher suites.

Deprecations
edit

The following functionality has been deprecated in Elasticsearch 9.0 and will be removed in a future version. Also check out Elasticsearch version 9.0.0-beta1 deprecations.

While this won’t have an immediate impact on your applications, we strongly encourage you to take the described steps to update your code after upgrading to 9.0.

To find out if you are using any deprecated functionality, enable deprecation logging.

REST API deprecationsedit
Add deprecation warning for flush API

Details
The anomaly detection job flush API is deprecated since it is only required for the post data API, which was deprecated since 7.11.0.

Impact
This should have a minimal impact on users as the flush API is only required for the post data API, which was deprecated since 7.11.0.

Search deprecationsedit
Deprecate Behavioral Analytics CRUD apis

Details
Behavioral Analytics has been deprecated as of 9.0.0 and will be removed in a future release. The APIs will still work for now, but will emit warning headers that the API has been deprecated.

Impact
Behavioral Analytics has been deprecated as of 9.0.0 and will be removed in a future release.

Bug fixes
edit
Analysis
  • Adjust exception thrown when unable to load hunspell dict #123743
Data streams
  • Updating TransportRolloverAction.checkBlock so that non-write-index blocks do not prevent data stream rollover #122905
Downsampling
  • Improve downsample performance by avoiding to read unnecessary dimension values when downsampling. #124451
ES|QL
  • Add support to VALUES aggregation for spatial types #122886 (issue: #122413)
  • Avoid over collecting in Limit or Lucene Operator #123296
  • Change the order of the optimization rules #124335
  • ESQL: Remove estimated row size assertion #122762 (issue: #121535)
  • ES|QL: Fix scoring for full text functions #124540
  • Fix early termination in LuceneSourceOperator #123197
  • Fix function registry concurrency issues on constructor #123492 (issue: #123430)
  • Implicit numeric casting for CASE/GREATEST/LEAST #122601 (issue: #121890)
  • Lazy collection copying during node transform #124424
  • Reduce iteration complexity for plan traversal #123427
  • Revive inlinestats #122257
  • Revive some more of inlinestats functionality #123589
  • Use a must boolean statement when pushing down to Lucene when scoring is also needed #124001 (issue: #123967)
Engine
  • Hold store reference in InternalEngine#performActionWithDirectoryReader(...) #123010 (issue: #122974)
Highlighting
  • Restore V8 REST compatibility around highlight force_source parameter #124873
Indices APIs
  • Avoid hoarding cluster state references during rollover #124107 (issue: #123893)
  • Updates the deprecation info API to not warn about system indices and data streams #122951
Infra/Core
  • Fix system data streams to be restorable from a snapshot #124651 (issue: #89261)
  • Have create index return a bad request on poor formatting #123761
  • Include data streams when converting an existing resource to a system resource #121392
  • Prevent rare starvation bug when using scaling EsThreadPoolExecutor with empty core pool size. #124732 (issue: #124667)
  • System Index Migration Failure Results in a Non-Recoverable State #122326
  • System data streams are not being upgraded in the feature migration API #124884 (issue: #122949)
Ingest Node
  • Fix geoip databases index access after system feature migration (again) #122938
  • Fix geoip databases index access after system feature migration (take 3) #124604
Machine Learning
  • Add ElasticInferenceServiceCompletionServiceSettings #123155
  • Add enterprise license check to inference action for semantic text fields #122293
  • Avoid potentially throwing calls to Task#getDescription in model download #124527
  • Fix serialising the inference update request #122278
  • Migrate model_version to model_id when parsing persistent elser inference endpoints #124769 (issue: #124675)
  • Retry on streaming errors #123076
  • Set Connect Timeout to 5s #123272
  • [Inference API] Fix output stream ordering in InferenceActionProxy #124225
Mapping
  • Avoid serializing empty _source fields in mappings #122606
  • Merge template mappings properly during validation #124784 (issue: #123372)
Ranking
  • Fix LTR query feature with phrases (and two-phase) queries #125103
Search
  • Do not let ShardBulkInferenceActionFilter unwrap / rewrap ESExceptions #123890
  • Don’t generate stacktrace in TaskCancelledException #125002
  • Fix concurrency issue in ScriptSortBuilder #123757
  • Handle search timeout in SuggestPhase #122357 (issue: #122186)
  • Let MLTQuery throw IAE when no analyzer is set #124662 (issue: #124562)
Snapshot/Restore
  • Fork post-snapshot-delete cleanup off master thread #122731
  • This PR fixes a bug whereby partial snapshots of system datastreams could be used to restore system features. #124931
Suggesters
  • Return an empty suggestion when suggest phase times out #122575 (issue: #122548)
Transform
  • If the Transform is configured to write to an alias as its destination index, when the delete_dest_index parameter is set to true, then the Delete API will now delete the write index backing the alias #122074 (issue: #121913)
Vector Search
Enhancements
edit
Authorization
  • Do not fetch reserved roles from native store when Get Role API is called #121971
Data streams
  • Retry ILM async action after reindexing data stream #124149
  • Set cause on create index request in create from action #124363
Downsampling
  • Improve downsample performance by buffering docids and do bulk processing #124477
  • Improve rolling up metrics #124739
ES|QL
  • Allow skip shards with _tier and _index in ES|QL #123728
  • ES|QL - Add scoring for full text functions disjunctions #121793
  • Fix Driver status iterations and cpuTime #123290 (issue: #122967)
  • Push down StartsWith and EndsWith functions to Lucene #123381 (issue: #123067)
  • Reuse child outputSet inside the plan where possible #124611
Infra/CLI
Infra/Core
  • Improve size limiting string message #122427
Infra/REST API
  • Indicate when errors represent timeouts #124936
Ingest Node
  • Allow setting the type in the reroute processor #122409 (issue: #121553)
New features
edit
ES|QL
  • Initial support for unmapped fields #119886
Search
  • Added optional parameters to QSTR ES|QL function #121787 (issue: #120933)
Upgrades
edit
Infra/Core
  • Permanently switch from Java SecurityManager to Entitlements. The Java SecurityManager has been deprecated since Java 17, and it is now completely disabled in Java 24. In order to retain an similar level of protection, Elasticsearch implemented its own protection mechanism, Entitlements. Starting with this version, Entitlements will permanently replace the Java SecurityManager. #124865
Packaging
  • Update bundled JDK to Java 24 #125159
Security
  • Bump nimbus-jose-jwt to 10.0.2 #124544
Snapshot/Restore
  • Upgrade AWS SDK to v1.12.746 #122431

Elasticsearch version 9.0.0-beta1

edit
Breaking changes
edit

The following changes in Elasticsearch 9.0 might affect your applications and prevent them from operating normally. Before upgrading to 9.0, review these changes and take the described steps to mitigate the impact.

Aggregations changes
edit
Remove date histogram boolean support

Details
Elasticsearch no longer allows running Date Histogram aggregations over boolean fields. Instead, use Terms aggregation for boolean fields.

Impact
We expect the impact to be minimal, as this never produced good results, and has been deprecated for years.

Analysis changes
edit
Snowball stemmers have been upgraded

Details
Lucene 10 ships with an upgrade of its Snowball stemmers. For details see https://github.com/apache/lucene/issues/13209. Users using Snowball stemmers that are experiencing changes in search behaviour on existing data are advised to reindex.

Impact
The upgrade should generally provide improved stemming results. Small changes in token analysis can lead to mismatches with previously index data, so existing indices using Snowball stemmers as part of their analysis chain should be reindexed.

The "german2" snowball stemmer is now an alias for the "german" stemmer

Details
Lucene 10 has merged the improved "german2" snowball language stemmer with the "german" stemmer. For Elasticsearch, "german2" is now a deprecated alias for "german". This may results in slightly different tokens being generated for terms with umlaut substitution (like "ue" for "ü" etc…​)

Impact
Replace usages of "german2" with "german" in analysis configuration. Old indices that use the "german" stemmer should be reindexed if possible.

The persian analyzer has stemmer by default

Details
Lucene 10 has added a final stemming step to its PersianAnalyzer that Elasticsearch exposes as persian analyzer. Existing indices will keep the old non-stemming behaviour while new indices will see the updated behaviour with added stemming. Users that wish to maintain the non-stemming behaviour need to define their own analyzer as outlined in Persion analyzer. Users that wish to use the new stemming behaviour for existing indices will have to reindex their data.

Impact
Indexing with the persian analyzer will produce slightly different tokens. Users should check if this impacts their search results. If they wish to maintain the legacy non-stemming behaviour they can define their own analyzer equivalent as explained in Persian analyzer.

The Korean dictionary for Nori has been updated

Details
Lucene 10 ships with an updated Korean dictionary (mecab-ko-dic-2.1.1). For details see https://github.com/apache/lucene/issues/11452. Users experiencing changes in search behaviour on existing data are advised to reindex.

Impact
The change is small and should generally provide better analysis results. Existing indices for full-text use cases should be reindexed though.

Cluster and node setting changes
edit
Configuring a bind DN in an LDAP or Active Directory (AD) realm without a corresponding bind password will prevent node from starting

Details
For LDAP or AD authentication realms, setting a bind DN (via the xpack.security.authc.realms.ldap.*.bind_dn or xpack.security.authc.realms.active_directory.*.bind_dn realm settings) without a bind password is a misconfiguration that may prevent successful authentication to the node. Nodes will fail to start if a bind DN is specified without a password.

Impact
If you have a bind DN configured for an LDAP or AD authentication realm, set a bind password for LDAP or Active Directory. Configuring a bind DN without a password prevents the misconfigured node from starting.

Deprecated tracing.apm.* settings got removed.

Details
Deprecated tracing.apm.* settings got removed, use respective telemetry.* / telemetry.tracing.* settings instead.

Impact
9.x nodes will refuse to start if any such setting (including secret settings) is still present.

Limit ByteSizeUnit to 2 decimals

Details
In the past, byte values like 1.25 mb were allowed but deprecated. Now, values with up to two decimal places are allowed, unless the unit is bytes, in which case no decimals are allowed. Values with too many decimal places result in an error.

Impact
Values with more than two decimal places, like 0.123 mb will be rejected as an error, where in the past, they’d be accepted with a deprecation warning.

Minimum shard balancer threshold is now 1.0

Details
Earlier versions of Elasticsearch accepted any non-negative value for cluster.routing.allocation.balance.threshold, but values smaller than 1.0 do not make sense and have been ignored since version 8.6.1. From 9.0.0 these nonsensical values are now forbidden.

Impact
Do not set cluster.routing.allocation.balance.threshold to a value less than 1.0.

Remove TLSv1.1 from default protocols

Details
TLSv1.1 is no longer enabled by default. Prior to version 9.0, Elasticsearch would attempt to enable TLSv1.1 if the JDK supported it. In most cases, including all cases where Elasticsearch 8 was running with the bundled JDK, the JDK would not support TLSv1.1, so that protocol would not be available in Elasticsearch. However, if Elasticsearch was running on an old JDK or a JDK that have been reconfigured to support TLSv1.1, then the protocol would automatically be available within Elasticsearch. As of Elasticsearch 9.0, this is no longer true. If you wish to enable TLSv1.1 then you must enable it within the JDK and also enable it within Elasticsearch by using the ssl.supported_protocols setting.

Impact
Most users will not be impacted. If your Elastisearch 8 cluster was using a custom JDK and you relied on TLSv1.1, then you will need to explicitly enable TLSv1.1 within Elasticsearch (as well as enabling it within your JDK)

Remove client.type setting

Details
The node setting client.type has been ignored since the node client was removed in 8.0. The setting is now removed.

Impact
Remove the client.type setting from elasticsearch.yml

Remove cluster.routing.allocation.disk.watermark.enable_for_single_data_node setting

Details
Prior to 7.8, whenever a cluster had only a single data node, the watermarks would not be respected. In order to change this in 7.8+ in a backwards compatible way, we introduced the cluster.routing.allocation.disk.watermark.enable_for_single_data_node node setting. The setting was deprecated in 7.14 and was made to accept only true in 8.0

Impact
No known end user impact

Remove deprecated xpack.searchable.snapshot.allocate_on_rolling_restart setting

Details
The xpack.searchable.snapshot.allocate_on_rolling_restart setting was created as an escape-hatch just in case relying on the cluster.routing.allocation.enable=primaries setting for allocating searchable snapshots during rolling restarts had some unintended side-effects. It has been deprecated since 8.2.0.

Impact
Remove xpack.searchable.snapshot.allocate_on_rolling_restart from your settings if present.

Remove unsupported legacy value for discovery.type

Details
Earlier versions of Elasticsearch had a discovery.type setting which permitted values that referred to legacy discovery types. From v9.0.0 onwards, the only supported values for this setting are multi-node (the default) and single-node.

Impact
Remove any value for discovery.type from your elasticsearch.yml configuration file.

Index setting changes
edit
Remove the ability to read frozen indices

Details
The ability to read frozen indices has been removed. (Frozen indices are no longer useful due to improvements in heap memory usage. The ability to freeze indices was removed in 8.0.)

Impact
Users must unfreeze any frozen indices before upgrading.

Ingest changes
edit
Remove ecs option on user_agent processor

Details
The user_agent ingest processor no longer accepts the ecs option. (It was previously deprecated and ignored.)

Impact
Users should stop using the ecs option when creating instances of the user_agent ingest processor. The option will be removed from existing processors stored in the cluster state on upgrade.

Remove ignored fallback option on GeoIP processor

Details
The option fallback_to_default_databases on the geoip ingest processor has been removed. (It was deprecated and ignored since 8.0.0.)

Impact
Customers should stop remove the noop fallback_to_default_databases option on any geoip ingest processors.

Logging changes
edit
Deprecation logging value change for "data_stream.dataset" and "event.dataset"

Details
This change modifies the "data_stream.dataset" and "event.dataset" value for deprecation logging to use the value elasticsearch.deprecation instead of deprecation.elasticsearch. This is now consistent with other values where the name of the service is the first part of the key.

Impact
If you are directly consuming deprecation logs for "data_stream.dataset" and "event.dataset" and filtering on this value, you will need to update your filters to use elasticsearch.deprecation instead of deprecation.elasticsearch.

Logs changes
edit
Conditionally enable logsdb by default

Details
Logsdb will be enabled by default for data streams matching with logs-- pattern. If upgrading from 8.x to 9.x and data streams matching with log-- do exist, then Logsdb will not be enabled by default.

Impact
Logsdb reduce storage footprint in Elasticsearch for logs, but there are side effects to be taken into account that are described in the Logsdb docs.

Mapping changes
edit
Remove support for type, fields, copy_to and boost in metadata field definition

Details
The type, fields, copy_to and boost parameters are no longer supported in metadata field definition starting with version 9.

Impact
Users providing type, fields, copy_to or boost as part of metadata field definition should remove them from their mappings.

Turn _source meta fieldmapper’s mode attribute into a no-op

Details
The mode mapping attribute of _source metadata field mapper has been turned into a no-op. Instead the index.mapping.source.mode index setting should be used to configure source mode.

Impact
Configuring the mode attribute for the _source meta field mapper will have no effect on indices created with Elasticsearch 9.0.0 or later. Note that _source.mode configured on indices before upgrading to 9.0.0 or later will remain efficive after upgrading.

Packaging changes
edit
Disable machine learning on macOS x86_64

Details
The machine learning plugin is permanently disabled on macOS x86_64. For the last three years Apple has been selling hardware based on the arm64 architecture, and support will increasingly focus on this architecture in the future. Changes to upstream dependencies of Elastic’s machine learning functionality have made it unviable for Elastic to continue to build machine learning on macOS x86_64.

Impact
To continue to use machine learning functionality on macOS please switch to an arm64 machine (Apple silicon). Alternatively, it will still be possible to run Elasticsearch with machine learning enabled in a Docker container on macOS x86_64.

REST API changes
edit
Apply more strict parsing of actions in bulk API

Details
Previously, the following classes of malformed input were deprecated but not rejected in the action lines of the a bulk request: missing closing brace; additional keys after the action (which were ignored); additional data after the closing brace (which was ignored). They will now be considered errors and rejected.

Impact
Users must provide well-formed input when using the bulk API. (They can request REST API compatibility with v8 to get the previous behaviour back as an interim measure.)

Change most Elasticsearch timeouts to 429 response instead of 5xx

Details
When a timeout occurs in most REST requests, whether via a per-request timeout, or a system default, the request would return a 5xx response code. The response code from those APIs when a timeout occurs is now 429.

Impact
Adjust any code relying on retrying on 5xx responses for timeouts to look for a 429 response code and inspect the response to determine whether a timeout occured.

Error JSON structure has changed when detailed errors are disabled

Details
This change modifies the JSON format of error messages returned to REST clients when detailed messages are turned off. Previously, JSON returned when an exception occurred, and http.detailed_errors.enabled: false was set, just consisted of a single "error" text field with some basic information. Setting http.detailed_errors.enabled: true (the default) changed this field to an object with more detailed information. With this change, non-detailed errors now have the same structure as detailed errors. "error" will now always be an object with, at a minimum, a "type" and "reason" field. Additional fields are included when detailed errors are enabled. To use the previous structure for non-detailed errors, use the v8 REST API.

Impact
If you have set http.detailed_errors.enabled: false (the default is true) the structure of JSON when any exceptions occur now matches the structure when detailed errors are enabled. To use the previous structure for non-detailed errors, use the v8 REST API.

Remove any references to org.elasticsearch.core.RestApiVersion#V_7

Details
This PR removes all references to V_7 in the Rest API. V7 features marked for deprecation have been removed.

Impact
This change is breaking for any external plugins/clients that rely on the V_7 enum or deprecated version 7 functionality

Remove cluster state from /_cluster/reroute response

Details
The POST /_cluster/reroute API no longer returns the cluster state in its response. The ?metric query parameter to this API now has no effect and its use will be forbidden in a future version.

Impact
Cease usage of the ?metric query parameter when calling the POST /_cluster/reroute API.

Remove deprecated local attribute from alias APIs

Details
The following APIs no longer accept the ?local query parameter: GET /_alias, GET /_aliases, GET /_alias/{name}, HEAD /_alias/{name}, GET /{index}/_alias, HEAD /{index}/_alias, GET /{index}/_alias/{name}, HEAD /{index}/_alias/{name}, GET /_cat/aliases, and GET /_cat/aliases/{alias}. This parameter has been deprecated and ignored since version 8.12.

Impact
Cease usage of the ?local query parameter when calling the listed APIs.

Remove legacy params from range query

Details
The deprecated range query parameters to, from, include_lower, and include_upper are no longer supported.

Impact
Users should use lt, lte, gt, and gte query parameters instead.

Remove old _knn_search tech preview API in v9

Details
The original, tech-preview api for vector search, _knn_search, has been removed in v9. For all vector search operations, you should utilize the _search endpoint.

Impact
The _knn_search API is now inaccessible without providing a compatible-with flag for v8.

Remove support for deprecated force_source highlighting parameter

Details
The deprecated highlighting force_source parameter is no longer supported.

Impact
Users should remove usages of the force_source parameter from their search requests.

Remove unfreeze REST endpoint

Details
The /{index}/_unfreeze REST endpoint is no longer supported. This API was deprecated, and the corresponding /{index}/_freeze endpoint was removed in 8.0.

Impact
None, since it is not possible to have a frozen index in a version which is readable by Elasticsearch 9.0

Restrict Connector APIs to manage/monitor_connector privileges

Details
Connector APIs now enforce the manage_connector and monitor_connector privileges (introduced in 8.15), replacing the previous reliance on index-level permissions for .elastic-connectors and .elastic-connectors-sync-jobs in API calls.

Impact
Connector APIs now require manage_connector and monitor_connector privileges

Set allow_partial_search_results=true by default

Details
Before this change, in case of shard failures, EQL queries always returned an error. With this change, they will keep running and will return partial results.

Impact
EQL queries that would previously fail due to shard failures, will now succeed and return partial results. The previous defaults can be restored by setting xpack.eql.default_allow_partial_results cluster setting to false or setting with allow_partial_search_results to false in the query request.

Search changes
edit
Adjust random_score default field to _seq_no field

Details
When providing a seed parameter to a random_score function in the function_score query but NOT providing a field, the default field is switched from _id to _seq_no.

Impact
The random scoring and ordering may change when providing a seed and not providing a field to a random_score function.

Change semantic text to act like a normal text field

Details
The previous semantic_text format used a complex subfield structure in _source to store the embeddings. This complicated interactions/integrations with semantic_text fields and _source in general. This new semantic_text format treats it as a normal text field, where the field’s value in _source is the value assigned by the user.

Impact
Users who parsed the subfield structure of the previous semantic_text format in _source will need to update their parsing logic. The new format does not directly expose the chunks and embeddings generated from the input text. The new format will be applied to all new indices, any existing indices will continue to use the previous format.

Transform changes
edit
Remove data_frame_transforms roles

Details
data_frame_transforms_admin and data_frame_transforms_user were deprecated in Elasticsearch 7 and are being removed in Elasticsearch 9. data_frame_transforms_admin is now transform_admin. data_frame_transforms_user is now transform_user. Users must call the _update API to replace the permissions on the Transform before the Transform can be started.

Impact
Transforms created with either the data_frame_transforms_admin or the data_frame_transforms_user role will fail to start. The Transform will remain in a stopped state, and its health will be red while displaying permission failures.

The following pull requests relate to breaking changes:

Aggregations
  • Remove date histogram boolean support #118484
Allocation
  • Increase minimum threshold in shard balancer #115831
  • Remove cluster.routing.allocation.disk.watermark.enable_for_single_data_node setting #114207
  • Remove cluster state from /_cluster/reroute response #114231 (issue: #88978)
Analysis
  • Snowball stemmers have been upgraded #114146
  • The german2 stemmer is now an alias for the german snowball stemmer #113614
  • The persian analyzer has stemmer by default #113482 (issue: #113050)
  • The Korean dictionary for Nori has been updated #114124
Authentication
  • Configuring a bind DN in an LDAP or Active Directory (AD) realm without a corresponding bind password will prevent node from starting #118366
Cluster Coordination
  • Remove unsupported legacy value for discovery.type #112903
EQL
  • Set allow_partial_search_results=true by default #120267
Extract&Transform
  • Restrict Connector APIs to manage/monitor_connector privileges #119863
Highlighting
  • Remove support for deprecated force_source highlighting parameter #116943
Indices APIs
  • Apply more strict parsing of actions in bulk API #115923
  • Remove deprecated local attribute from alias APIs #115393
  • Remove the ability to read frozen indices #120108
  • Remove unfreeze REST endpoint #119227
Infra/Core
  • Change Elasticsearch timeouts to 429 response instead of 5xx #116026
  • Limit ByteSizeUnit to 2 decimals #120142
  • Remove client.type setting #118192 (issue: #104574)
  • Remove any references to org.elasticsearch.core.RestApiVersion#V_7 #118103
Infra/Logging
  • Change deprecation.elasticsearch keyword to elasticsearch.deprecation #117933 (issue: #83251)
Infra/Metrics
  • Deprecated tracing.apm.* settings got removed. #119926
Infra/REST API
  • Output a consistent format when generating error json #90529 (issue: #89387)
Ingest Node
  • Remove ecs option on user_agent processor #116077
  • Remove ignored fallback option on GeoIP processor #116112
Logs
  • Conditionally enable logsdb by default for data streams matching with logs-- pattern. #121049 (issue: #106489)
Machine Learning
  • Disable machine learning on macOS x86_64 #104125
Mapping
  • Remove support for type, fields, copy_to and boost in metadata field definition #118825
  • Turn _source meta fieldmapper’s mode attribute into a no-op #119072 (issue: #118596)
Search
  • Adjust random_score default field to _seq_no field #118671
  • Change Semantic Text To Act Like A Normal Text Field #120813
  • Remove legacy params from range query #116970
Snapshot/Restore
  • Remove deprecated xpack.searchable.snapshot.allocate_on_rolling_restart setting #114202
TLS
  • Remove TLSv1.1 from default protocols #121731
Transform
  • Remove data_frame_transforms roles #117519
Vector Search
  • Remove old _knn_search tech preview API in v9 #118104
Watcher
  • Removing support for types field in watcher search #120748
Deprecations
edit

The following functionality has been deprecated in Elasticsearch 9.0 and will be removed in a future version. While this won’t have an immediate impact on your applications, we strongly encourage you to take the described steps to update your code after upgrading to 9.0.

To find out if you are using any deprecated functionality, enable deprecation logging.

Authorization deprecations
edit
Deprecate certificate based remote cluster security model

Details
-| Certificate-based remote cluster security model is deprecated and will be removed in a future major version. Users are encouraged to migrate remote clusters from certificate to API key authentication. The API key-based security model is preferred way to configure remote clusters, as it allows to follow security best practices when setting up remote cluster connections and defining fine-grained access control.

Impact
-| If you have configured remote clusters with certificate-based security model, you should migrate remote clusters from certificate to API key authentication. Configuring a remote cluster using certificate authentication, generates a warning in the deprecation logs.

ES|QL deprecations
edit
Drop support for brackets from METADATA syntax

Details
Please describe the details of this change for the release notes. You can use asciidoc.

Impact
Please describe the impact of this change to users

REST API deprecations
edit
Document _type deprecated on simulate pipeline API

Details
Passing a document with a _type property is deprecated in the /_ingest/pipeline/{id}/_simulate and /_ingest/pipeline/_simulate APIs.

Impact
Users should already have stopped using mapping types, which were deprecated in Elasticsearch 7. This deprecation warning will fire if they specify mapping types on documents pass to the simulate pipeline API.

Deprecate elser service

Details
The elser service of the inference API will be removed in an upcoming release. Please use the elasticsearch service instead.

Impact
In the current version there is no impact. In a future version, users of the elser service will no longer be able to use it, and will be required to use the elasticsearch service to access elser through the inference API.

Rollup deprecations
edit
Emit deprecation warning when executing one of the rollup APIs

Details
Rollup is already deprecated since 8.11.0 via documentation and since 8.15.0 it is no longer possible to create new rollup jobs in clusters without rollup usage. This change updates the rollup APIs to emit a deprecation warning.

Impact
Returning a deprecation warning when using one of the rollup APIs.

Transform deprecations
edit
Removing index alias creation for deprecated transforms notification index

Details
As part of the migration from 7.x to 8.x, the .data-frame-notifications-1 index was deprecated and replaced with the .transform-notifications-000002 index. The index is no longer created by default, all writes are directed to the new index, and any clusters with the deprecated index will have an alias created to ensure that reads are still retrieving data that was written to the index before the migration to 8.x. This change removes the alias from the deprecated index in 9.x. Any clusters with the alias present will retain it, but it will not be created on new clusters.

Impact
No known end user impact.

The following pull requests relate to deprecations:

ES|QL
  • Drop support for brackets from METADATA syntax #119846 (issue: #115401)
Ingest Node
  • Fix _type deprecation on simulate pipeline API #116259
Machine Learning
  • Removing index alias creation for deprecated transforms notification index #117583
  • [Inference API] Deprecate elser service #113216
Rollup
  • Emit deprecation warning when executing one of the rollup APIs #113131
Security
  • Deprecate certificate based remote cluster security model #120806
Bug fixes
edit
Aggregations
  • Handle with illegalArgumentExceptions negative values in HDR percentile aggregations #116174 (issue: #115777)
Analysis
  • Analyze API to return 400 for wrong custom analyzer #121568 (issue: #121443)
CAT APIs
  • Fix cat_component_templates documentation #120487
CRUD
  • Preserve thread context when waiting for segment generation in RTG #114623
  • Preserve thread context when waiting for segment generation in RTG #117148
Data streams
  • Avoid updating settings version in MetadataMigrateToDataStreamService when settings have not changed #118704
  • Block-writes cannot be added after read-only #119007 (issue: #119002)
  • Ensure removal of index blocks does not leave key with null value #122246
  • Match dot prefix of migrated DS backing index with the source index #120042
  • Refresh source index before reindexing data stream index #120752 (issue: #120314)
  • ReindexDataStreamIndex bug in assertion caused by reference equality #121325
Downsampling
  • Copy metrics and default_metric properties when downsampling aggregate_metric_double #121727 (issues: #119696, #96076)
EQL
  • Fix JOIN command validation (not supported) #122011
ES|QL
  • Allow the data type of null in filters #118324 (issue: #116351)
  • Correct line and column numbers of missing named parameters #120852
  • Drop null columns in text formats #117643 (issue: #116848)
  • Fix ENRICH validation for use of wildcards #121911
  • Fix ROUND() with unsigned longs throwing in some edge cases #119536
  • Fix TDigestState.read CB leaks #114303 (issue: #114194)
  • Fix TopN row size estimate #119476 (issue: #106956)
  • Fix AbstractShapeGeometryFieldMapperTests #119265 (issue: #119201)
  • Fix a bug in TOP #121552
  • Fix async stop sometimes not properly collecting result #121843 (issue: #121249)
  • Fix attribute set equals #118823
  • Fix double lookup failure on ESQL #115616 (issue: #111398)
  • Fix queries with document level security on lookup indexes #120617 (issue: #120509)
  • Fix writing for LOOKUP status #119296 (issue: #119086)
  • Limit memory usage of fold #118602
  • Limit size of query #117898
  • Remove redundant sorts from execution plan #121156
  • Revert unwanted ES|QL lexer changes from PR #120354 #120538
Health
  • Do not recommend increasing max_shards_per_node #120458
Indices APIs
  • Add ?master_timeout to POST /_ilm/migrate_to_data_tiers #120883
  • Fix broken yaml test 30_create_from #120662
  • Include hidden indices in DeprecationInfoAction #118035 (issue: #118020)
Inference
  • [Inference API] Put back legacy EIS URL setting #121207
Infra/Core
  • Epoch Millis Rounding Down and Not Up 2 #118353
  • Wrap jackson exception on malformed json string #114445 (issue: #114142)
Infra/Logging
  • Move SlowLogFieldProvider instantiation to node construction #117949
Infra/Metrics
  • Make randomInstantBetween always return value in range [minInstant, maxInstant] #114177
Infra/Plugins
  • Remove unnecessary entitlement #120959
  • Restrict agent entitlements to the system classloader unnamed module #120546
Infra/REST API
  • Fixed a NullPointerException in _capabilities API when the path parameter is null. #113413 (issue: #113413)
Infra/Scripting
  • Register mustache size limit setting #119291
Infra/Settings
  • Don’t allow secure settings in YML config (109115) #115779 (issue: #109115)
Ingest Node
  • Add warning headers for ingest pipelines containing special characters #114837 (issue: #104411)
  • Fix geoip databases index access after system feature migration #121196
Logs
  • Always check if index mode is logsdb #116922
Machine Learning
  • Change format for Unified Chat #121396
  • Fix get all inference endponts not returning multiple endpoints sharing model deployment #121821
  • Fixing bedrock event executor terminated cache issue #118177 (issue: #117916)
  • Fixing bug setting index when parsing Google Vertex AI results #117287
  • Updating Inference Update API documentation to have the correct PUT method #121048
  • Wait for up to 2 seconds for yellow status before starting search #115938 (issues: #107777, #105955, #107815, #112191)
  • [Inference API] Fix unique ID message for inference ID matches trained model ID #119543 (issue: #111312)
Mapping
  • Enable New Semantic Text Format Only On Newly Created Indices #121556
  • Fix propagation of dynamic mapping parameter when applying copy_to #121109 (issue: #113049)
  • Fix realtime get of nested fields with synthetic source #119575 (issue: #119553)
  • Merge field mappers when updating mappings with [subobjects:false] #120370 (issue: #120216)
  • Tweak copy_to handling in synthetic _source to account for nested objects #120974 (issue: #120831)
Network
Search
  • Catch and handle disconnect exceptions in search #115836
  • Fix leak in DfsQueryPhase and introduce search disconnect stress test #116060 (issue: #115056)
  • Fix/QueryBuilderBWCIT_muted_test #117831
  • In this pr, a 400 error is returned when _source / _seq_no / _feature / _nested_path / _field_names is requested, rather a 5xx #117229
  • Inconsistency in the _analyzer api when the index is not included #115930
  • Remove duplicate code in ESIntegTestCase #120799
  • SearchStatesIt failures reported by CI #117618 (issues: #116617, #116618)
  • Skip fetching _inference_fields field in legacy semantic_text format #121720
  • Test/107515 restore template with match only text mapper it fail #120392 (issue: #107515)
  • Updated Date Range to Follow Documentation When Assuming Missing Values #112258 (issue: #111484)
  • CrossClusterIT testCancel failure #117750 (issue: #108061)
  • SearchServiceTests.testParseSourceValidation failure #117963
Snapshot/Restore
  • Add undeclared Azure settings, modify test to exercise them #118634
  • Fork post-snapshot-delete cleanup off master thread #122047
  • Retry throttled snapshot deletions #113237
  • Use the system index descriptor in the snapshot blob cache cleanup task #120937 (issue: #120518)
Store
  • Do not capture ClusterChangedEvent in IndicesStore call to #onClusterStateShardsClosed #120193
Vector Search
  • Apply default k for knn query eagerly #118774
  • Fix bbq_hnsw merge file cleanup on random IO exceptions #119691 (issue: #119392)
Watcher
  • Watcher history index has too many indexed fields - #117701 (issue: #71479)
Enhancements
edit
Allocation
  • Add a not-master state for desired balance #116904
  • Only publish desired balance gauges on master #115383
  • Reset relocation/allocation failure counter on node join/shutdown #119968
Authentication
  • Allow SSHA-256 for API key credential hash #120997
Authorization
  • Allow kibana_system user to manage .reindexed-v8-internal.alerts indices #118959
  • Grant necessary Kibana application privileges to reporting_user role #118058
  • Make reserved built-in roles queryable #117581
  • [Security Solution] Add create_index to kibana_system role for index/DS .logs-endpoint.action.responses-* #115241
  • [Security Solution] allows kibana_system user to manage .reindexed-v8-* Security Solution indices #119054
CCS
  • Resolve/cluster allows querying for cluster info only (no index expression required) #119898
CRUD
  • Remove INDEX_REFRESH_BLOCK after index becomes searchable #120807
  • Suppress merge-on-recovery for older indices #113462
Cluster Coordination
  • Include clusterApplyListener in long cluster apply warnings #120087
Data streams
  • Add action to create index from a source index #118890
  • Add index and reindex request settings to speed up reindex #119780
  • Add rest endpoint for create_from_source_index #119250
  • Add sanity check to ReindexDatastreamIndexAction #120231
  • Adding a migration reindex cancel API #118291
  • Adding get migration reindex status #118267
  • Consistent mapping for OTel log and event bodies #120547
  • Filter deprecated settings when making dest index #120163
  • Ignore closed indices for reindex #120244
  • Improve how reindex data stream index action handles api blocks #120084
  • Initial work on ReindexDatastreamIndexAction #116996
  • Make requests_per_second configurable to throttle reindexing #120207
  • Optimized index sorting for OTel logs #119504
  • Report Deprecated Indices That Are Flagged To Ignore Migration Reindex As A Warning #120629
  • Update data stream deprecations warnings to new format and filter searchable snapshots from response #118562
Distributed
  • Make various alias retrieval APIs wait for cluster to unblock #117230
  • Metrics for incremental bulk splits #116765
  • Use Azure blob batch API to delete blobs in batches #114566
EQL
  • Add support for partial shard results #116388
  • Optional named arguments for function in map #118619
ES|QL
  • Add ES|QL cross-cluster query telemetry collection #119474
  • Add a LicenseAware interface for licensed Nodes #118931 (issue: #117405)
  • Add a PostAnalysisAware, distribute verification #119798
  • Add a standard deviation aggregating function: STD_DEV #116531
  • Add cluster level reduction #117731
  • Add nulls support to Categorize #117655
  • Async search responses have CCS metadata while searches are running #117265
  • Check for early termination in Driver #118188
  • Do not serialize EsIndex in plan #119580
  • ESQL - Remove restrictions for disjunctions in full text functions #118544
  • ESQL - enabling scoring with METADATA _score #113120
  • ESQL Add esql hash function #117989
  • ESQL Support IN operator for Date nanos #119772 (issue: #118578)
  • ESQL: CATEGORIZE as a BlockHash #114317
  • ESQL: Enterprise license enforcement for CCS #118102
  • ES|QL: Partial result on demand for async queries #118122
  • Enable KQL function as a tech preview #119730
  • Enable LOOKUP JOIN in non-snapshot builds #121193 (issue: #121185)
  • Enable node-level reduction by default #119621
  • Enable physical plan verification #118114
  • Ensure cluster string could be quoted #120355
  • Esql - Support date nanos in date extract function #120727 (issue: #110000)
  • Esql - support date nanos in date format function #120143 (issue: #109994)
  • Esql Support date nanos on date diff function #120645 (issue: #109999)
  • Esql bucket function for date nanos #118474 (issue: #118031)
  • Esql compare nanos and millis #118027 (issue: #116281)
  • Esql implicit casting for date nanos #118697 (issue: #118476)
  • Extend TranslationAware to all pushable expressions #120192
  • Hash functions #118938
  • Implement a MetricsAware interface #121074
  • LOOKUP JOIN using field-caps for field mapping #117246
  • Lookup join on multiple join fields not yet supported #118858
  • Move scoring in ES|QL out of snapshot #120354
  • Optimize ST_EXTENT_AGG for geo_shape and cartesian_shape #119889
  • Push down filter passed lookup join #118410
  • Resume Driver on cancelled or early finished #120020
  • Rewrite TO_UPPER/TO_LOWER comparisons #118870 (issue: #118304)
  • ST_EXTENT_AGG optimize envelope extraction from doc-values for cartesian_shape #118802
  • Smarter field caps with subscribable listener #116755
  • Support partial sort fields in TopN pushdown #116043 (issue: #114515)
  • Support some stats on aggregate_metric_double #120343 (issue: #110649)
  • Take named parameters for identifier and pattern out of snapshot #121850
  • Term query for ES|QL #117359
  • Update grammar to rely on indexPattern instead of identifier in join target #120494
  • _score should not be a reserved attribute in ES|QL #118435 (issue: #118460)
Engine
  • Defer unpromotable shard refreshes until index refresh blocks are cleared #120642
  • POC mark read-only #119743
Experiences
  • Integrate IBM watsonx to Inference API for re-ranking task #117176
Geo
  • Optimize indexing points with index and doc values set to true #120271
Health
  • Increase replica_unassigned_buffer_time default from 3s to 5s #112834
ILM+SLM
  • Add a replicate_for option to the ILM searchable_snapshot action #119003
Indices APIs
  • Add remove_index_block arg to _create_from api #120548
  • Remove index blocks by default in create_from #120643
  • Run TransportGetComponentTemplateAction on local node #116868
  • Run TransportGetComposableIndexTemplate on local node #119830
  • Run TransportGetIndexTemplateAction on local node #119837
  • introduce new categories for deprecated resources in deprecation API #120505
Inference
  • Add version prefix to Inference Service API path #117095
  • Remove Elastic Inference Service feature flag and deprecated setting #120842
  • Update sparse text embeddings API route for Inference Service #118025
  • [Elastic Inference Service] Add ElasticInferenceService Unified ChatCompletions Integration #118871
Infra/CLI
  • Strengthen encryption for elasticsearch-keystore tool to AES 256 #119749
Infra/Circuit Breakers
  • Add link to Circuit Breaker "Data too large" exception message #113561
Infra/Core
  • Add support for specifying reindexing script for system index migration #119001
  • Change default Docker image to be based on UBI minimal instead of Ubuntu #116739
Infra/Metrics
  • Add ensureGreen test method for use with adminClient #113425
Infra/REST API
  • A new query parameter ?include_source_on_error was added for create / index, update and bulk REST APIs to control if to include the document source in the error response in case of parsing errors. The default value is true. #120725
Infra/Scripting
  • Add a mustache.max_output_size_bytes setting to limit the length of results from mustache scripts #114002
Infra/Settings
  • Introduce IndexSettingDeprecatedInV8AndRemovedInV9 Setting property #120334
  • Run TransportClusterGetSettingsAction on local node #119831
Ingest Node
  • Optimize IngestCtxMap construction #120833
  • Optimize IngestDocMetadata isAvailable #120753
  • Optimize IngestDocument FieldPath allocation #120573
  • Optimize some per-document hot paths in the geoip processor #120824
  • Returning ignored fields in the simulate ingest API #117214
  • Run GetPipelineTransportAction on local node #120445
  • Run TransportGetEnrichPolicyAction on local node #121124
  • Run template simulation actions on local node #120038
License
  • Bump TrialLicenseVersion to allow starting new trial on 9.0 #120198
Logs
  • Add LogsDB option to route on sort fields #116687
  • Add a new index setting to skip recovery source when synthetic source is enabled #114618
  • Configure index sorting through index settings for logsdb #118968 (issue: #118686)
  • Optimize loading mappings when determining synthetic source usage and whether host.name can be sorted on. #120055
Machine Learning
  • Add DeBERTa-V2/V3 tokenizer #111852
  • Add Inference Unified API for chat completions for OpenAI #117589
  • Add Jina AI API to do inference for Embedding and Rerank models #118652
  • Add enterprise license check for Inference API actions #119893
  • Adding chunking settings to IbmWatsonxService #114914
  • Adding default endpoint for Elastic Rerank #117939
  • Adding endpoint creation validation for all task types to remaining services #115020
  • Check for presence of error object when validating streaming responses from integrations in the inference API #118375
  • Ignore failures from renormalizing buckets in read-only index #118674
  • Inference duration and error metrics #115876
  • Migrate stream to core error parsing #120722
  • Remove all mentions of eis and gateway and deprecate flags that do #116692
  • Remove deprecated sort from reindex operation within dataframe analytics procedure #117606
  • Retry on ClusterBlockException on transform destination index #118194
  • [Inference API] fix spell words: covertToString to convertToString #119922
Mapping
  • Add Optional Source Filtering to Source Loaders #113827
Network
  • Allow http unsafe buffers by default #116115
  • Http stream activity tracker and exceptions handling #119564
  • Remove HTTP content copies #117303
  • ConnectTransportException returns retryable BAD_GATEWAY #118681 (issue: #118320)
Ranking
  • Set default reranker for text similarity reranker to Elastic reranker #120551
Recovery
  • Allow archive and searchable snapshots indices in N-2 version #118941
  • Trigger merges after recovery #113102
Reindex
  • Change Reindexing metrics unit from millis to seconds #115721
Search
  • Add match support for semantic_text fields #117839
  • Add support for sparse_vector queries against semantic_text fields #118617
  • Add support for knn vector queries on semantic_text fields #119011
  • Adding linear retriever to support weighted sums of sub-retrievers #120222
  • Address and remove any references of RestApiVersion version 7 #117572
  • Feat: add a user-configurable timeout parameter to the _resolve/cluster API #120542
  • Make semantic text part of the text family #119792
  • Only aggregations require at least one shard request #115314
  • Prevent data nodes from sending stack traces to coordinator when error_trace=false #118266
  • Propagate status codes from shard failures appropriately #118016 (issue: #118482)
Security
  • Add refresh .security index call between security migrations #114879
Snapshot/Restore
  • Add IMDSv2 support to repository-s3 #117748 (issue: #105135)
  • Expose operation and request counts separately in repository stats #117530 (issue: #104443)
  • Retry S3BlobContainer#getRegister on all exceptions #114813
  • Retry internally when CAS upload is throttled [GCS] #120250 (issue: #116546)
  • Track shard snapshot progress during node shutdown #112567
Suggesters
  • Extensible Completion Postings Formats #111494
TSDB
  • Increase field limit for OTel metrics to 10 000 #120591
Transform
  • Add support for extended_stats #120340
  • Auto-migrate max_page_search_size #119348
  • Create upgrade mode #117858
  • Wait while index is blocked #119542
  • [Deprecation] Add transform_ids to outdated index #120821
Vector Search
  • Even better(er) binary quantization #117994
  • Speed up bit compared with floats or bytes script operations #117199
New features
edit
CRUD
  • Metrics for indexing failures due to version conflicts #119067
ES|QL
  • ESQL - Add Match function options #120360
  • ESQL - Allow full text functions disjunctions for non-full text functions #120291
  • ESQL: Enable async get to support formatting #111104 (issue: #110926)
  • Expand type compatibility for match function and operator #117555
  • ST_EXTENT aggregation #117451 (issue: #104659)
  • Support ST_ENVELOPE and related (ST_XMIN, ST_XMAX, ST_YMIN, ST_YMAX) functions #116964 (issue: #104875)
Extract&Transform
  • [Connector API] Support hard deletes with new URL param in delete endpoint #120200
  • [Connector API] Support soft-deletes of connectors #118669
  • [Connector APIs] Enforce index prefix for managed connectors #117778
Highlighting
  • Add Highlighter for Semantic Text Fields #118064
Infra/Core
  • Infrastructure for assuming cluster features in the next major version #118143
Machine Learning
  • ES|QL categorize with multiple groupings #118173
  • Support mTLS for the Elastic Inference Service integration inside the inference API #119679
  • [Inference API] Add node-local rate limiting for the inference API #120400
Mapping
  • Add option to store sparse_vector outside _source #117917
Ranking
  • Add a generic rescorer retriever based on the search request’s rescore functionality #118585 (issue: #118327)
Relevance
  • Add Multi-Field Support for Semantic Text Fields #120128
Vector Search
  • Add new experimental rank_vectors mapping for late-interaction second order ranking #118804
  • KNN vector rescoring for quantized vectors #116663
  • Mark bbq indices as GA and add rolling upgrade integration tests #121105
Upgrades
edit
Infra/Core
  • Bump major version for feature migration system indices #117243
  • Update ASM 9.7 → 9.7.1 to support JDK 24 #118094
Machine Learning
  • Automatically rollover legacy .ml-anomalies indices #120913
  • Automatically rollover legacy ml indices #120405
  • Change the auditor to write via an alias #120064
Search