[discrete]
[[breaking_70_aggregations_changes]]
=== Aggregations changes

//NOTE: The notable-breaking-changes tagged regions are re-used in the
//Installation and Upgrade Guide

//tag::notable-breaking-changes[]

// end::notable-breaking-changes[]


[discrete]
[[removed-global-ordinals-hash-and-global-ordinals-low-cardinality-terms-agg]]
==== Deprecated `global_ordinals_hash` and `global_ordinals_low_cardinality` execution hints for terms aggregations have been removed

These `execution_hint` are removed and should be replaced by `global_ordinals`.

[discrete]
[[search-max-buckets-cluster-setting]]
==== `search.max_buckets` in the cluster setting

The dynamic cluster setting named `search.max_buckets` now defaults
to 10,000 (instead of unlimited in the previous version).
Requests that try to return more than the limit will fail with an exception.

[discrete]
[[missing-option-removed-composite-agg]]
==== `missing` option of the `composite` aggregation has been removed

The `missing` option of the `composite` aggregation, deprecated in 6.x,
has been removed. `missing_bucket` should be used instead.

[discrete]
[[replace-params-agg-with-state-context-variable]]
==== Replaced `params._agg` with `state` context variable in scripted metric aggregations

The object used to share aggregation state between the scripts in a Scripted Metric
Aggregation is now a variable called `state` available in the script context, rather than
being provided via the `params` object as `params._agg`.

[discrete]
[[reduce-script-combine-script-params-mandatory]]
==== Make metric aggregation script parameters `reduce_script` and `combine_script` mandatory

The metric aggregation has been changed to require these two script parameters to ensure users are
explicitly defining how their data is processed.

[discrete]
[[percentiles-percentile-ranks-return-null-instead-nan]]
==== `percentiles` and `percentile_ranks` now return `null` instead of `NaN`

The `percentiles` and `percentile_ranks` aggregations used to return `NaN` in
the response if they were applied to an empty set of values. Because `NaN` is
not officially supported by JSON, it has been replaced with `null`.

[discrete]
[[stats-extended-stats-return-zero-instead-null]]
==== `stats` and `extended_stats` now return 0 instead of `null` for zero docs

When the `stats` and `extended_stats` aggregations collected zero docs (`doc_count: 0`),
their value would be `null`.  This was in contrast with the `sum` aggregation which
would return `0`.  The `stats` and `extended_stats` aggs are now consistent with
`sum` and also return zero.
