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)

聚合是由桶和度量组成的。一个聚合可能有一个桶,或一个度量,或者每个都有。它甚至可以有多个桶嵌套在其他桶之内。例如,我们可以将文档按国家分割到不同桶,然后计算每个国家的平均薪水(度量)。

因为桶是可以嵌套的,我们可以衍生出更加复杂的聚合:

  1. 按国家(桶)分割文档。
  2. 然后按性别(桶)分割每个国家的文档。
  3. 然后按年龄段(桶)分割每种性别的文档。
  4. 最后,计算每个年龄段的平均薪水(度量)。

这样就能得到按 <country, gender, age> (国家、性别、年龄)分组的平均薪水。所有的信息只需一个请求、一次数据传递就能得到。

参考

elastic.co: High-Level Concepts

ElasticSearch 2 (28) - 信息聚合系列之高层概念的更多相关文章

  1. ElasticSearch 2 (36) - 信息聚合系列之显著项

    ElasticSearch 2 (36) - 信息聚合系列之显著项 摘要 significant_terms(SigTerms)聚合与其他聚合都不相同.目前为止我们看到的所有聚合在本质上都是简单的数学 ...

  2. ElasticSearch 2 (37) - 信息聚合系列之内存与延时

    ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...

  3. ElasticSearch 2 (38) - 信息聚合系列之结束与思考

    ElasticSearch 2 (38) - 信息聚合系列之结束与思考 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 本小节涵盖了许多基本理论以及很多深入的技 ...

  4. ElasticSearch 2 (35) - 信息聚合系列之近似聚合

    ElasticSearch 2 (35) - 信息聚合系列之近似聚合 摘要 如果所有的数据都在一台机器上,那么生活会容易许多,CS201 课商教的经典算法就足够应付这些问题.但如果所有的数据都在一台机 ...

  5. ElasticSearch 2 (34) - 信息聚合系列之多值排序

    ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...

  6. ElasticSearch 2 (33) - 信息聚合系列之聚合过滤

    ElasticSearch 2 (33) - 信息聚合系列之聚合过滤 摘要 聚合范围限定还有一个自然的扩展就是过滤.因为聚合是在查询结果范围内操作的,任何可以适用于查询的过滤器也可以应用在聚合上. 版 ...

  7. ElasticSearch 2 (32) - 信息聚合系列之范围限定

    ElasticSearch 2 (32) - 信息聚合系列之范围限定 摘要 到目前为止我们看到的所有聚合的例子都省略了搜索请求,完整的请求就是聚合本身. 聚合与搜索请求同时执行,但是我们需要理解一个新 ...

  8. ElasticSearch 2 (31) - 信息聚合系列之时间处理

    ElasticSearch 2 (31) - 信息聚合系列之时间处理 摘要 如果说搜索是 Elasticsearch 里最受欢迎的功能,那么按时间创建直方图一定排在第二位.为什么需要使用时间直方图? ...

  9. ElasticSearch 2 (30) - 信息聚合系列之条形图

    ElasticSearch 2 (30) - 信息聚合系列之条形图 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 聚合还有一个令人激动的特性就是能够十分容易地 ...

随机推荐

  1. 2018.4.26 Mac安装Redis5.0.3版本服务器

    Mac安装Redis服务器 安装 1.到官网下载 选择稳定版本 打开官网:https://redis.io/ 2.下载完成后,打开命令行工具,执行解压命令 tar zxvf redis-5.0.3.t ...

  2. springmvc与ajax交互常见问题

    这是我个人再编写博客系统的时候,因个人疏忽犯下的低级错误. 不过犯错是一件好事,有助于总结. 1.关于参数前加@RequestBody 如果是使用ajax交互时,必须要加上这个contentType: ...

  3. post请求体过大导致ngx.req.get_post_args()取不到参数体的问题

    http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size 该地址对于client_body_buf ...

  4. Scrapy 框架(二)数据的持久化

    scrapy数据的持久化(将数据保存到数据库) 一.建立项目 1.scrapy startproject dushu 2.进入项目 cd dushu 执行:scrapy genspider -t cr ...

  5. grpc & pb 环境配置

    grpc 官方中文文档:http://doc.oschina.net/grpc?t=60140 grpc github仓库:https://github.com/grpc/grpc protobuf ...

  6. setInterval() 方法应用

    setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭.由 s ...

  7. 20155333 《网络对抗》 Exp6 信息搜集与漏洞扫描

    20155333 <网络对抗> Exp6 信息搜集与漏洞扫描 基础问题 哪些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和 ...

  8. mysql存储blob限制

    一.Mysql存储类型分类: 1.blob:二进制大对象(字节流),可以用来存储图片.视频等,没有字符集的说法 2.text:文本大对象(字符流),存储大型字串,有字符集的说法 3.二者使用时不能指定 ...

  9. 汇编 if else

    知识点: if else 逆向还原代码 一.了解if else结构 sub esp, |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-] 0040102C |. 3B45 ...

  10. 解决 idea 中的 tomcat控制台 和cmd tomcat下的中文乱码问题(win10 64位)

    原理:idea控制台里的日志默认是从tomcat的localhost.log 和 catalina.log 两个文件中读出来的. https://blog.csdn.net/zhaijingkui/a ...