aggregation分类

aggregations —— 聚合,提供了一种基于查询条件来对数据进行分桶、计算的方法。有点类似于 SQL 中的 group by 再加一些函数方法的操作。

聚合可以嵌套,由此可以组成复杂的操作(Bucketing聚合可以包含sub-aggregation)。

聚合整体上可以分为 3 类:

1. Bucketing:桶分聚合:

  • 此类聚合执行的是对文档分组的操作,把满足相关特性的文档分到一个桶里,即桶分。输出结果往往是一个个包含多个文档的桶。
  • 此类聚合会有一个关键字(field、script),以及一些桶分(分组)的判断条件。执行聚合操作时候,文档会判断每一个分组条件,如果满足某个,该文档就会被分为该组(fall in)。

2. Metric:指标聚合:

  • 此类聚合是对文档进行一些权值计算(比如求所有文档某个字段的max值)。输出结果往往是文档的权值,相当于为文档添加了一些统计信息。
  • 此类聚合基于特定字段(field)或脚本值(generated using scripts),计算聚合中文档的权值。

3. Pipeline:管道聚合:

  • 对其它聚合操作的输出及其关联指标进行聚合。
  • 此类聚合的作用对象往往是桶,而不是文档,是一种后期对每个分桶的一些计算操作。

应用场景

对于 3 中聚合,常见的应用场景如下流程:

buckets 聚合对文档进行必要的归类(桶分) ——> metric 聚合对每个桶进行一些额外的信息计算(如:max) ——> pipeline 聚合针对所有桶做一些桶层面的统计或计算

应用示例:

{
"aggs" : {
"sales_per_month" : {
"date_histogram" : { // bucket 聚合,按照月份进行分桶,每个月的归属一个桶
"field" : "date",
"interval" : "month"
},
"aggs": {
"sales": {
"sum": { // metric 聚合,对每个桶类的 price 求和,即每月的销售额
"field": "price"
}
}
}
},
"max_monthly_sales": {
"max_bucket": { // pipeline 聚合,求所有桶中销售额 sales 最大的值
"buckets_path": "sales_per_month>sales"
}
}
}
}

aggregation结构

聚合可以是父子(嵌套)关系聚合,buckets 聚合作为父,metric 聚合作为子。

聚合也可以是兄弟关系聚合,buckets 聚合在前,pipeline 聚合在后。

结构如下:

"aggregations" : {                                //定义聚合对象,也可用 "aggs"
"<aggregation_name>" : { //聚合的名称,用户自定义
"<aggregation_type>" : { //聚合类型,比如 "histogram"
<aggregation_body> //每个聚合类型都有其自己的结构定义
}
[,"meta" : { [<meta_data_body>] } ]?
[,"aggregations" : { [<sub_aggregation>]+ } ]? //可以定义多个 sub-aggregation
}
[,"<aggregation_name_2>" : { ... } ]* //定义额外的多个平级 aggregation,只有 Bucketing 类型才有意义
}

最新文章

  1. SharedPreferences 的另一种场景的用法
  2. QT 删除文件指定目录
  3. Random Javascript code snippets
  4. spring mvc总结1
  5. iOS设计中的“代理”
  6. 虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte
  7. Visual Studio蛋疼问题解决
  8. vim快捷键笔记【原创】
  9. [Everyday Mathematics]20150304
  10. ubuntu server修改时区
  11. 图片样式 scaleType 属性
  12. SqlServer 自动备份、自动删除7天前备份
  13. C语言,如何产生随机数
  14. CSS命名实践
  15. Head First设计模式之解释器模式
  16. Java中==与equals()的区别
  17. 记一次完整的asp.net-mvc页面优化过程
  18. zTree动态初始化树形结构加载
  19. Qt写websocketpp服务端
  20. Go学习笔记07-结构体与方法

热门文章

  1. (转载)HTML与XHTML有什么区别
  2. FZU 2105-Digits Count(线段树延时标记)
  3. POJ 3140-Contestants Division(树形dp)
  4. 黑盒测试用例设计方法&amp;理论结合实际 -&gt; 错误推断法
  5. 【原创】LoadRunner Java Vuser脚本的配置和调试指南
  6. NGUI如何创建自己的精灵图集
  7. HW7.11
  8. 29个你必须知道的Linux命令
  9. 声明了包的类Java命令找不到或无法加载主类
  10. 在C#中实现软件自动升级