ElasticSearch 2 (28) - 信息聚合系列之高层概念
2016-03-23 17:03
495 查看
ElasticSearch 2 (28) - 信息聚合系列之高层概念
摘要
和查询表达式(query DSL)一样,聚合也有一种可编辑的语法:可以根据我们的需要混合以及匹配使用独立的功能单元。这也就是说我们只要学习很少的基本概念,就能将它们进行无限组合,从而实现不同的功能。要掌握聚合,只需要理解下面两个主要概念:
桶(Buckets)
满足某个条件的文档集合
度量(Metrics)
对于某个桶的文档计算出的统计信息
就这么多!每个聚合不过是一个或多个桶以及零个或多个度量的组合。粗暴的翻译成 SQL 语句:
SELECT COUNT(color) #1 FROM table GROUP BY color #2
#1
COUNT(color)与度量等价。
#2
GROUP BY color与桶等价。
桶从概念上与 SQL 里面的分组结果类似,而度量与
COUNT()、
SUM()、
MAX()等类似。
让我们深入分析这两个概念看看它们到底是什么。
版本
elasticsearch版本: elasticsearch-2.x内容
桶(Buckets)
简单的说桶就是满足某个条件的文档的集合:一个员工要么属于桶 男(male) 要么属于桶 女(female) 。
城市 Albany 属于桶 纽约州(New York)
日期 2014-10-28 属于桶 十月(October) 。
当聚合执行的时候,会计算每个文档的数值来判断它们是否满足一个桶的条件。如果满足,文档则会被置入这个桶然后聚合会继续执行。
桶也可以与其他桶嵌套使用,为我们提供一个层级化或条件化的分割策略。例如,辛辛那提(Cincinnati)会被置入俄亥俄州(Ohio state)这个桶,而整个俄亥俄(Ohio)桶会被置入美国(USA)这个桶。
Elasticsearch 有各种各样的桶划分方式,它允许我们以不同方式对文档进行分割(按小时、最受欢迎词、年龄段、地理位置及其他)但根本上说它们都遵从一个原则:按条件分割文档。
度量(Metrics)
桶让我们可以将文档分割成有用的子集,但我们最终想要的是基于每个桶内所有文档计算的度量结果。装桶只是我们达到目的的手段:它为我们提供了能够对文档进行分组,并且计算它们有趣度量信息的一种方式。多数度量只是简单的数学操作(例如:求最小值、求平均值、求最大值以及求和),它们使用文档里的值进行计算。在实际中,我们可以利用度量功能计算例如平均薪水、最高售价以及 95% 的查询时延。
两者联合(Combining the Two)
聚合是由桶和度量组成的。一个聚合可能有一个桶,或一个度量,或者每个都有。它甚至可以有多个桶嵌套在其他桶之内。例如,我们可以将文档按国家分割到不同桶,然后计算每个国家的平均薪水(度量)。因为桶是可以嵌套的,我们可以衍生出更加复杂的聚合:
按国家(桶)分割文档。
然后按性别(桶)分割每个国家的文档。
然后按年龄段(桶)分割每种性别的文档。
最后,计算每个年龄段的平均薪水(度量)。
这样就能得到按
<country, gender, age>(国家、性别、年龄)分组的平均薪水。所有的信息只需一个请求、一次数据传递就能得到。
参考
elastic.co: High-Level Concepts相关文章推荐
- Java学习笔记(一)
- hession的使用
- Java enum的用法详解
- 与WebGL有关的教程与实例
- radio接收并显示后台传值
- 关于java Socket Connection timed out: connect
- P2P之UDP穿透NAT的原理与实现 - 增强篇(附修改过的源代码)
- 谈谈开发人员自测——黑盒测试
- 打印程序入门
- 迭代子模式
- 关于APK签名
- Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)
- 【jQuery源码】jQuery对象初始化
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
- hdu 2795 Billboard
- Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库
- Flowplayer-一款免费的WEB视频播放器
- weak、 _weak、 _block的格式
- 详解Objective-C设计模式编程中对备忘录模式的运用
- Moore-Penrose广义逆矩阵