天天看点

elk笔记16--aggs-Metrics Aggregations1 Metrics Aggregations 简介2 Metrics Aggregations 分类3 注意事项4 说明

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

继续阅读