ElasticSearch 2 (28) - 信息聚合系列之高层概念
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
ElasticSearch 2 (28) - 信息聚合系列之高层概念的更多相关文章
- ElasticSearch 2 (36) - 信息聚合系列之显著项
ElasticSearch 2 (36) - 信息聚合系列之显著项 摘要 significant_terms(SigTerms)聚合与其他聚合都不相同.目前为止我们看到的所有聚合在本质上都是简单的数学 ...
- ElasticSearch 2 (37) - 信息聚合系列之内存与延时
ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...
- ElasticSearch 2 (38) - 信息聚合系列之结束与思考
ElasticSearch 2 (38) - 信息聚合系列之结束与思考 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 本小节涵盖了许多基本理论以及很多深入的技 ...
- ElasticSearch 2 (35) - 信息聚合系列之近似聚合
ElasticSearch 2 (35) - 信息聚合系列之近似聚合 摘要 如果所有的数据都在一台机器上,那么生活会容易许多,CS201 课商教的经典算法就足够应付这些问题.但如果所有的数据都在一台机 ...
- ElasticSearch 2 (34) - 信息聚合系列之多值排序
ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...
- ElasticSearch 2 (33) - 信息聚合系列之聚合过滤
ElasticSearch 2 (33) - 信息聚合系列之聚合过滤 摘要 聚合范围限定还有一个自然的扩展就是过滤.因为聚合是在查询结果范围内操作的,任何可以适用于查询的过滤器也可以应用在聚合上. 版 ...
- ElasticSearch 2 (32) - 信息聚合系列之范围限定
ElasticSearch 2 (32) - 信息聚合系列之范围限定 摘要 到目前为止我们看到的所有聚合的例子都省略了搜索请求,完整的请求就是聚合本身. 聚合与搜索请求同时执行,但是我们需要理解一个新 ...
- ElasticSearch 2 (31) - 信息聚合系列之时间处理
ElasticSearch 2 (31) - 信息聚合系列之时间处理 摘要 如果说搜索是 Elasticsearch 里最受欢迎的功能,那么按时间创建直方图一定排在第二位.为什么需要使用时间直方图? ...
- ElasticSearch 2 (30) - 信息聚合系列之条形图
ElasticSearch 2 (30) - 信息聚合系列之条形图 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 聚合还有一个令人激动的特性就是能够十分容易地 ...
随机推荐
- The Rock Game
Before the cows head home for rest and recreation, Farmer John wantsthem to get some intellectual st ...
- 日常使用Shell积累
HDFS统计文件行数: hdfs dfs -cat hdfs://ns3/wordcount/* |wc -l
- 在nodeJS中操作文件系统(二)
在nodeJS中操作文件系统(二) 1. 移动文件或目录 在fs模块中,可以使用rename方法移动文件或目录,使用方法如下: fs.rename(oldPath,newPath,call ...
- A Theoretical Analysis of Feature Pooling in Visual Recognition
这篇是10年ICML的论文,但是它是从原理上来分析池化的原因,因为池化的好坏的确会影响到结果,比如有除了最大池化和均值池化,还有随机池化等等,在eccv14中海油在顶层加个空间金字塔池化的方法.可谓多 ...
- 大数据入门第二十天——scala入门(二)scala基础02
一. 类.对象.继承.特质 1.类 Scala的类与Java.C++的类比起来更简洁 定义: package com.jiangbei //在Scala中,类并不用声明为public. //Scala ...
- jQuery.bsgrid
http://thebestofyouth.com/bsgrid/ 支持json.xml数据格式,皮肤丰富并且容易定制,支持表格编辑.本地数据.导出参数构建等实用便捷的功能,容易扩展,更拥有丰富的示例 ...
- 20155308 《网络攻防》 Exp3 免杀原理与实践
20155308 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测 ...
- vue eslint报错解决办法
若提示入下图时,在build / webpack.base.conf.js中, 找到 // const createLintingRule = () => ({// test: /\.(js|v ...
- Scala学习(三)----数组相关操作
数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...
- 07-django项目
1.sql注入,xss攻击,csrf, sql注入 把sql命令插入到web表单,然后提交到所在页面请求,从而达到欺骗服务器执行恶意的sql命令 解决方法:不要使用动态拼接sql,把指令和数据分开,参 ...