https://www.elastic.co/guide/en/elasticsearch/reference/8.1/aggregate-metric-double.html
今天我们学习一下Elasticsearch的聚合字段类型,所谓聚合字段类型,类型设置为aggregate_metric_double
作为一个对象,子字段可以有min
,max
,sum
,value_count
,当我们对字段设置为aggregate_metric_double
类型的字段做聚合时,它能够直接使用子字段的值进行聚合,比如最大值就可以直接去子对象中max
的值比较
aggregate_metric_double
类型的字段支持以下三个参数的设置
metrics
必填、数组值、最少包含以下值的一个[min
,max
,sum
,value_count
]
default_metric
聚合子字段查询,script的字段设置,字符串,必须是metrics
数组中的一个
time_series_metric
可选,字符串值,默认为空,支持counter
,gauge
,summary
中的某一个。当前版本为预览功能,最新版参考
https://www.elastic.co/guide/en/elasticsearch/reference/master/tsds.html#time-series-metric
https://www.elastic.co/guide/en/elasticsearch/reference/master/aggregate-metric-double.html
min 使用子字段的min
字段进行聚合统计
max 使用子字段的max
字段进行聚合统计
sum 使用子字段的sum
字段进行聚合统计
value_count 使用子字段的value_count
字段进行聚合统计
avg 这个比较特殊,他没有子字段,他使用sum
和value_count
两个字段聚合的结果,也就是说聚合字段的子对象必须同时包含sum
与value_count
如下是测试的例子,参考如下
首先我们还是通过Kibana 创建一个索引,索引中就包含一个aggregate_metric_double
类型的一个对象字段
PUT my-index-006
{
"mappings": {
"properties": {
"zuiyu_agg_metric_field":{
"type":"aggregate_metric_double",
"metrics":["min","max","sum","value_count"],
"default_metric":"max"
}
}
}
}
下面是插入测试数据
POST _bulk
{"index":{"_index":"my-index-006","_id":"1"}}
{"zuiyu_agg_metric_field":{"min":100.00,"max":1000.00,"sum":5000.00,"value_count":10}}
{"index":{"_index":"my-index-006","_id":"2"}}
{"zuiyu_agg_metric_field":{"min":-10.00,"max":30.00,"sum":70.00,"value_count":8}}
{"index":{"_index":"my-index-006","_id":"3"}}
{"zuiyu_agg_metric_field":{"min":-90.00,"max":300.00,"sum":200.00,"value_count":5}}
搜索聚合统计验证(?size=0 不反悔查询结果只返回聚合结果)
GET my-index-006/_search?size=0
{
"aggs": {
"zuiyu_min": {
"min": {
"field": "zuiyu_agg_metric_field"
}
},
"zuiyu_max": {
"max": {
"field": "zuiyu_agg_metric_field"
}
},
"zuiyu_sum": {
"sum": {
"field": "zuiyu_agg_metric_field"
}
},
"zuiyu_value_count": {
"value_count": {
"field": "zuiyu_agg_metric_field"
}
},
"zuiyu_avg": {
"avg": {
"field": "zuiyu_agg_metric_field"
}
}
}
}
测试default_metric
字段对查询时的默认匹配与排序
GET my-index-006/_search
{
"query": {
"term": {
"zuiyu_agg_metric_field": {
"value": "30"
}
}
}
}
GET my-index-006/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"zuiyu_agg_metric_field": {
"order": "asc"
}
}
]
}
字段类型为aggregate_metric_double
的字段,可以设置metrics
,支持min
,max
,sum
,value_count
,avg
五中,其中avg
不显示设置,avg
取值sum
和value_count
。设置字段之后我们之后的聚合操作可以直接使用类型为aggregate_metric_double
字段的子对象中对应的max
,min
,sum
,value_count
进行聚合
本文由 mdnice 多平台发布