[[release-highlights]]
== What's new in {minor-version}

coming::[{minor-version}]

Here are the highlights of what's new and improved in {es} {minor-version}!
ifeval::[\{release-state}\"!=\"unreleased\"]
For detailed information about this release, see the <<es-release-notes>> and
<<breaking-changes>>.
endif::[]

// Add previous release to the list
Other versions:

{ref-bare}/8.3/release-highlights.html[8.3]
| {ref-bare}/8.2/release-highlights.html[8.2]
| {ref-bare}/8.1/release-highlights.html[8.1]
| {ref-bare}/8.0/release-highlights.html[8.0]

// tag::notable-highlights[]

[discrete]
[[speed_up_filters_range_date_histogram_aggs]]
=== Speed up filters/range/date_histogram aggs
This speeds up a few aggregations when they don't have child aggregations.
That's super common, for example, the histogram at the top of Kibana's
discover tab is a `date_histogram` without any child aggregations. That
particular aggregation is sped up by about 85% in our rally tests, dropping
from 250ms to 30ms.

{es-pull}81322[#81322]

[discrete]
[[minimum_conditions_for_rollover_api_ilm_actions]]
=== Minimum conditions for the rollover API and ILM actions
The rollover API and ILM actions now support minimum conditions for rollover.

Minimum conditions prevent rollover from occuring until they are met. That is, an index
will rollover once one or more max conditions are satisfied and all min conditions are satisfied.

As an example, the following ILM policy would roll an index over if it is at least 7 days old or
at least 100 gigabytes, but only as long as the index is not empty.

[source,console]
----
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_age": "7d",
            "max_size": "100gb",
            "min_docs": 1
          }
        }
      }
    }
  }
}
----

{es-pull}83345[#83345]

[discrete]
[[infinite_adaptive_retries_for_transforms]]
=== Infinite and adaptive retries for transforms
Infinite and adaptive retries – available in 8.4 – makes it possible for 
transforms to recover after a failure without any user intervention. Retries 
can be configured per transform. The transform retries become less frequent 
progressively. The interval between retries doubles after reaching a one-hour 
threshold. This is because the possibility that retries solve the problem is 
less likely after each failed retry.

In the *Transforms* page in *{stack-manage-app}* in {kib}, the number of retries 
can be configured when creating a new transform or editing an existing one.

{es-pull}87361[#87361]

[discrete]
[[composite_aggregations_in_datafeeds_are_generally_available]]
=== Composite aggregations in datafeeds are Generally Available
The support for
{ml-docs}/ml-configuring-aggregation.html#aggs-using-composite[composite aggregations]
in datafeeds is now generally available.

[discrete]
[[early-stopping-dfa]]
=== Optimizing speed of {dfanalytics}
{dfanalytics-cap} is even faster in 8.4. The new function automatically
stops the process of hyperparameter optimization early in case the
accuracy gain for a different set of hyperparameter values would be
insignificant. The early stopping of the optimization process results in a
shorter runtime for the {dfanalytics-job}.

{es-pull}88589[#88589]

[discrete]
[[integrate_ann_into_search_endpoint]]
=== Integrate ANN into `_search` endpoint
This change adds a `knn` option to the `_search` API to support ANN
search. It's powered by the same Lucene ANN capabilities as the old
`_knn_search` endpoint. The `knn` option can be combined with other
search features like queries and aggregations.

{es-pull}88694[#88694]

// end::notable-highlights[]


