Elasticsearch 之聚合分析入门

栏目: IT技术 · 发布时间: 4年前

内容简介:本文主要介绍 Elasticsearch 的聚合功能,介绍什么是 Bucket 和 Metric 聚合,以及如何实现嵌套的聚合。首先来看下聚合(Aggregation):

本文主要介绍 Elasticsearch 的聚合功能,介绍什么是 Bucket 和 Metric 聚合,以及如何实现嵌套的聚合。

首先来看下聚合(Aggregation):

什么是 Aggregation?

Elasticsearch 之聚合分析入门

首先举一个生活中的例子,这个是京东的搜索界面,在搜索框中输入“华为”进行搜索,就会得到如上界面,搜索框就是我们常用的 搜索 功能,而下面这些,比如分类、热点、操作系统、CPU 类型等是根据 ES 的 聚合分析 获得的相关结果。

看完上面这个例子,下面来看下聚合的定义:

ES 除了搜索以外,还提供针对 ES 数据进行统计分析的功能,也就是聚合,它的特点是 实时性非常高 ,所有的计算结果都是即时返回的,而 Hadoop 等大数据系统得到一个统计结果需要一天的时间,一般都是 T + 1 级别的。

通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档,比如海淀区和东城区的客房数量,不同价格区间,可预订的经济型酒店和商务型酒店的数量,这样可以帮助我们过滤搜索的结果,这样的优点是 性能高 ,只需要一条语句,就可以从 ES 得到分析结果,无需再客户端自己去实现分析逻辑。

在 ES 的聚合中主要一共分为四大类:

  • Bucket Aggregation :分桶类型,一些列满足特定条件的文档的集合
  • Metric Aggregation :指标分析类型,一些数学运算,可以对文档字段进行统计分析,比如计算最大值、最小值、平均值等
  • Pipeline Aggregation :管道分析类型,对其他聚合结果进行二次聚合
  • Matrix Aggregation :矩阵分析类型,支持对多个字段的操作并提供一个结果矩阵

在以后的文章会对这些做详细的讲解,本文先来了解下什么是 Bucket 和 Metric:

Bucket 简单来说相当于 SQL 中的 GROUP,可以根据条件,把结果分成一个一个的组,那 Metric 相当于 SQL 中的 COUNT,可以去执行一系列的统计方法。

接下来看什么是 Bucket Aggregation:

Bucket Aggregation

Elasticsearch 之聚合分析入门

Bucket 就是桶的意思,即 按照一定的规则将文档分配到不同的桶中,达到分类分析的目的 。如上图所示,左边有一堆文档,右边有三个桶,每个桶有不同的规则,比如第一个桶的规则为价格小于 3000 的,第二个桶为价格大于等于 3000 小于 6000 的,最后一个桶的规则为价格大于 6000 的,然后不同的文档根据不同的价格分到不同的桶中,那么我们就实现了分类。

有了 Bucket 聚合分析机制,我们就可以把公司员工以年龄方式进行区分,以地理位置的方式来区分客户,以男性女性来区分演员等。

根据 Bucket 的分桶策略,常见的 Bucket 聚合分析如下:

  • Terms:直接按照 term 来分桶,如果是 text 类型,则按照分词后的结果分桶
  • Range:指定数值的范围来设定分桶规则
  • Date Range:指定日期的范围来设定分桶规则
  • Histogram:直方图,以固定间隔的策略来分割数据
  • Date Histogram:针对日期的直方图或者柱状图,是时序数据分析中常用的聚合分析类型

下面以 Terms 为例,让我们动手实践下:

Elasticsearch 之聚合分析入门

这是一个查看航班目的地的统计信息的例子,通过指定关键词为 terms ,然后指明 term 字段 fieldDestCountry ,下面我们请求下,查看下请求结果:

Elasticsearch 之聚合分析入门

从结果中可以看到文档根据目的地分成了不同的桶,每个桶还包括 doc_count ,这样就可以很轻松知道 ES 存储的航班信息中,去往意大利、美国、中国等国家分别有多少架航班。

在简单了解了 Bucket 聚合分析后,让我们来看下 Metric 聚合分析:

Metric Aggregation

Metric 是基于数据集计算的结果,除了支持在字段上进行计算,同样也支持在脚本产生的结果之上进行计算。Metric 主要分为 单值分析和多值分析 ,具体内容如下:

单值分析,只输出一个分析结果:

  • Min、Max、Avg、Sum
  • Cardinality

其中, Min、Max、Avg、Sum 这些很容易理解,在这里说一下 Cardinality ,它是指不同数值的个数,相当于 SQL 中的 distinct。

多值分析,输出多个分析结果:

  • Stats、Extended Stats
  • Percentiles、Percentile Ranks
  • Top Hits

其中, Stats 是做多样的数据分析,可以一次性得到最大值、最小值、平均值、中值等数据; Extended Stats 是对 Stats 的扩展,包含了更多的统计数据,比如方差、标准差等; PercentilesPercentile Ranks 是百分位数的一个统计; Top Hits 一般用于分桶后获取桶内最匹配的顶部文档列表,即详情数据。

了解之后,让我们实操起来,紧接着刚才查看航班目的地的统计信息的例子,如果还想知道机票的均价,最高最低价格,该怎么做呢?这就需要用到 Metric 了:

Elasticsearch 之聚合分析入门

我们在请求中加入 aggs ,其中 avg_price 为自己定义的名字,这个是为了方便在以后理解这个字段返回值的含义,然后分别关键词分别选择 avg、max、min 来完成计算目的地不同的航班的机票均价、最高最低价格,这个请求的执行结果如下所示:

Elasticsearch 之聚合分析入门

从结果中可以看出,飞往意大利的航班一共有 2371 架,其中机票最高价格为 1195 元,最低价格为 100 元,平均价格为 586 元,很快就可以得到统计的一些结果。

另外,聚合分析还支持嵌套,那么让我们看下如果实现一个嵌套聚合分析:

Elasticsearch 之聚合分析入门

通过这个请求不但可以获取到航班目的地的统计信息,还可以得到航班抵达时的天气状况,运行结果如下所示:

Elasticsearch 之聚合分析入门

可以看出,在抵达意大利的航班中,抵达时的天气有 424 次为晴天,417 次为下雨天等,所以通过嵌套的方式就可以很快得到更深层次的数据统计值。

总结

本文对 Elasticsearch 的聚合功能做了初步介绍,也学习 Bucket 和 Metric 聚合分析,在后续文章会对聚合功能做一个更加深入的讲解。

下面是我总结的 Elasticsearch 聚合分析的思维导图,在公众号【 武培轩 】回复【 es 】获取思维导图以及源代码。

Elasticsearch 之聚合分析入门

参考文献

Elastic Stack从入门到实践

Elasticsearch核心技术与实战

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-aggregations.html


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JSP 2.0技术手册

JSP 2.0技术手册

杜远君、林康司、林上杰 / 湖北教育出版社,电子工业出版社 / 2004-5-1 / 59.0

本书图文并茂,以丰富的实例为引导,全面介绍了主流的Java Web开发技术——JSP 2.0,重点介绍Java在展示层的两项重要技术:Java Servlet与JavaServer Pages。它们是最重要的Java核心技术。对这两项技术的深入了解,将有助于您未来对于JavaServer Faces(JSF)技术以及Java Web Services技术的学习。 本书分为三大部分,前......一起来看看 《JSP 2.0技术手册》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具