Aggregate metric field type
Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability This functionality is generally available and ready for production usage. Serverless interfaces and procedures might differ from classic Elastic Stack deployments. The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.
Serverless
Generally available
Stack
Generally available
Stores pre-aggregated numeric values for metric aggregations. An aggregate_metric_double field is an object containing one or more of the following metric sub-fields: min, max, sum, and value_count.
When you run certain metric aggregations on an aggregate_metric_double field, the aggregation uses the related sub-field’s values. For example, a min aggregation on an aggregate_metric_double field returns the minimum value of all min sub-fields.
An aggregate_metric_double field stores a single numeric doc value for each metric sub-field. Array values are not supported. min, max, and sum values are double numbers. value_count is a positive long number.
PUT my-index{ "mappings": { "properties": { "my-agg-metric-field": { "type": "aggregate_metric_double", "metrics": [ "min", "max", "sum", "value_count" ] } } } }
metrics- (Required, array of strings) Array of metric sub-fields to store. Each value corresponds to a metric aggregation. Valid values are
min,max,sum, andvalue_count. You must specify at least one value. default_metricThe Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Deprecated since 9.4 This functionality is deprecated. You can still use it, but it'll be removed in a future Elastic Stack update. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability Deprecated This functionality is deprecated. You can still use it, but it'll be removed in a future Elastic Cloud Serverless update.-
Deprecated in 9.4
The default metric value depends on the number of sub-fields:
- When there are multiple sub-fields, the default is the average, calculated from
sumandvalue_count. - When there is only a single sub-field, that sub-field's value is used directly.
(Required, string) Default metric sub-field to use for queries, scripts, and aggregations that don’t use a sub-field. Must be a value from the
metricsarray. - When there are multiple sub-fields, the default is the average, calculated from
time_series_metric-
(Optional, string) Marks the field as a time series metric. The value is the metric type. You can’t update this parameter for existing fields.
Valid
time_series_metricvalues foraggregate_metric_doublefields:gauge- A metric that represents a single numeric that can arbitrarily increase or decrease. For example, a temperature or available disk space.
null(Default)- Not a time series metric.
In Query DSL, we designed aggregate_metric_double fields
for use with the following aggregations:
- A
minaggregation returns the minimum value of allminsub-fields. - A
maxaggregation returns the maximum value of allmaxsub-fields. - A
sumaggregation returns the sum of the values of allsumsub-fields. - A
value_countaggregation returns the sum of the values of allvalue_countsub-fields. - A
avgaggregation. There is noavgsub-field; the result of theavgaggregation is computed using thesumandvalue_countmetrics. To run anavgaggregation, the field must contain bothsumandvalue_countmetric sub-field.
Running any other aggregation on an aggregate_metric_double field will fail with an "unsupported aggregation" error.
Finally, an aggregate_metric_double field supports the following queries, for which it behaves as a double:
To achieve that, it delegates its behavior as follows:
- If
sumandvalue_countmetrics exist, the average is used. The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available since 9.4 This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. - If only one sub-field is configured, that sub-field is used.
- Otherwise, the query matches no documents.
In ES|QL, we designed aggregate_metric_double fields
for use with the time series aggregations either natively using one of the sub-fields or by
delegating to the average using the sum and value_count metrics.
The following create index API request creates an index with an aggregate_metric_double field named agg_metric.
PUT stats-index{ "mappings": { "properties": { "agg_metric": { "type": "aggregate_metric_double", "metrics": [ "min", "max", "sum", "value_count" ] } } } }
The following index API request adds documents with pre-aggregated data in the agg_metric field.
PUT stats-index/_doc/1{ "agg_metric": { "min": -302.50, "max": 702.30, "sum": 200.0, "value_count": 25 } }PUT stats-index/_doc/2{ "agg_metric": { "min": -93.00, "max": 1702.30, "sum": 300.00, "value_count": 25 } }
You can run min, max, sum, value_count, and avg aggregations on a agg_metric field.
POST stats-index/_search?size=0{ "aggs": { "metric_min": { "min": { "field": "agg_metric" } }, "metric_max": { "max": { "field": "agg_metric" } }, "metric_value_count": { "value_count": { "field": "agg_metric" } }, "metric_sum": { "sum": { "field": "agg_metric" } }, "metric_avg": { "avg": { "field": "agg_metric" } } } }
The aggregation results are based on related metric sub-field values.
{
...
"aggregations": {
"metric_min": {
"value": -302.5
},
"metric_max": {
"value": 1702.3
},
"metric_value_count": {
"value": 50
},
"metric_sum": {
"value": 500.0
},
"metric_avg": {
"value": 10.0
}
}
}
Queries on a aggregate_metric_double field use the average value.
GET stats-index/_search{ "query": { "term": { "agg_metric": { "value": 8 } } } }
The search returns the following hit. The average value of the agg_metric matches the query value.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "stats-index",
"_id": "1",
"_score": 1.0,
"_source": {
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200.0,
"value_count": 25
}
}
}
]
}
}
For example:
PUT idx{ "settings": { "index": { "mapping": { "source": { "mode": "synthetic" } } } }, "mappings": { "properties": { "agg_metric": { "type": "aggregate_metric_double", "metrics": [ "min", "max", "sum", "value_count" ] } } } }PUT idx/_doc/1{ "agg_metric": { "min": -302.50, "max": 702.30, "sum": 200.0, "value_count": 25 } }
Will become:
{
"agg_metric": {
"min": -302.50,
"max": 702.30,
"sum": 200.0,
"value_count": 25
}
}