https://www.elastic.co/guide/en/elasticsearch/reference/8.1/aggregate-metric-double.html
环境信息
-
Elasticsearch 8.1 -
Kibana 8.1 -
MacOS 10.14.6
描述
今天我们学习一下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
进行聚合
原文始发于微信公众号(醉鱼Java):Elasticsearch 聚合字段aggregate-metric-double
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/231669.html