扩展统计聚合

原文链接 :https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-aggregations-metrics-extendedstats-aggregation.html

译文链接 : 扩展统计聚合

贡献者 : @wangxiang,ApacheCNApache中文网

多值度量聚合计算从汇总文档中提取的数值的统计数据。这些值可以从文档中的特定数值字段中提取,也可以由提供的脚本生成。

扩展统计聚合是统计聚合(stats aggregation)的扩展版本,其中额外添加如sum_of_squares, variance, std_deviation and std_deviation_bounds。

假设数据由学生的考试成绩(0到100)组成:

  1. {
  2. "aggs" : {
  3. "grades_stats" : {
  4. "extended_stats" : {
  5. "field" : "grade"
  6. }
  7. }
  8. }
  9. }

上述聚合计算所有文档的分数统计信息。聚合类型为extended_stats,设置文档的数字字段为需要统计的字段为grade,执行上面的语句将返回如下:

  1. {
  2. ...
  3. "aggregations": {
  4. "grade_stats": {
  5. "count": 9,
  6. "min": 72,
  7. "max": 99,
  8. "avg": 86,
  9. "sum": 774,
  10. "sum_of_squares": 67028,
  11. "variance": 51.55555555555556,
  12. "std_deviation": 7.180219742846005,
  13. "std_deviation_bounds": {
  14. "upper": 100.36043948569201,
  15. "lower": 71.63956051430799
  16. }
  17. }
  18. }
  19. }
  1. 聚合的名称(上面语句中的grades_stats)作为key,通过该key可以从返回的结果中检索出聚集的结果。

Standard Deviation Bounds

默认情况下,扩展统计度量将返回一个对象称为std_deviation_bounds,它提供了平均值加/减两个标准差的区间。这可以成为一个用来方式来可视化数据的方差。如果你想要一个不同的边界,例如三个标准偏差,你可以在请求中设置:

  1. {
  2. "aggs" : {
  3. "grades_stats" : {
  4. "extended_stats" : {
  5. "field" : "grade",
  6. "sigma" : 3
  7. }
  8. }
  9. }
  10. }
  1. 注释1.sigma控制应显示多少标准偏差+/-平均值。

sigma可以是任何非负double类型数字,这意味着你可以要求非整数值,如1.5。值为0也是有效的,但只会返回上下限的平均值。

提示:默认情况下显示标准偏差和其边界,但它们并不总是适用于所有的数据集。您的数据必须是正常分布的度量才有意义。标准偏差背后的统计数据假设为正常分布的数据,因此如果数据偏斜向左或向右,返回的值将是误导性的。

Script

使用下面的脚本计算成绩的统计信息:

  1. {
  2. ...,
  3. "aggs" : {
  4. "grades_stats" : {
  5. "extended_stats" : {
  6. "script" : {
  7. "inline" : "doc['grade'].value",
  8. "lang" : "painless"
  9. }
  10. }
  11. }
  12. }
  13. }

This will interpret the script parameter as an inline script with the painless script language and no script parameters. 用下面的语法来使用脚本文件:

  1. {
  2. ...,
  3. "aggs" : {
  4. "grades_stats" : {
  5. "extended_stats" : {
  6. "script" : {
  7. "file": "my_script",
  8. "params": {
  9. "field": "grade"
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }
  1. 提示:可以使用id参数代替file参数来使用index的脚本。

Value Script

当考试的难度是高于学生的水平,需要校正学生的成绩,我们可以使用value script获得新的统计:

  1. {
  2. "aggs" : {
  3. ...
  4. "aggs" : {
  5. "grades_stats" : {
  6. "extended_stats" : {
  7. "field" : "grade",
  8. "script" : {
  9. "lang" : "painless",
  10. "inline": "_value * params.correction",
  11. "params" : {
  12. "correction" : 1.2
  13. }
  14. }
  15. }
  16. }
  17. }
  18. }
  19. }

Missing Value

missing参数定义了如何处理缺少值的文档。 默认情况下如果没有指定的字段,这种文档将被忽略,但也可以认为它们具有指定的值:

  1. {
  2. "aggs" : {
  3. "grades_stats" : {
  4. "extended_stats" : {
  5. "field" : "grade",
  6. "missing": 0
  7. }
  8. }
  9. }
  10. }
  1. 注释1:文档中如果没有grade这个字段,则认为该字段的值是0