Aggregate metric field type
Aggregate metric field type
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" ],
"default_metric": "max"
}
}
}
}
Parameters for aggregate_metric_double
fields
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, and value_count. You must specify at least one value.
default_metric
(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 metrics
array.
time_series_metric
[preview] This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. (Optional, string)
For internal use by Elastic only.
Marks the field as a time series metric. The value is the metric type. Defaults to null
(Not a time series metric).
For aggregate_metric_double
fields, this parameter accepts counter
, gauge
, and summary
. You can’t update this parameter for existing fields.
Uses
We designed aggregate_metric_double
fields for use with the following aggregations:
- A min aggregation returns the minimum value of all
min
sub-fields. - A max aggregation returns the maximum value of all
max
sub-fields. - A sum aggregation returns the sum of the values of all
sum
sub-fields. - A value_count aggregation returns the sum of the values of all
value_count
sub-fields. - A avg aggregation. There is no
avg
sub-field; the result of theavg
aggregation is computed using thesum
andvalue_count
metrics. To run anavg
aggregation, the field must contain bothsum
andvalue_count
metric 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
by delegating its behavior to its default_metric
sub-field:
Examples
The following create index API request creates an index with an aggregate_metric_double
field named agg_metric
. The request sets max
as the field’s default_metric
.
PUT stats-index
{
"mappings": {
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
}
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 default_metric
value.
GET stats-index/_search
{
"query": {
"term": {
"agg_metric": {
"value": 702.30
}
}
}
}
The search returns the following hit. The value of the default_metric
field, max
, matches the query value.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "stats-index",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200.0,
"value_count": 25
}
}
}
]
}
}