欢迎光临散文网 会员登陆 & 注册

袁庭新老师ES系列13节|Elasticsearch聚合aggregations

2023-09-21 17:59 作者:袁庭新  | 我要投稿

前言

上一章节我们带领大家学习了Elasticsearch中的高级查询,这一章节袁老师再带领大家学习一种高级查询:聚合。聚合可以用来干什么呢?聚合可以让我们极其方便的实现对数据的统计和分析。例如:

  • 什么品牌的手机最受欢迎?

  • 这些手机的平均价格、最高价格、最低价格?

  • 这些手机每月的销售情况如何?

实现这些统计功能的比数据库的SQL要方便的多,而且查询速度非常快,可以实现近实时搜索效果。

一. 基本概念

1.聚合基本概念介绍

Elasticsearch中的聚合,包含多种类型,最常用的两种:一个叫桶,一个叫度量。

桶(bucket)类似于(group by)。桶的作用是,按照某种方式对数据进行分组,每一组数据在Elasticsearch中称为一个桶 ,例如我们根据国籍对人划分,可以得到中国桶、英国桶、日本桶等;或者我们按照年龄段对人进行划分,0~10岁、10~20岁、20~30岁和30~40岁等。

Elasticsearch中提供的划分桶的方式有很多:

度量(metrics)相当于聚合的结果。分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在Elasticsearch中称为度量。

比较常用的一些度量聚合方式:

2.聚合操作数据准备

为了测试聚合,我们先批量导入一些数据。

创建索引:

响应结果:

注意:在Elasticsearch中,需要进行聚合、排序、过滤的字段其处理方式比较特殊,因此不能被分词,必须使用keyword或数值类型 。这里我们将color和make这两个文字类型的字段设置为keyword类型,这个类型不会被分词,将来就可以参与聚合。

导入数据,这里是采用批处理的API,大家直接复制到Kibana运行即可:

响应结果:

二. 聚合为桶

1.聚合为桶语法介绍

首先,我们按照汽车的颜色color来划分桶,按照颜色分桶最好是使用Term Aggregation类型,按照颜色的名称来分桶。语法格式见下:

桶查询的相关属性介绍:

2.聚合为桶案例演示

根据汽车的颜色聚合为桶:

响应结果:

演示过程见下:

桶查询响应结果的相关属性介绍:

通过聚合的结果我们发现,目前红色的小车比较畅销。

三. 桶内度量

1.桶内度量介绍

前面的例子告诉我们每个桶里面的文档数量,这很有用。但通常,我们的应用需要提供更复杂的文档度量。例如,每种颜色汽车的平均价格是多少?

因此,我们需要告诉Elasticsearch使用哪个字段,使用何种度量方式进行运算,这些信息要嵌套在桶内,度量的运算会基于桶内的文档进行。

桶内度量语法介绍:

2.桶内度量案例

现在,我们为刚刚的聚合结果添加求价格平均值的度量。

桶内度量相关属性介绍:

响应结果:

可以看到每个桶中都有自己的avg_price字段,这是度量聚合的结果。

四. 结语

好了关于Elasticsearch中的聚合aggregations查询相关的内容袁老师就给大家介绍到这里,这一章节我们主要学习了聚合的基本概念,例如桶和度量。然后,带领大家通过综合案例的形式学习了如何聚合为桶,以及如何在桶内进行度量操作。关于Elasticsearch的聚合相关内容我们就给大家介绍到这里。下一小节我们带领同学们学习如何使用Elasticsearch进行集群相关的知识。


袁庭新老师ES系列13节|Elasticsearch聚合aggregations的评论 (共 条)

分享到微博请遵守国家法律