[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标)

翻译 2015年01月04日 10:03:00

本章翻译自Elasticsearch官方指南的Aggregations-High-level Concepts一章。


高层概念(High-Level Concepts)

和查询DSL一样,聚合(Aggregations)也拥有一种可组合(Composable)的语法:独立的功能单元可以被混合在一起来满足你的需求。这意味着需要学习的基本概念虽然不多,但是它们的组合方式是几近无穷的。

为了掌握聚合,你只需要了解两个主要概念:

Buckets(桶):

满足某个条件的文档集合。

Metrics(指标):

为某个桶中的文档计算得到的统计信息。

就是这样!每个聚合只是简单地由一个或者多个桶,零个或者多个指标组合而成。可以将它粗略地转换为SQL:

SELECT COUNT(color) 
FROM table
GROUP BY color

以上的COUNT(color)就相当于一个指标。GROUP BY color则相当于一个桶。

桶和SQL中的组(Grouping)拥有相似的概念,而指标则与COUNT(),SUM(),MAX()等相似。

让我们仔细看看这些概念。


桶(Buckets)

一个桶就是满足特定条件的一个文档集合:

  • 一名员工要么属于男性桶,或者女性桶。
  • 城市Albany属于New York州这个桶。
  • 日期2014-10-28属于十月份这个桶。

随着聚合被执行,每份文档中的值会被计算来决定它们是否匹配了桶的条件。如果匹配成功,那么该文档会被置入该桶中,同时聚合会继续执行。

桶也能够嵌套在其它桶中,能让你完成层次或者条件划分这些需求。比如,Cincinnati可以被放置在Ohio州这个桶中,而整个Ohio州则能够被放置在美国这个桶中。

ES中有很多类型的桶,让你可以将文档通过多种方式进行划分(按小时,按最流行的词条,按年龄区间,按地理位置,以及更多)。但是从根本上,它们都根据相同的原理运作:按照条件对文档进行划分。


指标(Metrics)

桶能够让我们对文档进行有意义的划分,但是最终我们还是需要对每个桶中的文档进行某种指标计算。分桶是达到最终目的的手段:提供了对文档进行划分的方法,从而让你能够计算需要的指标。

多数指标仅仅是简单的数学运算(比如,min,mean,max以及sum),它们使用文档中的值进行计算。在实际应用中,指标能够让你计算例如平均薪资,最高出售价格,或者百分之95的查询延迟。


将两者结合起来

一个聚合就是一些桶和指标的组合。一个聚合可以只有一个桶,或者一个指标,或者每样一个。在桶中甚至可以有多个嵌套的桶。比如,我们可以将文档按照其所属国家进行分桶,然后对每个桶计算其平均薪资(一个指标)。

因为桶是可以嵌套的,我们能够实现一个更加复杂的聚合操作:

  1. 将文档按照国家进行分桶。(桶)
  2. 然后将每个国家的桶再按照性别分桶。(桶)
  3. 然后将每个性别的桶按照年龄区间进行分桶。(桶)
  4. 最后,为每个年龄区间计算平均薪资。(指标)

此时,就能够得到每个<国家,性别,年龄>组合的平均薪资信息了。它可以通过一个请求,一次数据遍历来完成!



ElasticSearch Aggregations 分析

承接上篇文章 ElasticSearch Rest/RPC 接口解析,这篇文章我们重点分析让ES步入数据分析领域的Aggregation相关的功能和设计。 前言我记得有一次到一家公司做内部分享,然后有...
  • allwefantasy
  • allwefantasy
  • 2016年03月04日 21:57
  • 3427

ElasticSearch Aggregation Bucket 实例分析

在前文 ElasticSearch Aggregations 分析 中,我们提及了 【Aggregation Bucket的实现】,然而只是用文字简要描述了原理。今天这篇文章会以简单的类似grouyB...
  • allwefantasy
  • allwefantasy
  • 2016年03月04日 21:58
  • 3930

ElasticSearch 的 聚合(Aggregations)

Elasticsearch有一个功能叫做 聚合(aggregations) ,它允许你在数据上生成复杂的分析统计。它很像SQL中的 GROUP BY 但是功能更强大。 Aggregations种类...
  • mlljava1111
  • mlljava1111
  • 2017年04月24日 15:36
  • 1170

使用 ElasticSearch Aggregations 进行统计分析

ElasticSearch 的特点随处可见:基于 Lucene 的分布式搜索引擎,友好的 RESTful API…… 大部分文章都围绕 ELK Stack 和全文搜索展开,本文试图用一个小案例来...
  • zxjiayou1314
  • zxjiayou1314
  • 2016年12月23日 12:00
  • 7181

Kibana基本使用

1. 定义你的索引模式匹配 2. 数据可视化:不只是发现数据 3.
  • ming_311
  • ming_311
  • 2016年02月01日 17:39
  • 92564

实时搜索引擎Elasticsearch(4)——Aggregations (聚合)API的使用

本篇将介绍ES提供的聚合API的使用。ES提供的聚合功能可以用来进行简单的数据分析。本文仍然以上一篇提供的数据为例来讲解。...
  • xialei199023
  • xialei199023
  • 2015年09月08日 21:57
  • 25628

ElasticSearch 6.x 学习笔记:22.桶聚合

为了满足桶聚合多样性需求,修改文档如下。 DELETE my-index PUT my-index PUT my-index/persion/1 { "name":"张三", "ag...
  • chengyuqiang
  • chengyuqiang
  • 2018年01月19日 23:16
  • 231

Elasticsearch java API (18)Aggregations 聚合 Bucket

桶聚合编辑 全球聚合编辑 下面是如何使用 Global Aggregation 与Java API。 准备聚合请求编辑 这里有一个例子关于如何创建聚合的要求:A...
  • u012116196
  • u012116196
  • 2016年06月30日 14:20
  • 4432

关于Elasticsearch里面聚合group的坑

原来知道Elasticsearch在分组聚合时有一些坑但没有细究,今天又看了遍顺便做个笔记和大家分享一下。 我们都知道Elasticsearch是一个分布式的搜索引擎,每个索引都可以有多个分片,用来...
  • u010454030
  • u010454030
  • 2017年05月12日 20:36
  • 880

Elasticsearch--Aggregation详细总结(聚合统计)

Elasticsearch的Aggregation功能也异常强悍。 Aggregation共分为三种:Metric Aggregations、Bucket Aggregations、 Pipelin...
  • donghaixiaolongwang
  • donghaixiaolongwang
  • 2017年02月28日 14:58
  • 7772
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标)
举报原因:
原因补充:

(最多只允许输入30个字)