ElasticSearch学习笔记之二十二 指标聚合续

ElasticSearch学习笔记之二十二 指标聚合续

  • Max Aggregation
  • Min Aggregation
  • Percentiles Aggregation
  • Stats Aggregation
  • Sum Aggregation
  • Value Count Aggregation

Max Aggregation

Max Aggregation是一个从需要聚合的文档中提取字段最大值的单值数字型聚合. 这些值既可以从文档中提取也可以从script获取。

注意:
max aggregation 和 min aggregationoperate操作双精度的数据, 所以当数据的大小超过 253的时候,取得是近似值.

计算所有文档的最大值:

POST /sales/_search?size=0
{
    "aggs" : {
        "max_price" : { "max" : { "field" : "price" } }
    }
}

返回结果如下:

{
    ...
    "aggregations": {
        "max_price": {
            "value": 200.0
        }
    }
}

Min Aggregation

Min Aggregation是一个从需要聚合的文档中提取字段最小值的单值数字型聚合. 这些值既可以从文档中提取也可以从script获取。

计算所有文档的最大值:

POST /sales/_search?size=0
{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}

返回:

{
    ...

    "aggregations": {
        "min_price": {
            "value": 10.0
        }
    }
}

Percentiles Aggregation

Percentiles Aggregation是一个从需要聚合的文档中提取的数字型值计算一个或者多个百分比多值数字型聚合. 这些值既可以从文档中提取也可以从script获取。

Percentiles 展示了观测值的百分比.例如,95th percentile 是大于所观察值的95%的值。

Percentiles经常被用来寻找极端值。在正态分布中,0.13%和97.47%代表三个标准偏差的平均值。任何超出三标准差的数据通常被认为是一种异常数据。

我们可以利用percentiles 聚合的结果评估数据分布,判断数据是否异常,分析数据是否符合双峰分布。

假设你的数据是由网站加载时间组成的。平均和中间负载时间对管理员来说不是非常有用。MAX 可能是有趣的,但它可以很容易地被一个单一的慢响应歪曲。

我们可以看一下代表加载时间范围的 percentiles 聚合:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_outlier" : {
            "percentiles" : {
                "field" : "load_time" 
            }
        }
    }
}

load_time字段必须是一个字段型的

哦人情况下, percentile聚合指标会计算一系列百分比: [ 1, 5, 25, 50, 75, 95, 99 ]. 返回如下:

{
    ...

   "aggregations": {
      "load_time_outlier": {
         "values" : {
            "1.0": 5.0,
            "5.0": 25.0,
            "25.0": 165.0,
            "50.0": 445.0,
            "75.0": 725.0,
            "95.0": 945.0,
            "99.0": 985.0
         }
      }
   }
}

正如我们所看到的, 聚合会为每一个百分比返回一个计算过的值, 如果我们假设相应时间是毫秒级别的, 很明显网站的响应时间一般在10-725ms, 偶尔的尖峰到 945-985ms.

通常情况下,管理员支队极端值感兴趣-极端的百分比。我们可以仅仅指出我们感兴趣的百分比(请求的百分比必须要0~100之间)

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_outlier" : {
            "percentiles" : {
                "field" : "load_time",
                "percents" : [95, 99, 99.9] 
            }
        }
    }
}

使用percents参数指定的百分比计算。

Stats Aggregation

Stats Aggregation是一个从需要聚合的文档中提取的数字型值字段进行统计计算的多值数字型聚合. 这些值既可以从文档中提取也可以从script获取。

返回的统计信息包括:min、max、sum, count 和avg。

假设我们由一系列代表学生成绩(0至100)的文档:

POST /exams/_search?size=0
{
    "aggs" : {
        "grades_stats" : { "stats" : { "field" : "grade" } }
    }
}

上面的聚合将会对文档的grade字段进行统计. 聚合的类型是stats field 定义了文档聚合计算的字段.
返回结果如下:

{
    ...

    "aggregations": {
        "grades_stats": {
            "count": 2,
            "min": 50.0,
            "max": 100.0,
            "avg": 75.0,
            "sum": 150.0
        }
    }
}

Sum Aggregation

Sum Aggregation是一个从需要聚合的文档中对字段求和的单值数字型聚合. 这些值既可以从文档中提取也可以从script获取。

假设我们由一系列代表销售纪录的文档,我们可以将所有帽子的销售价格相加

POST /sales/_search?size=0
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "match" : { "type" : "hat" }
            }
        }
    },
    "aggs" : {
        "hat_prices" : { "sum" : { "field" : "price" } }
    }
}

返回结果如下:

{
    ...
    "aggregations": {
        "hat_prices": {
           "value": 450.0
        }
    }
}

Value Count Aggregation

Value Count Aggregation是一个从需要聚合的文档中对字段计数的单值数字型聚合. 这些值既可以从文档中提取也可以从script获取。

通常,该聚合将与其他单值数字型聚合一起使用。例如,当计算AVG时,可能对平均值的计算值感兴趣。

POST /sales/_search?size=0
{
    "aggs" : {
        "types_count" : { "value_count" : { "field" : "type" } }
    }
}

返回如下:

{
    ...
    "aggregations": {
        "types_count": {
            "value": 7
        }
    }
}

你可能感兴趣的:(ElasticSearch学习笔记之二十二 指标聚合续)