前言

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聚合查询详解(三):指标聚合相关推荐

  1. ES聚合查询详解(二):桶聚合

    前言 前面介绍了ES的简单使用,并说明了ES聚合查询主要分为3类:指标聚合.桶聚合和管道聚合. 本文主要是介绍其中桶聚合的相关使用. 一.桶聚合 Bucket 聚合不像Metric聚合那样计算字段上的 ...

  2. ES聚合查询详解(四):管道聚合

    前言 前面已经介绍了指标聚合和桶聚合的使用,本文继续介绍管道聚合. 一.简介 管道聚合 Pipeline aggregations 官方文档:Pipeline Aggregations 管道聚合主要用 ...

  3. mongodb聚合查询优化_MongoDB聚合查询详解

    聚合操作主要用于处理数据并返回计算结果.聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和.平均值.最大值.最小值)以返回单个结果. MongoDB 提供了三种执行聚合的方法 ...

  4. 【Elasticsearch】es 各种查询 详解

    文章目录 1.概述 1.4 为什么使用ES查询快? 1.5 ES几种查询方式的对比 1.6 查询调优 2. 基础查询 2.1 nust查询 2.2 nust_not 查询 2.3 should查询 2 ...

  5. es基本语句详解 查询语句详解

    es基本语句详解 查询语句详解 声明 Rest风格 索引的基本操作 1. 创建一个索引 2. 查看索引 我们使用elasticsearch-head 3. 删除索引 其它命令 ==文档的基本操作(重点 ...

  6. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  7. pandas php,pandas分组聚合代码详解

    pandas分组聚合代码详解 本篇文章小编给大家分享一下pandas分组聚合代码详解,对大家学习pandas分组聚合有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看 ...

  8. mysql的所有聚合函数_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  9. [联邦学习] FedAvg聚合算法详解及代码实现

    该文章首发于若绾 [联邦学习] FedAvg聚合算法详解及代码实现,转载请标注出处. 论文原文:Communication-Efficient Learning of Deep Networks fr ...

最新文章

  1. JDBC连接数据库总结
  2. 一行Java代码实现将数组转成List
  3. leetcode 284. Peeking Iterator | 284. 顶端迭代器(给 iterator 添加 peek 方法)
  4. PAT乙级(1007 素数对猜想)
  5. Android WebView 使用漏洞问题
  6. 黑科技:Wi-Fi热点智能垃圾桶现身纽约
  7. ImportError: cannot import name 'imresize'
  8. 关于Multi-bin实现的一些翻译
  9. 电商实训三:网店经营
  10. Vs2019 打包项目程序和安装卸载程序
  11. ios抓jdwskey
  12. IT计算机实习:JAVA实习报告范文(一)
  13. linux格式化u盘给win7,u盘一直显示格式化在虚拟机上安装win7系统怎么安装linux
  14. Maven自动更新SNAPSHOT包
  15. 在线绘图软件——ProcessOn
  16. 个人ACM模板(待持续补充)
  17. List的contains方法老是返回false的解决法
  18. 道阻且长 莫失本心(我的OI之旅
  19. 警告:计算出的值未被使用warning: value computed is not used [-Wunused-value]
  20. c++/mfc 播放音乐,视频文件

热门文章

  1. 深度学习之江湖~那些大神们,不相信只有我一个人爱八卦
  2. Centos 7 新系统常用配置
  3. 鸿蒙操作系统连接汽车,鸿蒙操作系统发布!万物互联的超级终端 华为上车令人无限遐想...
  4. 《Unity 游戏案例开发大全》一导读
  5. 在设置静态ip地址时ip地址变为乱码的问题
  6. android自动化测试之手机自动化测试工具基本原理,学习笔记之Android自动化测试工具Monkey...
  7. 【leetcode刷题】36.提莫攻击——Java版
  8. 吴军:如果没有智能技术,几乎不要想做到世界最好
  9. STM32F103--485modbus通信实验
  10. 月入1.7w的淘客,2019年转型做高佣联盟还需要提高哪些技能