当前位置:   article > 正文

ES聚合查询详解(三):指标聚合_es emit函数

es emit函数

前言

ES聚合查询主要分为3类:指标聚合、桶聚合和管道聚合。
本文主要是介绍其中指标聚合的相关使用。


一、简介

指标聚合 Metrics Aggregations

如果说桶聚合主要是用来做分组的,那么指标聚合就主要是用来做数据计算的
桶聚合和指标聚合一般都会配合使用。

类似SQL:统计订单表中每个用户的总订单金额。

select  sum(t.money)   from order  t   group by t.user
  • 1

对应的DSL:

POST /order/_search
 {
      "size":0,
      "aggs" : {
          "group_user" : {
              "terms" : {
                "size": 5,
                "field" : "user",
                "order": {
                  "sum_money" : "desc" 
                }
              },
              "aggs": {
                  "sum_money": {
                      "sum": {"field": "money"}
                  }
              }
          }
      }
  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

说明:
先采用名称为group_user的桶聚合实现根据user进行分组,然后通过子聚合sum_money对各个分组中的money进行求和。
通过order指定根据指标聚合sum_money的计算结果进行倒序排序。
通过aggs中的size限制只统计总订单金额排名前5的数据。

二、常见的指标聚合函数

在这里插入图片描述

三、典型使用

1.求平均值 avg

POST /exams/_search?size=0
{
  "aggs": {
    "avg_grade": { "avg": { "field": "grade" } }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用脚本script:
通过script在查询时提取出运行时字段grade.corrected

POST /exams/_search?size=0
{
  "runtime_mappings": {
    "grade.corrected": {
      "type": "double",
      "script": {
        "source": "emit(Math.min(100, doc['grade'].value * params.correction))",
        "params": {
          "correction": 1.2
        }
      }
    }
  },
  "aggs": {
    "avg_corrected_grade": {
      "avg": {
        "field": "grade.corrected"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2.最大值计算 max

POST /sales/_search?size=0
{
  "aggs": {
    "max_price": { "max": { "field": "price" } }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.最大值计算 min

POST /sales/_search?size=0
{
  "aggs": {
    "min_price": { "min": { "field": "price" } }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.求和 sum

POST /sales/_search?size=0
{
  "query": {
    "constant_score": {
      "filter": {
        "match": { "type": "hat" }
      }
    }
  },
  "aggs": {
    "hat_prices": { "sum": { "field": "price" } }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

5.速率指标聚合 Rate

速率指标聚合只能在date_histogramcomposite聚合中使用。它计算每个存储桶中的文档或字段的速率。字段值可以从文档中的特定数值或直方图字段中提取。

GET sales/_search
{
  "size": 0,
  "aggs": {
    "by_date": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "month"  
      },
      "aggs": {
        "my_rate": {
          "rate": {
            "unit": "year"  
          }
        }
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

6.唯一值数量统计 value_count

计算从聚合文档中提取的值数量的单值度量聚合。这些值可以从文档中的特定字段中提取,也可以由提供的脚本生成。通常,此聚合器将与其他单值聚合结合使用。

POST /sales/_search?size=0
{
  "aggs" : {
    "types_count" : { "value_count" : { "field" : "type" } }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

返回:

{
  ...
  "aggregations": {
    "types_count": {
      "value": 7
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

总结

本文主要介绍了ES中指标聚合函数的使用。
桶聚合主要是用来做分组的,那么指标聚合就主要是用来做数据计算的
桶聚合和指标聚合一般都会配合使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/778369
推荐阅读
相关标签
  

闽ICP备14008679号