ES聚合查询详解(三):指标聚合

简介: 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的数据。


二、常见的指标聚合函数


12.png


三、典型使用


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_histogram 或 composite聚合中使用。它计算每个存储桶中的文档或字段的速率。字段值可以从文档中的特定数值或直方图字段中提取。


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中指标聚合函数的使用。

桶聚合主要是用来做分组的,那么指标聚合就主要是用来做数据计算的。

桶聚合和指标聚合一般都会配合使用。

目录
相关文章
|
6月前
|
SQL 安全 数据挖掘
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
Elasticsearch聚合查询用于复杂数据分析,包括统计空值率。示例展示了如何计算字段`my_field`非空非零文档的百分比。查询分为三步:总文档数计数、符合条件文档数计数及计算百分比。聚合概念涵盖度量、桶和管道聚合。脚本在聚合中用于动态计算。常见聚合类型如`sum`、`avg`、`date_histogram`等。组合使用可实现多值统计、嵌套聚合和空值率计算。[阅读更多](https://zhangfeidezhu.com/?p=515)
316 0
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
|
6月前
|
存储 缓存 自然语言处理
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
|
7月前
|
SQL 搜索推荐 数据库
8. 聚合查询
8. 聚合查询
|
存储
ES聚合查询详解(四):管道聚合
ES聚合查询详解(四):管道聚合
566 0
ES聚合查询详解(四):管道聚合
|
分布式计算 大数据 Spark
聚合操作_多维聚合_rollup 案例 | 学习笔记
快速学习聚合操作_多维聚合_rollup 案例
聚合操作_多维聚合_rollup 案例 | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_rollup | 学习笔记
快速学习聚合操作_多维聚合_rollup
聚合操作_多维聚合_rollup | 学习笔记
|
SQL 大数据 开发者
聚合操作_多维聚合_GroupedDataset | 学习笔记
快速学习聚合操作_多维聚合_GroupedDataset
265 0
聚合操作_多维聚合_GroupedDataset | 学习笔记
|
SQL 分布式计算 大数据
聚合操作_多维聚合_cubeSQL | 学习笔记
快速学习聚合操作_多维聚合_cubeSQL
122 0
聚合操作_多维聚合_cubeSQL | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_需求介绍 | 学习笔记
快速学习聚合操作_多维聚合_需求介绍
117 0
聚合操作_多维聚合_需求介绍 | 学习笔记
|
存储 SQL 关系型数据库
ES聚合查询详解(二):桶聚合
ES聚合查询详解(二):桶聚合
482 0
ES聚合查询详解(二):桶聚合