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

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

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

目录
相关文章
es 平行多次聚合查询
es 平行多次聚合查询
102 0
|
分布式计算 大数据 Spark
聚合操作_多维聚合_rollup 案例 | 学习笔记
快速学习聚合操作_多维聚合_rollup 案例
58 0
聚合操作_多维聚合_rollup 案例 | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_rollup | 学习笔记
快速学习聚合操作_多维聚合_rollup
71 0
聚合操作_多维聚合_rollup | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_需求介绍 | 学习笔记
快速学习聚合操作_多维聚合_需求介绍
68 0
聚合操作_多维聚合_需求介绍 | 学习笔记
|
SQL 分布式计算 大数据
聚合操作_多维聚合_cubeSQL | 学习笔记
快速学习聚合操作_多维聚合_cubeSQL
96 0
聚合操作_多维聚合_cubeSQL | 学习笔记
|
SQL 大数据 开发者
聚合操作_多维聚合_GroupedDataset | 学习笔记
快速学习聚合操作_多维聚合_GroupedDataset
215 0
聚合操作_多维聚合_GroupedDataset | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_cube | 学习笔记
快速学习聚合操作_多维聚合_cube
59 0
聚合操作_多维聚合_cube | 学习笔记
|
SQL 分布式计算 Java
聚合操作_groupBy_聚合操作 | 学习笔记
快速学习聚合操作_groupBy_聚合操作
98 0
聚合操作_groupBy_聚合操作 | 学习笔记
|
缓存 索引
ES聚合查询详解(一)
ES聚合查询详解(一)
532 0
|
存储
ES聚合查询详解(四):管道聚合
ES聚合查询详解(四):管道聚合
396 0
ES聚合查询详解(四):管道聚合