elk笔记16--aggs-Metrics Aggregations
- 1 Metrics Aggregations 简介
- 2 Metrics Aggregations 分类
-
- 2.1 Avg Aggregation
- 2.2 Weighted Avg Aggregation
- 2.3 Max Aggregation
- 2.4 Min Aggregation
- 2.5 Sum Aggregation
- 2.6 Stats Aggregation
- 2.7 Extended Stats Aggregation
- 2.8 Cardinality Aggregation
- 待补充
- 3 注意事项
- 4 说明
本文对聚合中的Metrics类型聚合进行进一步介绍,包括基础概念、常见aggs案例、注意事项等部分,后续将在此模块持续补充完善Metrics类型的aggs。
1 Metrics Aggregations 简介
指标类的聚合,在es中主要用于追踪和计算一个文档集的属性。
在指标聚合家族中,聚合可以对一些指标进行计算,这些指标基于从已有的聚合文档中提取出来的值,这些值一把是从文档的字段提取的,当然也可以通过脚本产生。
数值类型的指标聚合是一类特有的指标聚合,它输出一些数字类型的值。其中一类聚合输出单个数值指标,被称为单值数值指标聚合,例如求平均数avg;另外一类输出多个数值指标,被称作多只数值指标聚合。当这些聚合充当某些桶聚合的直接子聚合时(一些桶聚合根据桶中的数值属性,可以使我们对返回桶进行排序),单值和多值数字指标聚合之间的区别将发挥作用。
2 Metrics Aggregations 分类
2.1 Avg Aggregation
计算指定字段的平均值
GET kibana_sample_data_ecommerce/_search?size=0
{
"aggs" : {
"avg_taxful_total_price" : {
"avg" : {
"field" : "taxful_total_price"
}
}
}
}
结果:
{
...
"aggregations" : {
"avg_taxful_total_price" : {
"value" : 1052652.38671875
}
}
}
使用脚本获取指定字段的值:
avg内部的field改为script,source为doc.字段名称.value
GET kibana_sample_data_ecommerce/_search?size=0
{
"aggs" : {
"avg_taxful_total_price" : {
"avg" : {
"script": {
"source": "doc.taxful_total_price.value"
}
}
}
}
}
2.2 Weighted Avg Aggregation
Weighted Avg 聚合属于单指标聚合,其作用为计算出带有权重的平均值,当权重为1的时候就称为普通的avg聚合了,其计算公式:∑(value * weight) / ∑(weight)
POST /exams/_search
{
"size": 0,
"aggs" : {
"weighted_grade": {
"weighted_avg": {
"value": {
"field": "grade"
},
"weight": {
"field": "weight"
}
}
}
}
}
此处value和weight两个字段是必选字段,也可以根据需要设置 weighted_avg 的 format 和 value_type 字段;此外value和weight也可以按需设置missing字段。
2.3 Max Aggregation
同 avg
2.4 Min Aggregation
同avg
2.5 Sum Aggregation
同avg
2.6 Stats Aggregation
Stats聚合属于多指标聚合,用于计算文档中指定字段的多个属性,包括 min, max, sum, count and avg。
以下以学生成绩为案例:
创建索引:
PUT exams
{
"mappings": {
"properties": {
"name":{
"type": "keyword"
},
"grade":{
"type": "double"
}
}
}
}
写入2条数据:
PUT exams/_bulk?refresh=true
{ "index":{"_id":1}}
{ "name":"xiaoming","grade":50}
{ "index":{"_id":2}}
{ "name":"zhangsan","grade":100}
stats聚合:
GET exams/_search?size=0
{
"aggs": {
"function_stats": {
"stats": {
"field": "grade"
}
}
}
}
可选参数:
"missing":具体数值, 当无grade字段时将会使用指定数值来代替
script(将field更改为如下内容):
"script" : {
"lang": "painless",
"source": "doc['grade'].value"
}
script方式获取字段后,可以设置字段的correction,统计时grade值为原始字段值*correction
"script" : {
"lang": "painless",
"source": "doc.grade.value * params.correction",
"params" : {
"correction" : 1.2
}
}
结果:
{
...
"aggregations" : {
"function_stats" : {
"count" : 2,
"min" : 50.0,
"max" : 100.0,
"avg" : 75.0,
"sum" : 150.0
}
}
}
2.7 Extended Stats Aggregation
Extended Stats聚合属于多指指标聚合,用于计算文档中指定字段的多个属性,它对Stats进行了扩展,包括 sum_of_squares, variance, std_deviation and std_deviation_bounds几个参数。
以下以学生成绩为案例:
extend stats聚合:
GET exams/_search?size=0
{
"aggs": {
"function_stats": {
"extended_stats": {
"field": "grade",
"sigma": 1,
"missing": 0
}
}
}
}
可选参数:
sigma: 默认为2,
std_deviation_bounds区间为[-2*std_deviation+avg,2*std_deviation+avg],但设置为1后[-std_deviation+avg,std_deviation+avg]
missing: grade缺失时候使用missing值来代替
结果:
{
...
"aggregations" : {
"function_stats" : {
"count" : 2,
"min" : 50.0,
"max" : 100.0,
"avg" : 75.0,
"sum" : 150.0,
"sum_of_squares" : 12500.0,
"variance" : 625.0,
"std_deviation" : 25.0,
"std_deviation_bounds" : {
"upper" : 100.0,
"lower" : 50.0
}
}
}
}
2.8 Cardinality Aggregation
Cardinality 聚合属于单指标聚合,用于计算文档中指定字段的不同值的数量,即去重后有多少个值
GET exams/_search?size=0
{
"aggs" : {
"differ_grade" : {
"cardinality" : {
"field" : "grade"
}
}
}
}
输出:
{
..
"aggregations" : {
"differ_grade" : {
"value" : 2
}
}
}
此处使用2.2.7中的数据,有2个学生分数不相同,因此为2;若增加底三个学生分数为50,则值仍然为2;若增加底三个学生分数为51,则值仍然为3
待补充
3 注意事项
to add
4 说明
测试环境:es 7.2.1
7.2/search-aggregations
es 权威指南:aggs-high-level