diff --git a/docs/reference/cluster/update-settings.asciidoc b/docs/reference/cluster/update-settings.asciidoc index 6ec8753c0b192..ca3d100e31e06 100644 --- a/docs/reference/cluster/update-settings.asciidoc +++ b/docs/reference/cluster/update-settings.asciidoc @@ -128,5 +128,3 @@ PUT /_cluster/settings } } -------------------------------------------------- - - diff --git a/docs/reference/migration/index.asciidoc b/docs/reference/migration/index.asciidoc index c9b5c5b72b1d0..11aca45b003fa 100644 --- a/docs/reference/migration/index.asciidoc +++ b/docs/reference/migration/index.asciidoc @@ -1,8 +1,6 @@ include::migration_intro.asciidoc[] - * <> - include::migrate_9_0.asciidoc[] diff --git a/docs/reference/migration/migrate_9_0.asciidoc b/docs/reference/migration/migrate_9_0.asciidoc index 9954d8fa3610a..fb8729d8ec785 100644 --- a/docs/reference/migration/migrate_9_0.asciidoc +++ b/docs/reference/migration/migrate_9_0.asciidoc @@ -4,12 +4,14 @@ 9.0 ++++ -// see https://www.elastic.co/guide/en/elasticsearch/reference/8.0/migrating-8.0.html for example formatting This section discusses the changes that you need to be aware of when migrating your application to {es} 9.0. See also <> and <>. +coming::[9.0.0] + + [discrete] [[breaking-changes-9.0]] === Breaking changes @@ -19,19 +21,294 @@ and prevent them from operating normally. Before upgrading to 9.0, review these changes and take the described steps to mitigate the impact. +[discrete] +[[breaking_90_mapping_changes]] +==== Mapping changes + +[[jdk_locale_database_change]] +.JDK locale database change +[%collapsible] +==== +*Details* + +{es} 8.16 changes the version of the JDK that is included from version 22 to version 23. This changes the locale database that is used by Elasticsearch from the COMPAT database to the CLDR database. This change can cause significant differences to the textual date formats accepted by Elasticsearch, and to calculated week-dates. + +If you run {es} 8.16 on JDK version 22 or below, it will use the COMPAT locale database to match the behavior of 8.15. However, starting with {es} 9.0, {es} will use the CLDR database regardless of JDK version it is run on. + +*Impact* + +This affects you if you use custom date formats using textual or week-date field specifiers. If you use date fields or calculated week-dates that change between the COMPAT and CLDR databases, then this change will cause Elasticsearch to reject previously valid date fields as invalid data. You might need to modify your ingest or output integration code to account for the differences between these two JDK versions. + +Starting in version 8.15.2, Elasticsearch will log deprecation warnings if you are using date format specifiers that might change on upgrading to JDK 23. These warnings are visible in Kibana. + +//<> was in the original text, but it is not a valid link. +For detailed guidance, refer to the https://ela.st/jdk-23-locales[Elastic blog]. +==== + +[discrete] +[[breaking_90_analysis_changes]] +==== Analysis changes + + +[[set_lenient_to_true_by_default_when_using_updateable_synonyms]] +.Set lenient to true by default when using updateable synonyms +[%collapsible] +==== +*Details* + +When a `synonym` or `synonym_graph` token filter is configured with `updateable: true`, the default `lenient` +value will now be `true`. + +*Impact* + +`synonym` or `synonym_graph` token filters configured with `updateable: true` will ignore invalid synonyms by +default. This prevents shard initialization errors on invalid synonyms. +==== + +[[snowball_stemmers_have_been_upgraded]] +.Snowball stemmers have been upgraded +[%collapsible] +==== +*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. +==== + +[[german2_snowball_stemmer_an_alias_for_german_stemmer]] +.The "german2" snowball stemmer is now an alias for the "german" stemmer +[%collapsible] +==== +*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. +==== + +[[persian_analyzer_has_stemmer_by_default]] +.The 'persian' analyzer has stemmer by default +[%collapsible] +==== +*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 https://www.elastic.co/guide/en/elasticsearch/reference/8.15/analysis-lang-analyzer.html#persian-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 https://www.elastic.co/guide/en/elasticsearch/reference/8.15/analysis-lang-analyzer.html#persian-analyzer. +==== + +[[korean_dictionary_for_nori_has_been_updated]] +.The Korean dictionary for Nori has been updated +[%collapsible] +==== +*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. +==== + +[discrete] +[[breaking_90_cluster_and_node_setting_changes]] +==== Cluster and node setting changes + +[[remove_unsupported_legacy_value_for_discovery_type]] +.Remove unsupported legacy value for `discovery.type` +[%collapsible] +==== +*Details* + +Earlier versions of {es} 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. +==== + +[discrete] +[[breaking_90_es_ql_changes]] +==== ES|QL changes + +[[esql_entirely_remove_meta_functions]] +.ESQL: Entirely remove META FUNCTIONS +[%collapsible] +==== +*Details* + +Removes an undocumented syntax from ESQL: META FUNCTION. This was never +reliable or really useful. Consult the documentation instead. + +*Impact* + +Removes an undocumented syntax from ESQL: META FUNCTION +==== [discrete] -[[deprecated-8.0]] +[[breaking_90_rest_api_changes]] +==== REST API changes + +[[remove_cluster_state_from_cluster_reroute_response]] +.Remove cluster state from `/_cluster/reroute` response +[%collapsible] +==== +*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]] +.Remove deprecated local attribute from alias APIs +[%collapsible] +==== +*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. +==== + +[[reworking_rrf_retriever_to_be_evaluated_during_rewrite_phase]] +.Reworking RRF retriever to be evaluated during rewrite phase +[%collapsible] +==== +*Details* + +In this release (8.16), we have introduced major changes to the retrievers framework +and how they can be evaluated, focusing mainly on compound retrievers +like `rrf` and `text_similarity_reranker`, which allowed us to support full +composability (i.e. any retriever can be nested under any compound retriever), +as well as supporting additional search features like collapsing, explaining, +aggregations, and highlighting. + +To ensure consistency, and given that this rework is not available until 8.16, +`rrf` and `text_similarity_reranker` retriever queries would now +throw an exception in a mixed cluster scenario, where there are nodes +both in current or later (i.e. >= 8.16) and previous ( <= 8.15) versions. + +As part of the rework, we have also removed the `_rank` property from +the responses of an `rrf` retriever. + +*Impact* + +- Users will not be able to use the `rrf` and `text_similarity_reranker` retrievers in a mixed cluster scenario +with previous releases (i.e. prior to 8.16), and the request will throw an `IllegalArgumentException`. +- `_rank` has now been removed from the output of the `rrf` retrievers so trying to directly parse the field +will throw an exception +==== + +[[update_data_stream_lifecycle_telemetry_to_track_global_retention]] +.Update data stream lifecycle telemetry to track global retention +[%collapsible] +==== +*Details* + +In this release we introduced global retention settings that fulfil the following criteria: + +- a data stream managed by the data stream lifecycle, +- a data stream that is not an internal data stream. + +As a result, we defined different types of retention: + +- **data retention**: the retention configured on data stream level by the data stream user or owner +- **default global retention:** the retention configured by an admin on a cluster level and applied to any +data stream that doesn't have data retention and fulfils the criteria. +- **max global retention:** the retention configured by an admin to guard against having long retention periods. +Any data stream that fulfills the criteria will adhere to the data retention unless it exceeds the max retention, +in which case the max global retention applies. +- **effective retention:** the retention that applies on the data stream that fulfill the criteria at a given moment +in time. It takes into consideration all the retention above and resolves it to the retention that will take effect. + +Considering the above changes, having a field named `retention` in the usage API was confusing. For this reason, we +renamed it to `data_retention` and added telemetry about the other configurations too. + +*Impact* + +Users that use the field `data_lifecycle.retention` should use the `data_lifecycle.data_retention` +==== + + +[discrete] +[[deprecated-9.0]] === Deprecations The following functionality has been deprecated in {es} 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 take the described steps to update your code +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 <>. +[discrete] +[[deprecations_90_analysis]] +==== Analysis deprecations + +[[deprecate_dutch_kp_lovins_stemmer_as_they_are_removed_in_lucene_10]] +.Deprecate dutch_kp and lovins stemmer as they are removed in Lucene 10 +[%collapsible] +==== +*Details* + +kp, dutch_kp, dutchKp and lovins stemmers are deprecated and will be removed. + +*Impact* + +These stemmers will be removed and will be no longer supported. +==== + +[[deprecate_edge_ngram_side_parameter]] +.deprecate `edge_ngram` side parameter +[%collapsible] +==== +*Details* + +edge_ngram will no longer accept the side parameter. + +*Impact* + +Users will need to update any usage of edge_ngram token filter that utilizes `side`. If the `back` value was used, they can achieve the same behavior by using the `reverse` token filter. +==== + +[discrete] +[[deprecations_90_crud]] +==== CRUD deprecations + +[[deprecate_dot_prefixed_indices_composable_template_index_patterns]] +.Deprecate dot-prefixed indices and composable template index patterns +[%collapsible] +==== +*Details* + +Indices beginning with a dot '.' are reserved for system and internal indices, and should not be used by and end-user. Additionally, composable index templates that contain patterns for dot-prefixed indices should also be avoided, as these patterns are meant for internal use only. In a future Elasticsearch version, creation of these dot-prefixed indices will no longer be allowed. + +*Impact* + +Requests performing an action that would create an index beginning with a dot (indexing a document, manual creation, reindex), or creating an index template with index patterns beginning with a dot, will contain a deprecation header warning about dot-prefixed indices in the response. +==== + +[discrete] +[[deprecations_90_rest_api]] +==== REST API deprecations + +[[adding_deprecation_warnings_for_rrf_using_rank_sub_searches]] +.Adding deprecation warnings for rrf using rank and `sub_searches` +[%collapsible] +==== +*Details* + +Search API parameter `sub_searches` will no longer be a supported and will be removed in future releases. Similarly, `rrf` can only be used through the specified `retriever` and no longer though the `rank` parameter + +*Impact* + +Requests specifying rrf through `rank` and/or `sub_searches` elements will be disallowed in a future version. Users should instead utilize the new `retriever` parameter. +==== + +[[deprecate_legacy_params_from_range_query]] +.Deprecate legacy params from range query +[%collapsible] +==== +*Details* + +Range query will not longer accept `to`, `from`, `include_lower`, and `include_upper` parameters. + +*Impact* + +Instead use `gt`, `gte`, `lt` and `lte` parameters. +==== + +[[inference_api_deprecate_elser_service]] +.[Inference API] Deprecate elser service +[%collapsible] +==== +*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. +==== -include::transient-settings-migration-guide.asciidoc[] +include::migrate_9_0/transient-settings-migration-guide.asciidoc[] +//TODO: fix this: below is showing up as a new section in the transient-settings-migration-guide +include::migrate_9_0/rest-api-changes.asciidoc[] diff --git a/docs/reference/migration/migrate_9_0/rest-api-changes.asciidoc b/docs/reference/migration/migrate_9_0/rest-api-changes.asciidoc index 661706adc3453..fc6fc7c011a22 100644 --- a/docs/reference/migration/migrate_9_0/rest-api-changes.asciidoc +++ b/docs/reference/migration/migrate_9_0/rest-api-changes.asciidoc @@ -1,5 +1,5 @@ [discrete] -[[breaking_90_rest_api_changes]] -==== REST API changes +[[migrate_rest_api_changes]] +=== REST API changes //See https://www.elastic.co/guide/en/elasticsearch/reference/8.0/migrating-8.0.html#breaking_80_rest_api_changes for formatting examples diff --git a/docs/reference/migration/transient-settings-migration-guide.asciidoc b/docs/reference/migration/migrate_9_0/transient-settings-migration-guide.asciidoc similarity index 100% rename from docs/reference/migration/transient-settings-migration-guide.asciidoc rename to docs/reference/migration/migrate_9_0/transient-settings-migration-guide.asciidoc diff --git a/docs/reference/release-notes.asciidoc b/docs/reference/release-notes.asciidoc index 50a2e48145b27..615e7135365cd 100644 --- a/docs/reference/release-notes.asciidoc +++ b/docs/reference/release-notes.asciidoc @@ -8,10 +8,7 @@ This section summarizes the changes in each release. * <> - -- - include::release-notes/9.0.0.asciidoc[] - diff --git a/docs/reference/release-notes/9.0.0.asciidoc b/docs/reference/release-notes/9.0.0.asciidoc index b129e56c9dbed..c042b2831d926 100644 --- a/docs/reference/release-notes/9.0.0.asciidoc +++ b/docs/reference/release-notes/9.0.0.asciidoc @@ -1,49 +1,554 @@ [[release-notes-9.0.0]] == {es} version 9.0.0 -The following list are changes in 9.0.0 as compared to the latest 8.x release. This combines all -release notes from the 9.0.0 pre-releases (alpha,beta,rc). +coming[9.0.0] Also see <>. -//See https://www.elastic.co/guide/en/elasticsearch/reference/8.0/migrating-8.0.html#breaking-changes-8.0 for example formatting - -[[known-issues-9.0.0]] -[float] -=== Known issues - - [[breaking-9.0.0]] [float] === Breaking changes +Allocation:: +* Remove cluster state from `/_cluster/reroute` response {es-pull}114231[#114231] (issue: {es-issue}88978[#88978]) + +Analysis:: +* Set lenient to true by default when using updateable synonyms {es-pull}110901[#110901] +* Snowball stemmers have been upgraded {es-pull}114146[#114146] +* The 'german2' stemmer is now an alias for the 'german' snowball stemmer {es-pull}113614[#113614] +* The 'persian' analyzer has stemmer by default {es-pull}113482[#113482] (issue: {es-issue}113050[#113050]) +* The Korean dictionary for Nori has been updated {es-pull}114124[#114124] + +Cluster Coordination:: +* Remove unsupported legacy value for `discovery.type` {es-pull}112903[#112903] + +Data streams:: +* Update data stream lifecycle telemetry to track global retention {es-pull}112451[#112451] -[[breaking-java-9.0.0]] +ES|QL:: +* ESQL: Entirely remove META FUNCTIONS {es-pull}113967[#113967] + +Indices APIs:: +* Remove deprecated local attribute from alias APIs {es-pull}115393[#115393] + +Mapping:: +* JDK locale database change {es-pull}113975[#113975] + +Search:: +* Adding breaking change entry for retrievers {es-pull}115399[#115399] + +[[bug-9.0.0]] [float] -=== Breaking Java changes -[[breaking-rest-9.0.0]] +=== Bug fixes + +Aggregations:: +* Always check the parent breaker with zero bytes in `PreallocatedCircuitBreakerService` {es-pull}115181[#115181] +* Force using the last centroid during merging {es-pull}111644[#111644] (issue: {es-issue}111065[#111065]) + +Authentication:: +* Check for disabling own user in Put User API {es-pull}112262[#112262] (issue: {es-issue}90205[#90205]) +* Expose cluster-state role mappings in APIs {es-pull}114951[#114951] + +Authorization:: +* Fix DLS & FLS sometimes being enforced when it is disabled {es-pull}111915[#111915] (issue: {es-issue}94709[#94709]) +* Fix DLS using runtime fields and synthetic source {es-pull}112341[#112341] + +CRUD:: +* Don't fail retention lease sync actions due to capacity constraints {es-pull}109414[#109414] (issue: {es-issue}105926[#105926]) +* Preserve thread context when waiting for segment generation in RTG {es-pull}114623[#114623] +* Standardize error code when bulk body is invalid {es-pull}114869[#114869] + +Cluster Coordination:: +* Ensure clean thread context in `MasterService` {es-pull}114512[#114512] + +Data streams:: +* Adding support for data streams with a match-all template {es-pull}111311[#111311] (issue: {es-issue}111204[#111204]) +* Exclude internal data streams from global retention {es-pull}112100[#112100] +* Fix verbose get data stream API not requiring extra privileges {es-pull}112973[#112973] +* OTel mappings: avoid metrics to be rejected when attributes are malformed {es-pull}114856[#114856] +* [otel-data] Add more kubernetes aliases {es-pull}115429[#115429] +* logs-apm.error-*: define log.level field as keyword {es-pull}112440[#112440] + +Distributed:: +* Handle `InternalSendException` inline for non-forking handlers {es-pull}114375[#114375] + +EQL:: +* Don't use a `BytesStreamOutput` to copy keys in `BytesRefBlockHash` {es-pull}114819[#114819] (issue: {es-issue}114599[#114599]) +* Fix validation of TEXT fields with case insensitive comparison {es-pull}111238[#111238] (issue: {es-issue}111235[#111235]) + +ES|QL:: +* ESQL: Add Values aggregation tests, fix `ConstantBytesRefBlock` memory handling {es-pull}111367[#111367] +* ESQL: Align year diffing to the rest of the units in DATE_DIFF: chronological {es-pull}113103[#113103] (issue: {es-issue}112482[#112482]) +* ESQL: Disable pushdown of WHERE past STATS {es-pull}115308[#115308] (issue: {es-issue}115281[#115281]) +* ESQL: Fix CASE when conditions are multivalued {es-pull}112401[#112401] (issue: {es-issue}112359[#112359]) +* ESQL: Fix Double operations returning infinite {es-pull}111064[#111064] (issue: {es-issue}111026[#111026]) +* ESQL: Fix `REVERSE` with backspace character {es-pull}115245[#115245] (issues: {es-issue}114372[#114372], {es-issue}115227[#115227], {es-issue}115228[#115228]) +* ESQL: Fix a bug in `MV_PERCENTILE` {es-pull}112218[#112218] (issues: {es-issue}112193[#112193], {es-issue}112180[#112180], {es-issue}112187[#112187], {es-issue}112188[#112188]) +* ESQL: Fix filtered grouping on ords {es-pull}115312[#115312] (issue: {es-issue}114897[#114897]) +* ESQL: Fix grammar changes around per agg filtering {es-pull}114848[#114848] +* ESQL: Fix serialization during `can_match` {es-pull}111779[#111779] (issues: {es-issue}111701[#111701], {es-issue}111726[#111726]) +* ESQL: Fix synthetic attribute pruning {es-pull}111413[#111413] (issue: {es-issue}105821[#105821]) +* ESQL: don't lose the original casting error message {es-pull}111968[#111968] (issue: {es-issue}111967[#111967]) +* ESQL: fix for missing indices error message {es-pull}111797[#111797] (issue: {es-issue}111712[#111712]) +* ES|QL: Fix stats by constant expression {es-pull}114899[#114899] +* ES|QL: Restrict sorting for `_source` and counter field types {es-pull}114638[#114638] (issues: {es-issue}114423[#114423], {es-issue}111976[#111976]) +* ES|QL: better validation for GROK patterns {es-pull}110574[#110574] (issue: {es-issue}110533[#110533]) +* ES|QL: better validation for RLIKE patterns {es-pull}112489[#112489] (issue: {es-issue}112485[#112485]) +* ES|QL: better validation of GROK patterns {es-pull}112200[#112200] (issue: {es-issue}112111[#112111]) +* Fix ST_CENTROID_AGG when no records are aggregated {es-pull}114888[#114888] (issue: {es-issue}106025[#106025]) +* Fix TDigestState.read CB leaks {es-pull}114303[#114303] (issue: {es-issue}114194[#114194]) +* Spatial search functions support multi-valued fields in compute engine {es-pull}112063[#112063] (issues: {es-issue}112102[#112102], {es-issue}112505[#112505], {es-issue}110830[#110830]) +* [ES|QL] Check expression resolved before checking its data type in `ImplicitCasting` {es-pull}113314[#113314] (issue: {es-issue}113242[#113242]) +* [ES|QL] Simplify patterns for subfields {es-pull}111118[#111118] +* [ES|QL] Simplify syntax of named parameter for identifier and pattern {es-pull}115061[#115061] +* [ES|QL] Skip validating remote cluster index names in parser {es-pull}114271[#114271] +* [ES|QL] Use `RangeQuery` and String in `BinaryComparison` on datetime fields {es-pull}110669[#110669] (issue: {es-issue}107900[#107900]) +* [ES|QL] add tests for stats by constant {es-pull}110593[#110593] (issue: {es-issue}105383[#105383]) +* [ES|QL] make named parameter for identifier and pattern snapshot {es-pull}114784[#114784] +* [ES|QL] validate `mv_sort` order {es-pull}110021[#110021] (issue: {es-issue}109910[#109910]) + +Geo:: +* Fix cases of collections with one point {es-pull}111193[#111193] (issue: {es-issue}110982[#110982]) + +Health:: +* Set `replica_unassigned_buffer_time` in constructor {es-pull}112612[#112612] + +ILM+SLM:: +* Make `SnapshotLifecycleStats` immutable so `SnapshotLifecycleMetadata.EMPTY` isn't changed as side-effect {es-pull}111215[#111215] + +Indices APIs:: +* Revert "Add `ResolvedExpression` wrapper" {es-pull}115317[#115317] +Infra/Core:: +* Fix max file size check to use `getMaxFileSize` {es-pull}113723[#113723] (issue: {es-issue}113705[#113705]) +* Guard blob store local directory creation with `doPrivileged` {es-pull}115459[#115459] +* Handle `BigInteger` in xcontent copy {es-pull}111937[#111937] (issue: {es-issue}111812[#111812]) +* Report JVM stats for all memory pools (97046) {es-pull}115117[#115117] (issue: {es-issue}97046[#97046]) +* `ByteArrayStreamInput:` Return -1 when there are no more bytes to read {es-pull}112214[#112214] + +Infra/Logging:: +* Only emit product origin in deprecation log if present {es-pull}111683[#111683] (issue: {es-issue}81757[#81757]) + +Infra/Metrics:: +* Make `randomInstantBetween` always return value in range [minInstant, `maxInstant]` {es-pull}114177[#114177] + +Infra/REST API:: +* Fixed a `NullPointerException` in `_capabilities` API when the `path` parameter is null. {es-pull}113413[#113413] (issue: {es-issue}113413[#113413]) + +Infra/Settings:: +* GET _cluster/settings with include_defaults returns the expected fallback value if defined in elasticsearch.yml {es-pull}110816[#110816] (issue: {es-issue}110815[#110815]) + +Ingest Node:: +* Add warning headers for ingest pipelines containing special characters {es-pull}114837[#114837] (issue: {es-issue}104411[#104411]) +* Fix IPinfo geolocation schema {es-pull}115147[#115147] +* Fix `getDatabaseType` for unusual MMDBs {es-pull}112888[#112888] +* Reducing error-level stack trace logging for normal events in `GeoIpDownloader` {es-pull}114924[#114924] + +License:: +* Fix Start Trial API output acknowledgement header for features {es-pull}111740[#111740] (issue: {es-issue}111739[#111739]) +* Fix `TokenService` always appearing used in Feature Usage {es-pull}112263[#112263] (issue: {es-issue}61956[#61956]) + +Logs:: +* Do not expand dots when storing objects in ignored source {es-pull}113910[#113910] +* Fix `ignore_above` handling in synthetic source when index level setting is used {es-pull}113570[#113570] (issue: {es-issue}113538[#113538]) +* Fix synthetic source for flattened field when used with `ignore_above` {es-pull}113499[#113499] (issue: {es-issue}112044[#112044]) + +Machine Learning:: +* Avoid `ModelAssignment` deadlock {es-pull}109684[#109684] +* Fix NPE in Get Deployment Stats {es-pull}115404[#115404] +* Fix bug in ML serverless autoscaling which prevented trained model updates from triggering a scale up {es-pull}110734[#110734] +* Ignore unrecognized openai sse fields {es-pull}114715[#114715] +* Mitigate IOSession timeouts {es-pull}115414[#115414] (issues: {es-issue}114385[#114385], {es-issue}114327[#114327], {es-issue}114105[#114105], {es-issue}114232[#114232]) +* Prevent NPE if model assignment is removed while waiting to start {es-pull}115430[#115430] +* Send mid-stream errors to users {es-pull}114549[#114549] +* Temporarily return both `modelId` and `inferenceId` for GET /_inference until we migrate clients to only `inferenceId` {es-pull}111490[#111490] +* Warn for model load failures if they have a status code <500 {es-pull}113280[#113280] +* [Inference API] Remove unused Cohere rerank service settings fields in a BWC way {es-pull}110427[#110427] +* [ML] Create Inference API will no longer return model_id and now only return inference_id {es-pull}112508[#112508] + +Mapping:: +* Fix `MapperBuilderContext#isDataStream` when used in dynamic mappers {es-pull}110554[#110554] +* Fix synthetic source field names for multi-fields {es-pull}112850[#112850] +* Retrieve the source for objects and arrays in a separate parsing phase {es-pull}113027[#113027] (issue: {es-issue}112374[#112374]) +* Two empty mappings now are created equally {es-pull}107936[#107936] (issue: {es-issue}107031[#107031]) + +Ranking:: +* Fix MLTQuery handling of custom term frequencies {es-pull}110846[#110846] +* Fix RRF validation for `rank_constant` < 1 {es-pull}112058[#112058] +* Fix score count validation in reranker response {es-pull}111212[#111212] (issue: {es-issue}111202[#111202]) + +Search:: +* Allow for querries on `_tier` to skip shards in the `can_match` phase {es-pull}114990[#114990] (issue: {es-issue}114910[#114910]) +* Allow out of range term queries for numeric types {es-pull}112916[#112916] +* Do not exclude empty arrays or empty objects in source filtering {es-pull}112250[#112250] (issue: {es-issue}109668[#109668]) +* Fix synthetic source handling for `bit` type in `dense_vector` field {es-pull}114407[#114407] (issue: {es-issue}114402[#114402]) +* Improve DateTime error handling and add some bad date tests {es-pull}112723[#112723] (issue: {es-issue}112190[#112190]) +* Improve date expression/remote handling in index names {es-pull}112405[#112405] (issue: {es-issue}112243[#112243]) +* Make "too many clauses" throw IllegalArgumentException to avoid 500s {es-pull}112678[#112678] (issue: {es-issue}112177[#112177]) +* Make empty string searches be consistent with case (in)sensitivity {es-pull}110833[#110833] +* Prevent flattening of ordered and unordered interval sources {es-pull}114234[#114234] +* Remove needless forking to GENERIC in `TransportMultiSearchAction` {es-pull}110796[#110796] +* Search/Mapping: KnnVectorQueryBuilder support for allowUnmappedFields {es-pull}107047[#107047] (issue: {es-issue}106846[#106846]) +* Span term query to convert to match no docs when unmapped field is targeted {es-pull}113251[#113251] +* Speedup `CanMatchPreFilterSearchPhase` constructor {es-pull}110860[#110860] +* Updated Date Range to Follow Documentation When Assuming Missing Values {es-pull}112258[#112258] (issue: {es-issue}111484[#111484]) + +Security:: +* Updated the transport CA name in Security Auto-Configuration. {es-pull}106520[#106520] (issue: {es-issue}106455[#106455]) + +Snapshot/Restore:: +* Retry throttled snapshot deletions {es-pull}113237[#113237] + +TSDB:: +* Implement `parseBytesRef` for `TimeSeriesRoutingHashFieldType` {es-pull}113373[#113373] (issue: {es-issue}112399[#112399]) + +Task Management:: +* Improve handling of failure to create persistent task {es-pull}114386[#114386] + +Transform:: +* Allow task canceling of validate API calls {es-pull}110951[#110951] +* Include reason when no nodes are found {es-pull}112409[#112409] (issue: {es-issue}112404[#112404]) + +Vector Search:: +* Fix dim validation for bit `element_type` {es-pull}114533[#114533] +* Support semantic_text in object fields {es-pull}114601[#114601] (issue: {es-issue}114401[#114401]) + +Watcher:: +* Truncating watcher history if it is too large {es-pull}111245[#111245] (issue: {es-issue}94745[#94745]) +* Watch Next Run Interval Resets On Shard Move or Node Restart {es-pull}115102[#115102] (issue: {es-issue}111433[#111433]) [[deprecation-9.0.0]] [float] === Deprecations -[[feature-9.0.0]] -[float] -=== New features +Analysis:: +* Deprecate dutch_kp and lovins stemmer as they are removed in Lucene 10 {es-pull}113143[#113143] +* deprecate `edge_ngram` side parameter {es-pull}110829[#110829] + +CRUD:: +* Deprecate dot-prefixed indices and composable template index patterns {es-pull}112571[#112571] + +Machine Learning:: +* [Inference API] Deprecate elser service {es-pull}113216[#113216] + +Search:: +* Adding deprecation warnings for rrf using rank and `sub_searches` {es-pull}114854[#114854] +* Deprecate legacy params from range query {es-pull}113286[#113286] [[enhancement-9.0.0]] [float] === Enhancements -[[bug-9.0.0]] -[float] -=== Bug fixes +Aggregations:: +* Account for `DelayedBucket` before reduction {es-pull}113013[#113013] +* Add protection for OOM during aggregations partial reduction {es-pull}110520[#110520] +* Deduplicate `BucketOrder` when deserializing {es-pull}112707[#112707] +* Lower the memory footprint when creating `DelayedBucket` {es-pull}112519[#112519] +* Reduce heap usage for `AggregatorsReducer` {es-pull}112874[#112874] +* Remove reduce and `reduceContext` from `DelayedBucket` {es-pull}112547[#112547] + +Allocation:: +* Add link to flood-stage watermark exception message {es-pull}111315[#111315] +* Always allow rebalancing by default {es-pull}111015[#111015] +* Only publish desired balance gauges on master {es-pull}115383[#115383] + +Application:: +* [Profiling] add `container.id` field to event index template {es-pull}111969[#111969] + +Authorization:: +* Add manage roles privilege {es-pull}110633[#110633] +* Add privileges required for CDR misconfiguration features to work on AWS SecurityHub integration {es-pull}112574[#112574] +* [Security Solution] Add `create_index` to `kibana_system` role for index/DS `.logs-endpoint.action.responses-*` {es-pull}115241[#115241] + +CRUD:: +* Suppress merge-on-recovery for older indices {es-pull}113462[#113462] + +Codec:: +* Remove zstd feature flag for index codec best compression {es-pull}112665[#112665] + +Data streams:: +* Add 'verbose' flag retrieving `maximum_timestamp` for get data stream API {es-pull}112303[#112303] +* Display effective retention in the relevant data stream APIs {es-pull}112019[#112019] +* Expose global retention settings via data stream lifecycle API {es-pull}112210[#112210] +* Make ecs@mappings work with OTel attributes {es-pull}111600[#111600] + +Distributed:: +* Add link to Max Shards Per Node exception message {es-pull}110993[#110993] +* Use Azure blob batch API to delete blobs in batches {es-pull}114566[#114566] + +EQL:: +* ESQL: Delay construction of warnings {es-pull}114368[#114368] + +ES|QL:: +* Add EXP ES|QL function {es-pull}110879[#110879] +* Add `CircuitBreaker` to TDigest, Step 3: Connect with ESQL CB {es-pull}113387[#113387] +* Add `CircuitBreaker` to TDigest, Step 4: Take into account shallow classes size {es-pull}113613[#113613] (issue: {es-issue}113916[#113916]) +* Collect and display execution metadata for ES|QL cross cluster searches {es-pull}112595[#112595] (issue: {es-issue}112402[#112402]) +* ESQL: Add support for multivalue fields in Arrow output {es-pull}114774[#114774] +* ESQL: BUCKET: allow numerical spans as whole numbers {es-pull}111874[#111874] (issues: {es-issue}104646[#104646], {es-issue}109340[#109340], {es-issue}105375[#105375]) +* ESQL: Have BUCKET generate friendlier intervals {es-pull}111879[#111879] (issue: {es-issue}110916[#110916]) +* ESQL: Profile more timing information {es-pull}111855[#111855] +* ESQL: Push down filters even in case of renames in Evals {es-pull}114411[#114411] +* ESQL: Remove parent from `FieldAttribute` {es-pull}112881[#112881] +* ESQL: Speed up CASE for some parameters {es-pull}112295[#112295] +* ESQL: Speed up grouping by bytes {es-pull}114021[#114021] +* ESQL: Support INLINESTATS grouped on expressions {es-pull}111690[#111690] +* ESQL: Use less memory in listener {es-pull}114358[#114358] +* ES|QL: Add support for cached strings in plan serialization {es-pull}112929[#112929] +* ES|QL: add Telemetry API and track top functions {es-pull}111226[#111226] +* ES|QL: add metrics for functions {es-pull}114620[#114620] +* Enhance SORT push-down to Lucene to cover references to fields and ST_DISTANCE function {es-pull}112938[#112938] (issue: {es-issue}109973[#109973]) +* Siem ea 9521 improve test {es-pull}111552[#111552] +* Support multi-valued fields in compute engine for ST_DISTANCE {es-pull}114836[#114836] (issue: {es-issue}112910[#112910]) +* [ESQL] Add `SPACE` function {es-pull}112350[#112350] +* [ESQL] Add finish() elapsed time to aggregation profiling times {es-pull}113172[#113172] (issue: {es-issue}112950[#112950]) +* [ESQL] Make query wrapped by `SingleValueQuery` cacheable {es-pull}110116[#110116] +* [ES|QL] Add hypot function {es-pull}114382[#114382] +* [ES|QL] Cast mixed numeric types to a common numeric type for Coalesce and In at Analyzer {es-pull}111917[#111917] (issue: {es-issue}111486[#111486]) +* [ES|QL] Combine Disjunctive CIDRMatch {es-pull}111501[#111501] (issue: {es-issue}105143[#105143]) +* [ES|QL] Create `Range` in `PushFiltersToSource` for qualified pushable filters on the same field {es-pull}111437[#111437] +* [ES|QL] Name parameter with leading underscore {es-pull}111950[#111950] (issue: {es-issue}111821[#111821]) +* [ES|QL] Named parameter for field names and field name patterns {es-pull}112905[#112905] +* [ES|QL] Validate index name in parser {es-pull}112081[#112081] +* [ES|QL] add reverse function {es-pull}113297[#113297] +* [ES|QL] explicit cast a string literal to `date_period` and `time_duration` in arithmetic operations {es-pull}109193[#109193] + +Experiences:: +* Integrate IBM watsonx to Inference API for text embeddings {es-pull}111770[#111770] + +Geo:: +* Add support for spatial relationships in point field mapper {es-pull}112126[#112126] +* Small performance improvement in h3 library {es-pull}113385[#113385] +* Support docvalues only query in shape field {es-pull}112199[#112199] + +Health:: +* (API) Cluster Health report `unassigned_primary_shards` {es-pull}112024[#112024] +* Do not treat replica as unassigned if primary recently created and unassigned time is below a threshold {es-pull}112066[#112066] +* Increase `replica_unassigned_buffer_time` default from 3s to 5s {es-pull}112834[#112834] + +ILM+SLM:: +* ILM: Add `total_shards_per_node` setting to searchable snapshot {es-pull}112972[#112972] (issue: {es-issue}112261[#112261]) +* PUT slm policy should only increase version if actually changed {es-pull}111079[#111079] +* Preserve Step Info Across ILM Auto Retries {es-pull}113187[#113187] +* Register SLM run before snapshotting to save stats {es-pull}110216[#110216] +* SLM interval schedule followup - add back `getFieldName` style getters {es-pull}112123[#112123] + +Infra/Circuit Breakers:: +* Add link to Circuit Breaker "Data too large" exception message {es-pull}113561[#113561] + +Infra/Core:: +* Add nanos support to `ZonedDateTime` serialization {es-pull}111689[#111689] (issue: {es-issue}68292[#68292]) +* Extend logging for dropped warning headers {es-pull}111624[#111624] (issue: {es-issue}90527[#90527]) +* Give the kibana system user permission to read security entities {es-pull}114363[#114363] + +Infra/Metrics:: +* Add `TaskManager` to `pluginServices` {es-pull}112687[#112687] +* Add `ensureGreen` test method for use with `adminClient` {es-pull}113425[#113425] + +Infra/REST API:: +* Optimize the loop processing of URL decoding {es-pull}110237[#110237] (issue: {es-issue}110235[#110235]) + +Infra/Scripting:: +* Add a `mustache.max_output_size_bytes` setting to limit the length of results from mustache scripts {es-pull}114002[#114002] +* Expose `HexFormat` in Painless {es-pull}112412[#112412] + +Infra/Settings:: +* Improve exception message for bad environment variable placeholders in settings {es-pull}114552[#114552] (issue: {es-issue}110858[#110858]) +* Reprocess operator file settings when settings service starts, due to node restart or master node change {es-pull}114295[#114295] + +Ingest Node:: +* Add `size_in_bytes` to enrich cache stats {es-pull}110578[#110578] +* Add support for templates when validating mappings in the simulate ingest API {es-pull}111161[#111161] +* Adding `index_template_substitutions` to the simulate ingest API {es-pull}114128[#114128] +* Adding component template substitutions to the simulate ingest API {es-pull}113276[#113276] +* Adding mapping validation to the simulate ingest API {es-pull}110606[#110606] +* Adding support for additional mapping to simulate ingest API {es-pull}114742[#114742] +* Adding support for simulate ingest mapping adddition for indices with mappings that do not come from templates {es-pull}115359[#115359] +* Adds example plugin for custom ingest processor {es-pull}112282[#112282] (issue: {es-issue}111539[#111539]) +* Fix unnecessary mustache template evaluation {es-pull}110986[#110986] (issue: {es-issue}110191[#110191]) +* Listing all available databases in the _ingest/geoip/database API {es-pull}113498[#113498] +* Make enrich cache based on memory usage {es-pull}111412[#111412] (issue: {es-issue}106081[#106081]) +* Tag redacted document in ingest metadata {es-pull}113552[#113552] +* Verify Maxmind database types in the geoip processor {es-pull}114527[#114527] + +Logs:: +* Add validation for synthetic source mode in logs mode indices {es-pull}110677[#110677] +* Store original source for keywords using a normalizer {es-pull}112151[#112151] + +Machine Learning:: +* Add Completion Inference API for Alibaba Cloud AI Search Model {es-pull}112512[#112512] +* Add DeBERTa-V2/V3 tokenizer {es-pull}111852[#111852] +* Add Streaming Inference spec {es-pull}113812[#113812] +* Add chunking settings configuration to `CohereService,` `AmazonBedrockService,` and `AzureOpenAiService` {es-pull}113897[#113897] +* Add chunking settings configuration to `ElasticsearchService/ELSER` {es-pull}114429[#114429] +* Add custom rule parameters to force time shift {es-pull}110974[#110974] +* Adding chunking settings to `GoogleVertexAiService,` `AzureAiStudioService,` and `AlibabaCloudSearchService` {es-pull}113981[#113981] +* Adding chunking settings to `MistralService,` `GoogleAiStudioService,` and `HuggingFaceService` {es-pull}113623[#113623] +* Adds a new Inference API for streaming responses back to the user. {es-pull}113158[#113158] +* Create `StreamingHttpResultPublisher` {es-pull}112026[#112026] +* Create an ml node inference endpoint referencing an existing model {es-pull}114750[#114750] +* Default inference endpoint for ELSER {es-pull}113873[#113873] +* Default inference endpoint for the multilingual-e5-small model {es-pull}114683[#114683] +* Enable OpenAI Streaming {es-pull}113911[#113911] +* Filter empty task settings objects from the API response {es-pull}114389[#114389] +* Increase default `queue_capacity` to 10_000 and decrease max `queue_capacity` to 100_000 {es-pull}115041[#115041] +* Migrate Inference to `ChunkedToXContent` {es-pull}111655[#111655] +* Register Task while Streaming {es-pull}112369[#112369] +* Server-Sent Events for Inference response {es-pull}112565[#112565] +* Stream Anthropic Completion {es-pull}114321[#114321] +* Stream Azure Completion {es-pull}114464[#114464] +* Stream Bedrock Completion {es-pull}114732[#114732] +* Stream Cohere Completion {es-pull}114080[#114080] +* Stream Google Completion {es-pull}114596[#114596] +* Stream OpenAI Completion {es-pull}112677[#112677] +* Support sparse embedding models in the elasticsearch inference service {es-pull}112270[#112270] +* Switch default chunking strategy to sentence {es-pull}114453[#114453] +* Upgrade to AWS SDK v2 {es-pull}114309[#114309] (issue: {es-issue}110590[#110590]) +* Use the same chunking configurations for models in the Elasticsearch service {es-pull}111336[#111336] +* Validate streaming HTTP Response {es-pull}112481[#112481] +* Wait for allocation on scale up {es-pull}114719[#114719] +* [Inference API] Add Alibaba Cloud AI Search Model support to Inference API {es-pull}111181[#111181] +* [Inference API] Add Docs for AlibabaCloud AI Search Support for the Inference API {es-pull}111181[#111181] +* [Inference API] Introduce Update API to change some aspects of existing inference endpoints {es-pull}114457[#114457] +* [Inference API] Prevent inference endpoints from being deleted if they are referenced by semantic text {es-pull}110399[#110399] +* [Inference API] alibabacloud ai search service support chunk infer to support semantic_text field {es-pull}110399[#110399] + +Mapping:: +* Add Field caps support for Semantic Text {es-pull}111809[#111809] +* Add Lucene segment-level fields stats {es-pull}111123[#111123] +* Add Search Inference ID To Semantic Text Mapping {es-pull}113051[#113051] +* Add object param for keeping synthetic source {es-pull}113690[#113690] +* Add support for multi-value dimensions {es-pull}112645[#112645] (issue: {es-issue}110387[#110387]) +* Allow dimension fields to have multiple values in standard and logsdb index mode {es-pull}112345[#112345] (issues: {es-issue}112232[#112232], {es-issue}112239[#112239]) +* Allow fields with dots in sparse vector field mapper {es-pull}111981[#111981] (issue: {es-issue}109118[#109118]) +* Allow querying `index_mode` {es-pull}110676[#110676] +* Configure keeping source in `FieldMapper` {es-pull}112706[#112706] +* Control storing array source with index setting {es-pull}112397[#112397] +* Introduce mode `subobjects=auto` for objects {es-pull}110524[#110524] +* Update `semantic_text` field to support indexing numeric and boolean data types {es-pull}111284[#111284] +* Use ELSER By Default For Semantic Text {es-pull}113563[#113563] +* Use fallback synthetic source for `copy_to` and doc_values: false cases {es-pull}112294[#112294] (issues: {es-issue}110753[#110753], {es-issue}110038[#110038], {es-issue}109546[#109546]) + +Network:: +* Add links to network disconnect troubleshooting {es-pull}112330[#112330] + +Ranking:: +* Add timeout and cancellation check to rescore phase {es-pull}115048[#115048] -[[regression-9.0.0]] +Recovery:: +* Trigger merges after recovery {es-pull}113102[#113102] + +Relevance:: +* Add a query rules tester API call {es-pull}114168[#114168] + +Search:: +* Add initial support for `semantic_text` field type {es-pull}113920[#113920] +* Add more `dense_vector` details for cluster stats field stats {es-pull}113607[#113607] +* Add range and regexp Intervals {es-pull}111465[#111465] +* Adding support for `allow_partial_search_results` in PIT {es-pull}111516[#111516] +* Allow incubating Panama Vector in simdvec, and add vectorized `ipByteBin` {es-pull}112933[#112933] +* Avoid using concurrent collector manager in `LuceneChangesSnapshot` {es-pull}113816[#113816] +* Bool query early termination should also consider `must_not` clauses {es-pull}115031[#115031] +* Deduplicate Kuromoji User Dictionary {es-pull}112768[#112768] +* Multi term intervals: increase max_expansions {es-pull}112826[#112826] (issue: {es-issue}110491[#110491]) +* Search coordinator uses `event.ingested` in cluster state to do rewrites {es-pull}111523[#111523] +* Update cluster stats for retrievers {es-pull}114109[#114109] + +Security:: +* (logger) change from error to warn for short circuiting user {es-pull}112895[#112895] +* Add asset criticality indices for `kibana_system_user` {es-pull}113588[#113588] +* Add tier preference to security index settings allowlist {es-pull}111818[#111818] +* [Service Account] Add `AutoOps` account {es-pull}111316[#111316] + +Snapshot/Restore:: +* Add `max_multipart_parts` setting to S3 repository {es-pull}113989[#113989] +* Add support for Azure Managed Identity {es-pull}111344[#111344] +* Add telemetry for repository usage {es-pull}112133[#112133] +* Add workaround for missing shard gen blob {es-pull}112337[#112337] +* Clean up dangling S3 multipart uploads {es-pull}111955[#111955] (issues: {es-issue}101169[#101169], {es-issue}44971[#44971]) +* Execute shard snapshot tasks in shard-id order {es-pull}111576[#111576] (issue: {es-issue}108739[#108739]) +* Include account name in Azure settings exceptions {es-pull}111274[#111274] +* Introduce repository integrity verification API {es-pull}112348[#112348] (issue: {es-issue}52622[#52622]) +* Retry `S3BlobContainer#getRegister` on all exceptions {es-pull}114813[#114813] +* Track shard snapshot progress during node shutdown {es-pull}112567[#112567] + +Stats:: +* Track search and fetch failure stats {es-pull}113988[#113988] + +TSDB:: +* Add support for boolean dimensions {es-pull}111457[#111457] (issue: {es-issue}111338[#111338]) +* Stop iterating over all fields to extract @timestamp value {es-pull}110603[#110603] (issue: {es-issue}92297[#92297]) +* Support booleans in routing path {es-pull}111445[#111445] + +Vector Search:: +* Dense vector field types updatable for int4 {es-pull}110928[#110928] +* Use native scalar scorer for int8_flat index {es-pull}111071[#111071] + +[[feature-9.0.0]] [float] -=== Regressions +=== New features + +Data streams:: +* Introduce global retention in data stream lifecycle. {es-pull}111972[#111972] +* X-pack/plugin/otel: introduce x-pack-otel plugin {es-pull}111091[#111091] + +ES|QL:: +* Add ESQL match function {es-pull}113374[#113374] +* ESQL: Add `MV_PSERIES_WEIGHTED_SUM` for score calculations used by security solution {es-pull}109017[#109017] +* ESQL: Add async ID and `is_running` headers to ESQL async query {es-pull}111840[#111840] +* ESQL: Add boolean support to Max and Min aggs {es-pull}110527[#110527] +* ESQL: Add boolean support to TOP aggregation {es-pull}110718[#110718] +* ESQL: Added `mv_percentile` function {es-pull}111749[#111749] (issue: {es-issue}111591[#111591]) +* ESQL: INLINESTATS {es-pull}109583[#109583] (issue: {es-issue}107589[#107589]) +* ESQL: Introduce per agg filter {es-pull}113735[#113735] +* ESQL: Strings support for MAX and MIN aggregations {es-pull}111544[#111544] +* ESQL: Support IP fields in MAX and MIN aggregations {es-pull}110921[#110921] +* ESQL: TOP aggregation IP support {es-pull}111105[#111105] +* ESQL: TOP support for strings {es-pull}113183[#113183] (issue: {es-issue}109849[#109849]) +* ESQL: `mv_median_absolute_deviation` function {es-pull}112055[#112055] (issue: {es-issue}111590[#111590]) +* Remove snapshot build restriction for match and qstr functions {es-pull}114482[#114482] +* Search in ES|QL: Add MATCH operator {es-pull}110971[#110971] + +ILM+SLM:: +* SLM Interval based scheduling {es-pull}110847[#110847] + +Inference:: +* EIS integration {es-pull}111154[#111154] + +Ingest Node:: +* Add a `terminate` ingest processor {es-pull}114157[#114157] (issue: {es-issue}110218[#110218]) + +Machine Learning:: +* Inference autoscaling {es-pull}109667[#109667] +* Telemetry for inference adaptive allocations {es-pull}110630[#110630] + +Relevance:: +* [Query rules] Add `exclude` query rule type {es-pull}111420[#111420] + +Search:: +* Async search: Add ID and "is running" http headers {es-pull}112431[#112431] (issue: {es-issue}109576[#109576]) +* Cross-cluster search telemetry {es-pull}113825[#113825] + +Vector Search:: +* Adding new bbq index types behind a feature flag {es-pull}114439[#114439] [[upgrade-9.0.0]] [float] === Upgrades + +Infra/Core:: +* Upgrade xcontent to Jackson 2.17.0 {es-pull}111948[#111948] +* Upgrade xcontent to Jackson 2.17.2 {es-pull}112320[#112320] + +Infra/Metrics:: +* Update APM Java Agent to support JDK 23 {es-pull}115194[#115194] (issues: {es-issue}115101[#115101], {es-issue}115100[#115100]) + +Search:: +* Upgrade to Lucene 10 {es-pull}114741[#114741] +* Upgrade to Lucene 9.12 {es-pull}113333[#113333] + +Snapshot/Restore:: +* Upgrade Azure SDK {es-pull}111225[#111225] +* Upgrade `repository-azure` dependencies {es-pull}112277[#112277] + + diff --git a/docs/reference/release-notes/highlights.asciidoc b/docs/reference/release-notes/highlights.asciidoc index 021544bbdc1d0..160e852a7a5f4 100644 --- a/docs/reference/release-notes/highlights.asciidoc +++ b/docs/reference/release-notes/highlights.asciidoc @@ -1,6 +1,5 @@ -[chapter] [[release-highlights]] -= What's new in {minor-version} +== What's new in {minor-version} coming::[{minor-version}] @@ -9,18 +8,164 @@ ifeval::["{release-state}"!="unreleased"] For detailed information about this release, see the <> and <>. - endif::[] -// The notable-highlights tag marks entries that -// should be featured in the Stack Installation and Upgrade Guide: // tag::notable-highlights[] +[discrete] +[[esql_inlinestats]] +=== ESQL: INLINESTATS +This adds the `INLINESTATS` command to ESQL which performs a STATS and +then enriches the results into the output stream. So, this query: + +[source,esql] +---- +FROM test +| INLINESTATS m=MAX(a * b) BY b +| WHERE m == a * b +| SORT a DESC, b DESC +| LIMIT 3 +---- + +Produces output like: + +| a | b | m | +| --- | --- | ----- | +| 99 | 999 | 98901 | +| 99 | 998 | 98802 | +| 99 | 997 | 98703 | + +{es-pull}109583[#109583] + +[discrete] +[[always_allow_rebalancing_by_default]] +=== Always allow rebalancing by default +In earlier versions of {es} the `cluster.routing.allocation.allow_rebalance` setting defaults to +`indices_all_active` which blocks all rebalancing moves while the cluster is in `yellow` or `red` health. This was +appropriate for the legacy allocator which might do too many rebalancing moves otherwise. Today's allocator has +better support for rebalancing a cluster that is not in `green` health, and expects to be able to rebalance some +shards away from over-full nodes to avoid allocating shards to undesirable locations in the first place. From +version 8.16 `allow_rebalance` setting defaults to `always` unless the legacy allocator is explicitly enabled. + +{es-pull}111015[#111015] +[discrete] +[[add_global_retention_in_data_stream_lifecycle]] +=== Add global retention in data stream lifecycle +Data stream lifecycle now supports configuring retention on a cluster level, +namely global retention. Global retention \nallows us to configure two different +retentions: +- `data_streams.lifecycle.retention.default` is applied to all data streams managed +by the data stream lifecycle that do not have retention defined on the data stream level. +- `data_streams.lifecycle.retention.max` is applied to all data streams managed by the +data stream lifecycle and it allows any data stream \ndata to be deleted after the `max_retention` has passed. +{es-pull}111972[#111972] +[discrete] +[[enable_zstandard_compression_for_indices_with_index_codec_set_to_best_compression]] +=== Enable ZStandard compression for indices with index.codec set to best_compression +Before DEFLATE compression was used to compress stored fields in indices with index.codec index setting set to +best_compression, with this change ZStandard is used as compression algorithm to stored fields for indices with +index.codec index setting set to best_compression. The usage ZStandard results in less storage usage with a +similar indexing throughput depending on what options are used. Experiments with indexing logs have shown that +ZStandard offers ~12% lower storage usage and a ~14% higher indexing throughput compared to DEFLATE. + +{es-pull}112665[#112665] + +[discrete] +[[esql_introduce_per_agg_filter]] +=== ESQL: Introduce per agg filter +Add support for aggregation scoped filters that work dynamically on the +data in each group. + +[source,esql] +---- +| STATS success = COUNT(*) WHERE 200 <= code AND code < 300, + redirect = COUNT(*) WHERE 300 <= code AND code < 400, + client_err = COUNT(*) WHERE 400 <= code AND code < 500, + server_err = COUNT(*) WHERE 500 <= code AND code < 600, + total_count = COUNT(*) +---- + +Implementation wise, the base AggregateFunction has been extended to +allow a filter to be passed on. This is required to incorporate the +filter as part of the aggregate equality/identity which would fail with +the filter as an external component. +As part of the process, the serialization for the existing aggregations +had to be fixed so AggregateFunction implementations so that it +delegates to their parent first. + +{es-pull}113735[#113735] // end::notable-highlights[] +[discrete] +[[esql_multi_value_fields_supported_in_geospatial_predicates]] +=== ESQL: Multi-value fields supported in Geospatial predicates +Supporting multi-value fields in `WHERE` predicates is a challenge due to not knowing whether `ALL` or `ANY` +of the values in the field should pass the predicate. +For example, should the field `age:[10,30]` pass the predicate `WHERE age>20` or not? +This ambiguity does not exist with the spatial predicates +`ST_INTERSECTS` and `ST_DISJOINT`, because the choice between `ANY` or `ALL` +is implied by the predicate itself. +Consider a predicate checking a field named `location` against a test geometry named `shape`: + +* `ST_INTERSECTS(field, shape)` - true if `ANY` value can intersect the shape +* `ST_DISJOINT(field, shape)` - true only if `ALL` values are disjoint from the shape + +This works even if the shape argument is itself a complex or compound geometry. + +Similar logic exists for `ST_CONTAINS` and `ST_WITHIN` predicates, but these are not as easily solved +with `ANY` or `ALL`, because a collection of geometries contains another collection if each of the contained +geometries is within at least one of the containing geometries. Evaluating this requires that the multi-value +field is first combined into a single geometry before performing the predicate check. + +* `ST_CONTAINS(field, shape)` - true if the combined geometry contains the shape +* `ST_WITHIN(field, shape)` - true if the combined geometry is within the shape + +{es-pull}112063[#112063] + +[discrete] +[[enhance_sort_push_down_to_lucene_to_cover_references_to_fields_st_distance_function]] +=== Enhance SORT push-down to Lucene to cover references to fields and ST_DISTANCE function +The most used and likely most valuable geospatial search query in Elasticsearch is the sorted proximity search, +finding items within a certain distance of a point of interest and sorting the results by distance. +This has been possible in ES|QL since 8.15.0, but the sorting was done in-memory, not pushed down to Lucene. +Now the sorting is pushed down to Lucene, which results in a significant performance improvement. + +Queries that perform both filtering and sorting on distance are supported. For example: + +[source,esql] +---- +FROM test +| EVAL distance = ST_DISTANCE(location, TO_GEOPOINT("POINT(37.7749, -122.4194)")) +| WHERE distance < 1000000 +| SORT distance ASC, name DESC +| LIMIT 10 +---- + +In addition, the support for sorting on EVAL expressions has been extended to cover references to fields: + +[source,esql] +---- +FROM test +| EVAL ref = field +| SORT ref ASC +| LIMIT 10 +---- + +{es-pull}112938[#112938] + +[discrete] +[[cross_cluster_search_telemetry]] +=== Cross-cluster search telemetry +The cross-cluster search telemetry is collected when cross-cluster searches +are performed, and is returned as "ccs" field in `_cluster/stats` output. +It also add a new parameter `include_remotes=true` to the `_cluster/stats` API +which will collect data from connected remote clusters. + +{es-pull}113825[#113825] + diff --git a/docs/reference/rest-api/rest-api-compatibility.asciidoc b/docs/reference/rest-api/rest-api-compatibility.asciidoc index fd726128edba8..f328dd470e161 100644 --- a/docs/reference/rest-api/rest-api-compatibility.asciidoc +++ b/docs/reference/rest-api/rest-api-compatibility.asciidoc @@ -36,9 +36,8 @@ the incompatibility, a message is written to the deprecation log with the category "compatible_api". Review the deprecation log to identify any gaps in usage and fully supported features. -//TODO: figure out how to get the link below to work ! -//For information about specific breaking changes and the impact of requesting -//compatibility mode. See xref:/docs/reference/migration/migrate_9_0/rest-api-changes.asciidoc[REST API changes] in the migration guide. +For information about specific breaking changes and the impact of requesting +compatibility mode. See <> in the migration guide. [discrete] [[request-rest-api-compatibility]]