聚合度量字段类型
为度量聚合存储预聚合的度量值。一个 aggregate_metric_double 字段是一个对象,此对象包含了一个或多个下面的度量子字段:min, max, sum 和 value_count。
当你在一个 aggregate_metric_double 字段上运行某些度量聚合时,此聚合使用相关的子字段的值。例如,在一个 aggregate_metric_double字段上的 min 聚合将返回所有 min 子字段的最小值。
一个
aggregate_metric_double字段为每一个度量子字段存储一个单独数字化 doc 值。数组值是不被支持的。min,max和sum是double数字。value_count是一个正的long数字。
PUT my-index
{
"mappings": {
"properties": {
"my-agg-metric-field": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
}
aggregate_metric_double 字段的参数
metrics : (必须,字符串数组)要存储的度量子字段组成的数组。每个值对应一个度量聚合。有效的值是 min, max, sum 和 value_count。你必须至少指定一个值。
default_metric : (必须,字符串)用于那些不使用一个子字段的查询、脚本和聚合的默认度量子字段。必须是 metrics 数组里的一个值。
1. 使用
我们设计 aggregate_metric_double 字段用于以下的聚合:
- 一个
min聚合返回所有min子字段值的最小值。 - 一个
max聚合返回所有max子字段值的最大值。 - 一个
sum聚合返回所有sum子字段值的和。 - 一个
value_count聚合返回所有value_count子字段值的和。 - 一个
avg聚合。没有avg子字段;使用sum和value_count度量计算avg聚合的结果。要运行一个avg聚合,字段里必须包含有sum和value_count度量子字段。
在 aggregate_metric_double 字段上运行任何其它的聚合将运行失败并产生一个 "unsupported aggregation" 错误。
2. 例子
下面的创建索引API 请求创建一个名为 agg_metric 的 aggregate_metric_double 字段的索引。这个请求将 max 设为字段的 default_metric。
PUT stats-index
{
"mappings": {
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
}
下面的索引API 请求添加 agg_metric 字段里带有预聚合数据的文档。
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
}
}
你可以在 agg_metric 字段上运行 min, max, sum, value_count 和 ave 聚合。
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" } }
}
}
聚合的结果基于关联的度量子字段的值。
{
...
"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
}
}
}
使用 default_metric 值在 aggregate_metric_double 字段上的查询。
GET stats-index/_search
{
"query": {
"term": {
"agg_metric": {
"value": 702.30
}
}
}
}
搜索返回下面的命中。 default_metric 字段(也就是 max)的值,匹配到查询值。
{
...
"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
}
}
}
]
}
}