首页 > 其他分享 >ES聚合查询详解(三):指标聚合

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

时间:2022-12-07 17:41:46浏览次数:49  
标签:search 聚合 money field 详解 aggs ES size


前言

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

二、常见的指标聚合函数

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

三、典型使用

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中指标聚合函数的使用。
​​​桶聚合主要是用来做分组的,那么指标聚合就主要是用来做数据计算的​​​。
桶聚合和指标聚合一般都会配合使用。


标签:search,聚合,money,field,详解,aggs,ES,size
From: https://blog.51cto.com/u_15905482/5919822

相关文章

  • ES中复杂DSL查询语句不会写怎么办?
    前言刚接触ES不久的同学一定都遇到过这样的问题,复杂的查询场景下不知道怎么写DSL查询语句,今天教大家一个小妙招,解决复杂DSL语句不会写的问题。一、来吧,展示巧用大招:ES7以......
  • Mysql连接查询详解
    前言记得刚工作几年的时候,就写了一篇关于Mysql连接查询的博客文章,里面简单的认为先对关联表的记录进行笛卡尔积,然后再根据where条件过滤,现在看来有点贻笑大方了。正好最近看......
  • logback性能优化详解
    前言不正确的日志打印不但会降低程序运行性能,还会占用大量IO资源和硬盘存储空间。本文主要总结一些能提高日志打印性能的手段。一、通过AsyncAppender异步输出日志我们通常......
  • logback异步输出日志详解
    前言logback应该是目前最流行的日志打印框架了,毕竟SpringBoot中默认的集成的日志框架也是logback。在实际项目开发过程中,常常会遇到由于打印大量日志而导致程序并发降低,QPS......
  • 通过Logstash实现mysql数据定时增量同步到ES
    文章目录​​前言​​​​一、系统配置​​​​二、同步步骤整体概览​​​​三.logstash数据同步实战​​​​1、新建mysql表​​​​2、ES中新建索引​​​​3、Logstash......
  • mybatis一级缓存和二级缓存使用详解
    文章目录​​一、概念说明​​​​1、一级缓存​​​​2、二级缓存​​​​3、比较​​​​二、mybatis缓存的生命周期​​​​三、一级缓存的使用​​​​四、二级缓存的使......
  • mybatis-plus雪花算法生成Id使用详解
    文章目录​​前言​​​​一、mybatis-plus官网​​​​二、雪花算法实战​​​​1.建表​​​​2.新建测试工程​​​​3.单元测试​​​​三、实现分析​​​​四、为什么......
  • Mybatis-Plus字段策略FieldStrategy详解
    文章目录​​前言​​​​一、官方文档​​​​二、字段策略介绍​​​​1、FieldStrategy作用​​​​2、FieldStrategy类型​​​​3、FieldStrategy配置​​​​全局策略......
  • cesium加载倾斜摄影,添加billboard并注册点击事件
       完整示例代码如下:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>天地图</title><!--引用cesium的js和css,天地图的扩展js--......
  • 使用@RequestPart同时上传表单数据和文件(文件与JSON数据同时上传)
    前端接口上传文件的时候,通常会将请求header的content-type设置为:multipart/form-data,或者form表单提交的时候将enctype设置为"multipart/form-data"。后端收到请求时......