博主信息
Sky
博文
291
粉丝
0
评论
0
访问量
7183
积分:0
P豆:617

Elasticsearch aggs 聚合

2021年10月20日 20:47:45阅读数:21博客 / Sky

桶和指标

SELECT COUNT(color)
FROM table
GROUP BY color

COUNT(color) 相当于指标。GROUP BY color 相当于桶.

桶 简单来说就是满足特定条件的文档的集合:

一个雇员属于 男性 桶或者 女性 桶奥尔巴尼属于 纽约 桶日期2014-10-28属于 十月 桶

桶能让我们划分文档到有意义的集合, 但有意义的是对这些桶内的文档进行一些指标的计算。

分桶是一种达到目的的手段:它提供了一种给文档分组的方法来让我们可以计算感兴趣的指标。

大多数 指标 是简单的数学运算(例如最小值、平均值、最大值,还有汇总)

尝试聚合

以每个标签作为桶, 比如:

{
“size”: 0,
“aggs”: {
“tag”: {
“terms”: {
“field”: “tag_id”
}
}
}
}

添加指标每个标签的总消耗

{
 "size": 0,
 "aggs": {
   "tag": {
     "terms": {
       "field": "tag_id"
     },
     "aggs": {
       "total_cost": {
         "sum": {
           "field": "cost"
         }
       }
     }
   }
 }}

标签消耗中,嵌套桶 每个设计师拥有素材

{
 "size": 0,
 "aggs": {
   "tag": {
     "terms": {
       "field": "tag_id"
     },
     "aggs": {
       "total_cost": {
         "sum": {
           "field": "cost"
         }
       },
       "designer": {
         "terms": {
           "field": "designer_id"
         }
       }
     }
   }
 }}

标签消耗中,嵌套桶 每个设计师最大、二手买卖最小消耗

{
 "size": 0,
 "aggs": {
   "tag": {
     "terms": {
       "field": "tag_id"
     },
     "aggs": {
       "total_cost": {
         "sum": {
           "field": "cost"
         }
       },
       "designer": {
         "terms": {
           "field": "designer_id"
         },
         "aggs": {
           "avg_cost": {
             "avg": { "field": "cost" }
           },
           "max_cost": {
             "max": { "field": "cost" }
           }
         }
       }
     }
   }
 }}

条形图

date_histogram (和 histogram 一样)默认只会返回文档数目非零的 buckets

基础条形图

histogram 桶要求两个参数:一个数值字段以及一个定义桶大小间隔。sum 度量嵌套在每个售价区间内,用来显示每个区间内的总收入。

例子:展示&点击之间关系

{
  "size" : 0,
  "aggs":{
     "show":{
        "histogram":{
           "field": "show",
           "interval": 1000
        },
        "aggs":{
           "total_click": {
              "sum": {
                "field" : "click"
              }
            }
        }
     }
  }}

按时间统计

每月素材多少展示?

{
  "size" : 0,
  "aggs": {
     "show": {
        "date_histogram": {
           "field": "show",
           "interval": "month",
           "format": "yyyy-MM-dd"
        }
     }
  }}

buckets 中没有文档也返回,需要设置两个参数来实现效果:

{
  "size" : 0,
  "aggs": {
     "show": {
        "date_histogram": {
           "field": "show",
           "interval": "month",
           "format": "yyyy-MM-dd",
           "min_doc_count" : 0,
           "extended_bounds" : {
               "min" : "2019-01-01",
               "max" : "2019-12-31"
           }
        }
     }
  }}
min_doc_count这个参数强制返回空 buckets。extended_bounds这个参数强制返回整年。 // 存疑

// 作为例子,我们构建聚合以便按季度展示所有汽车品牌总销售额。同时按季度、按每个汽车品牌计算销售总额,以便可以找出哪种品牌最赚钱:

{
  "size" : 0,
  "aggs": {
     "sales": {
        "date_histogram": {
           "field": "sold",
           "interval": "quarter",
           "format": "yyyy-MM-dd",
           "min_doc_count" : 0
        },
        "aggs": {
           "per_make_sum": {
              "terms": { "field": "make" },
              "aggs": {
                 "sum_price": { "sum": { "field": "price" } }
              }
           },
           "total_sum": {
              "sum": { "field": "price" }
           }
        }
     }
  }}

范围限定的聚合编辑

id = 259的设计师素材展示&消耗

{
   "query" : {
       "match" : { "designer_id" : "259" }
   },
   "size":0,
   "aggs" : {
       "avg_show": { "avg": { "field": "show" } },
       "avg_cost": { "avg": { "field": "cost" } }
   }}

id = 259的设计师素材展示&消耗 与 全部素材做对比

{
   "query" : {
       "match" : {
           "designer_id" : "259"
       }
   },
   "size":0,
   "aggs" : {
    "avg_show": {
          "avg": { "field": "show" }
       },
       "avg_cost": {
          "avg": { "field": "cost" }
       },
       "all": {
           "global" : {},
           "aggs" : {
  "all_avg_show": {
                 "avg": { "field": "show" }
              },
              "all_avg_cost": {
                 "avg": { "field": "cost" }
              }
           }
       }
   }}

聚合过滤

消耗大于 1000 的素材 平均消耗

{
   "size" : 0,
   "query" : {
       "constant_score": {
           "filter": {
               "range": {
                   "cost": { "gte": 1000 }
               }
           }
       }
   },
   "aggs" : {
       "single_avg_cost": { "avg" : { "field" : "cost" } },
       "per_designer_sum": {
          "terms": { "field": "designer_id" },
          "aggs":{
             "single_avg_cost": { "avg" : { "field" : "cost" } },
             "single_avg_show": { "avg" : { "field" : "show" } }
          }
      }
   }}

聚合计算

{
 "size": 0,
 "aggs": {
   "tag_aggs": {
     "terms": {
       "field": "tag_id"
     },
     "aggs": {
       "sum_cost": {
         "sum": {
           "field": "cost"
         }
       },
       "sum_show": {
         "sum": {
           "field": "show"
         }
       },
       "cpm": {
         "bucket_script": {
           "buckets_path": {
             "total_cost": "sum_cost",
             "total_show": "sum_show"
           },
           "script": "( params.total_cost / params.total_show ) * 1000"
         }
       }
     }
   }
 }}



版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 负载均衡中链路的三种方式分别是手工负载分担模式链路、静态LACP模式链路、动态LACP模式链路。其中手工负载分担模式是一种最基本的链路方式。
    SQL Server中的函数有:1、AVG;2、COUNT;3、MAX;4、SUM;5、COUNT_BIG;6、MIN;7、GROUPING;8、VAR;9、STDEV;10、VARP。
    SQL函数有:1、AVG函数;2、COUNT函数;3、MAX函数;4、MIN函数;5、SUM函数;6、GROUPING函数;7、CHECKSUM函数;8、STDEV函数;9、STDEVP函数;10、
    本文介绍MySQL基本使用之DCL语句和函数。
    本文来自java入门程序,文中为大家详细介绍了高内低耦的概念,希望能帮助大家更好地理解这个概念。高内低耦是判断软件设计好坏的标准,主要用于程序的面向对象的设计。
    mysql函数用法:1、使用SELECT语句返回系列值的总数,代码为【SELECT SUM(数量) AS 总数】;2、使用AVG函数计算平均数,代码为【SELECT AVG(单价* 数量) As 平均金额
    MySQL函数如下:avg()返回某列的平均值count()返回某列的行数max()返回某列的最大值min()返回某列的最小值sum()返回某列值的和...
    下面由thinkphp教程栏目给大家介绍ThinkPHP数据库操作之查询、时间查询、高级查询,希望对需要的朋友有所帮助!
    mysql中group by的用法是配函数,利用分组信息进行统计,语句如“select name,sum(id) from test group by name,number”。
    mysql having用法是筛选条件,having和group by是组着用的,且having后的判断字段必须是函数返回的结果,代码为【select cid,count(id) nums from
    sql语句执行顺序:1、最先执行from tab;2、where语句是对条件加以限定;3、分组语句【group by…… having】;4、函数;5、select语句;6、order by排序语句
    本栏目讲解MySQL函数,有常用函数、函数、数据库级别的MD5加密,讲解详细,有需要的朋友可以看看,了解了解。
    数据库函数有:1、数学函数【abs(x)、bin(x)】;2、函数【avg(col)】;3、字符串函数【ascii(char)】;4、日期和时间函数【curdate()】;5、加密函数【decode
    feed流是持续更新并呈现给用户内容的信息流,feed是将用户主动订阅的若干消息源组在一起形成内容器,帮助用户持续地获取最新的订阅源内容。
    javascript去除特定字符的方法是:1、使用replace函数替换,语法“元素.replace('需要去除的字符串', '')”;2、使用字符串分割函数再
    在SQL查询中GROUP BY的含义是根据指定的规则对数据进行分组,其作用是将查询结果按某一列或多列的值进行分组,值相等的为一组,GROUP BY语句一般是和函数进行配使用。
    jar是一种软件包文件格式,通常用于大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件;JAR文件是一种归档文件,以ZIP格式构建,以“.jar”为文件扩展名。
    结构类型是一种允许把一些数据分量成一个整体的数据类型,它能够把有内在联系的不同类型的数据统一成一个整体,使它们相互关联。
    vue.js轻量的原因:1、【Vue.js】的目标是通过尽可能简单的API实现响应的数据绑定和组的视图组件;2、【Vue.js】自身不是一个全能框架,它只焦于视图层。
    数据清洗的方法包括:1、分箱法,就是将需要处理的数据根据一定的规则放进箱子里,然后进行测试;2、回归法,就是利用函数的数据进行绘制图像,然后对图像进行光滑处理;3、类法,就是将抽象的对象进行集分组,