我是靠谱客的博主 糊涂发带,最近开发中收集的这篇文章主要介绍ES聚合查询详解(三):指标聚合前言一、简介二、常见的指标聚合函数三、典型使用总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

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


一、简介

指标聚合 Metrics Aggregations

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

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

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

对应的DSL:

POST /order/_search
 {
      "size":0,
      "aggs" : {
          "group_user" : {
              "terms" : {
                "size": 5,
                "field" : "user",
                "order": {
                  "sum_money" : "desc" 
                }
              },
              "aggs": {
                  "sum_money": {
                      "sum": {"field": "money"}
                  }
              }
          }
      }
  }}

说明:
先采用名称为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" } }
  }
}

使用脚本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"
      }
    }
  }
}

2.最大值计算 max

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

3.最大值计算 min

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

4.求和 sum

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

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"  
          }
        }
      }
    }
  }
}

6.唯一值数量统计 value_count

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

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

返回:

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

总结

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

最后

以上就是糊涂发带为你收集整理的ES聚合查询详解(三):指标聚合前言一、简介二、常见的指标聚合函数三、典型使用总结的全部内容,希望文章能够帮你解决ES聚合查询详解(三):指标聚合前言一、简介二、常见的指标聚合函数三、典型使用总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部