平均值聚合

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

译文链接 : 平均值聚合

贡献者 : @yishengxiaoyao

single-value计量聚合操作就是从聚合文本中提取的数据进行求平均数的操作。这些值可以是从文本具体的数值属性中提取的值,也可以是使用脚本生成的。

假设这个数据都是有学生的考试成绩(0-100)的文档组成:

  1. {
  2. "aggs" : {
  3. "avg_grade" : { "avg" : { "field" : "grade" } }
  4. }
  5. }

上面的聚合操作就是计算所有文档的平均值。这个聚合操作的类型是avg,并且使用field来定义要计算文档中的属性。如下所示:

  1. {
  2. ...
  3. "aggregations": {
  4. "avg_grade": {
  5. "value": 75
  6. }
  7. }
  8. }

聚合操作的名可以也可以作为聚合操作返回的关键字(例如上面的avg)。

Script

使用脚本计算平均值:

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

将会解释script参数作为无并发脚本语言和无脚本参数的内联脚本。一个文件脚本中包含如下参数和语法规范:

  1. {
  2. ...,
  3. "aggs" : {
  4. "avg_grade" : {
  5. "avg" : {
  6. "script" : {
  7. "file": "my_script",
  8. "params": {
  9. "field": "grade"
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }
用户小贴士 在索引脚本文件中可以使用id参数取代file参数。

Value Scripts

事实证明考试是高于学生的水平的需要对学生的成绩进行校对。我们可以使用下面的脚本获取新的平均数:

  1. {
  2. "aggs" : {
  3. ...
  4. "aggs" : {
  5. "avg_corrected_grade" : {
  6. "avg" : {
  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. "grade_avg" : {
  4. "avg" : {
  5. "field" : "grade",
  6. "missing": 10
  7. }
  8. }
  9. }
  10. }

在文档中,如果grade这个属性没有的值话,就会默认为10.