Elasticsearch8.x聚合查询全面指南:从理论到实战

聚合查询的概念

  • 聚合查询(Aggregation Queries)是Elasticsearch中用于数据汇总和分析的查询类型。
  • 它不同于普通的查询,而是用于执行各种聚合操作,如计数、求和、平均值、最小值、最大值、分组等。

聚合查询的分类

分桶聚合(Bucket Aggregations)

  • 类似于SQL中的GROUP BY操作,根据指定的条件对数据进行分组统计。

  • 可以进行嵌套分桶,即在一个分桶的基础上再进行细分。

  • 示例:按照手机的品牌进行分桶统计数量,再在小米手机的分桶基础上按照档次进行二次分桶。

  • 语法格式

GET /index/_search
{"size": 0,"aggs": {"aggregation_name": {"bucket_type": {"bucket_options": {"bucket_option_name": "bucket_option_value",...},"aggs": {"sub_aggregation_name": {"sub_aggregation_type": {"sub_aggregation_options": {"sub_aggregation_option_name": "sub_aggregation_option_value",...}}}}}}}
}
#解析
# index: 替换为要执行聚合查询的索引名称。
# aggregation_name: 替换为自定义的聚合名称。
# bucket_type: 替换为特定的桶聚合类型(如 terms、date_histogram、range 等)。
# bucket_option_name 和 bucket_option_value: 替换为特定桶聚合选项的名称和值。# sub_aggregation_name: 替换为子聚合的名称。
# sub_aggregation_type: 替换为特定的子聚合类型(如 sum、avg、max、min 等)。
# sub_aggregation_option_name 和 sub_aggregation_option_value: 替换为特定子聚合选项的名称和值

指标聚合(Metrics Aggregations)

  • 主要用于计算数值字段的统计信息,如平均值、最大值、最小值、求和、去重计数等。

  • 示例:计算某个班级、某个学科的最高分、最低分等。

  • 语法格式

GET /index/_search  
{"size": 0,"aggs": {"aggregation_name": {"aggregation_type": {"aggregation_field": "field_name"// 可选参数}}// 可以添加更多的聚合}
}# 解析
#index:要执行聚合查询的索引名称。
#size: 设置为 0 来仅返回聚合结果,而不返回实际的搜索结果,这里将hits改为0表示返回的原始数据变为0
#aggs:指定聚合操作的容器。#aggregation_name:聚合名称,可以自定义。
#aggregation_type:聚合操作的类型,例如 terms、avg、sum 等。
#aggregation_field:聚合操作的目标字段,对哪些字段进行聚合

聚合查询的特点

  • 嵌套性:聚合查询支持嵌套,即一个聚合内部可以包含别的子聚合,实现复杂的数据挖掘和统计需求。

  • 灵活性:可以用于多种场景的数据分析,满足各种业务需求。

  • 高效性:Elasticsearch的聚合查询基于倒排索引和优化的数据结构,使得聚合操作能够高效地执行。

常见聚合用途及应用场景

聚合指标(Aggregation Metrics):

- Avg Aggregation:计算文档字段的平均值。- Sum Aggregation:计算文档字段的总和。- Min Aggregation:找到文档字段的最小值。- Max Aggregation:找到文档字段的最大值。

聚合桶(Aggregation Buckets):

  • Terms Aggregation:基于字段值将文档分组到不同的桶中。
    • 语法格式
GET /index/_search
{"size": 0,"aggs": {"aggregation_name": {"bucket_type": {"bucket_options": {"bucket_option_name": "bucket_option_value",...},"aggs": {"sub_aggregation_name": {"sub_aggregation_type": {"sub_aggregation_options": {"sub_aggregation_option_name": "sub_aggregation_option_value",...}}}}}}}
}
#解析
#index: 替换为要执行聚合查询的索引名称。
#aggregation_name: 替换为自定义的聚合名称。
#bucket_type: 替换为特定的桶聚合类型(如 terms、date_histogram、range 等)。
#bucket_option_name 和 bucket_option_value: 替换为特定桶聚合选项的名称和值。#sub_aggregation_name: 替换为子聚合的名称。
#sub_aggregation_type: 替换为特定的子聚合类型(如 sum、avg、max、min 等)。
#sub_aggregation_option_name 和 sub_aggregation_option_value: 替换为特定子聚合选项的名称和值
  • Date Histogram Aggregation:按日期/时间字段创建时间间隔的桶。
    • 语法格式
GET /index/_search
{"size": 0,"aggs": {"date_histogram_name": {"date_histogram": {"field": "date_field_name","interval": "interval_expression"},"aggs": {"sub_aggregation": {"sub_aggregation_type": {}}}}}
}#解析
#index:替换为要执行聚合查询的索引名称。
#date_histogram_name:替换为自定义的 date_histogram 聚合名称。
#date_field_name:替换为要聚合的日期类型字段名。
#interval_expression:指定用于分桶的时间间隔。时间间隔可以是一个有效的日期格式(如 1d、1w、1M),也可以是一个数字加上一个时间单位的组合(如 7d 表示 7 天,1h 表示 1 小时)。
#sub_aggregation:指定在每个日期桶内进行的子聚合操作。
#sub_aggregation_type:替换单独子聚合操作的类型,可以是任何有效的子聚合类型。
  • Range Aggregation:根据字段值的范围创建桶。
    • 语法格式
GET /index/_search
{"size": 0,"aggs": {"range_name": {"range": {"field": "field_name","ranges": [{ "key": "range_key_1", "from": from_value_1, "to": to_value_1 },{ "key": "range_key_2", "from": from_value_2, "to": to_value_2 },...]},"aggs": {"sub_aggregation": {"sub_aggregation_type": {}}}}}
}#解析
# index:替换为要执行聚合查询的索引名称。
# range_name:替换为自定义的 range 聚合名称。
# field_name:替换为要聚合的字段名。
# ranges:指定范围数组,每个范围使用 key、from 和 to 参数进行定义。
# key:范围的唯一标识符。
# from:范围的起始值(包含)。
# to:范围的结束值(不包含)。
# sub_aggregation:指定在每个范围内进行的子聚合操作。
# sub_aggregation_type:替换单独子聚合操作的类型,可以是任何有效的子聚合类型。

Query DSL指标聚合多案例介绍实战

创建索引

PUT /sales
{"mappings": {"properties": {"id":{"type":"keyword"},"product": {"type": "keyword"},"sales": {"type": "integer"}}}
}

批量插入数据

POST /sales/_bulk
{"index": {}}
{"product": "iPhone", "sales": 4}
{"index": {}}
{"product": "Samsung", "sales": 60}
{"index": {}}
{"product": "iPhone", "sales": 100}
{"index": {}}
{"product": "Samsung", "sales": 80}
{"index": {}}
{"product": "小米手机", "sales": 50}
{"index": {}}
{"product": "小米手机", "sales": 5000}
{"index": {}}
{"product": "小米手机", "sales": 200}

指标聚合实战

根据商品名称分组
GET /sales/_search
{"aggs": {"phone_group": {"terms": {"field": "product"}}}
}

在这里插入图片描述

计算每组的销售总量,使用terms聚合和sum聚合来
GET /sales/_search
{"size": 0,"aggs": {"product_sales": {"terms": {"field": "product"      },"aggs": {"total_salers": {"sum": {"field": "sales"}}}}}
}

在这里插入图片描述

计算总和
GET /sales/_search
{"aggs": {"sum_sales": {"sum": {"field": "sales"}}}
}

在这里插入图片描述

计算不同品牌的平均值
GET /sales/_search
{"aggs": {"product_sales": {"terms": {"field": "product"},"aggs": {"avg_sales": {"avg": {"field": "sales"}}}}}
}

在这里插入图片描述

计算总商品的平均值
GET /sales/_search
{"size": 0,"aggs": {"avg_sales": {"avg": {"field": "sales"}}}
}

在这里插入图片描述

计算不同品牌的手机的最高低价
GET /sales/_search
{"size": 0,"aggs": {"product_sales": {"terms": {"field": "product"},"aggs": {"max_sales": {"max": {"field": "sales"}}}}}
}
​
​
GET /sales/_search
{"size": 0,"aggs": {"product_sales": {"terms": {"field": "product"},"aggs": {"max_sales": {"min": {"field": "sales"}}}}}
}

在这里插入图片描述

查找最大最小值
GET /sales/_search
{"size": 0,"aggs": {"max_sales": {"max": {"field": "sales"}}}
}
​
GET /sales/_search
{"size": 0,"aggs": {"max_sales": {"min": {"field": "sales"}}}
}

在这里插入图片描述

Query DSL 桶聚合Terms案例实战

使用 terms 聚合查询将图书按销售数量进行分桶,并获取每个分桶内的销售数量总和。
GET /book_sales/_search
{"size": 0,"aggs": {"book_buckets": {"terms": {"field": "book_title"},"aggs": {"total_sales": {"sum": {"field": "sales_count"}}}}}
}

在这里插入图片描述

Query DSL 桶聚合Date Histogram介绍和案例实战

使用 date_histogram 聚合查询将订单按日期进行分桶,并计算每个分桶内的订单金额总和
GET /book_sales/_search
{"size": 0,"aggs": {"saler_per_day": {"date_histogram": {"field": "date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {"total_saler": {"sum": {"field": "sales_count"}}}}}
}

在这里插入图片描述

Query DSL 桶聚合Range介绍和案例实战

使用 range 聚合查询将商品按价格范围进行分桶,并计算每个分桶内的商品数量

GET /book_sales/_search
{"size": 0,"aggs": {"sales_ranges": {"range": {"field": "sales_count","ranges": [{"to": 50},{"from": 50,"to": 100},{"from": 100,"to": 200},{"from": 200}]}}}
}

在这里插入图片描述

通过本篇文章的深入解析,我们不仅掌握了Elasticsearch聚合查询的基本概念与分类,还通过一系列实战案例学习了如何有效地运用分桶聚合与指标聚合进行数据挖掘与统计分析。从简单的平均值、求和计算到复杂的多层级分桶与时间序列分析,Elasticsearch的聚合功能展现了其在大规模数据处理与复杂业务分析场景中的强大能力。
记住,无论是进行市场趋势分析、用户行为洞察还是日志数据的深入挖掘,合理设计聚合查询都是解锁数据价值的关键。随着实践的深入,不断探索高级特性与优化策略,你将能更加灵活高效地应对各种数据分析挑战。
总之,Elasticsearch聚合查询是通往数据智能分析的重要桥梁,它不仅能够帮助我们快速洞察数据分布特征,还能驱动业务决策更加精准高效。希望本指南能成为你掌握Elasticsearch聚合查询技能的坚实基石,开启数据驱动决策的新篇章。
更多精彩内容,请关注以下公众号
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7 安装单机MongoDB

centos7安装单机 yum 安装 1、配置yum源 vim /etc/yum.repos.d/mongodb.repo [mongodb-org-7.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp…

未来已来,如何打造智慧养殖场?

近年来,国家出台了一系列扶持政策,以促进养殖行业高质量发展,推动行业转型升级。在国家政策和市场需求的双重驱动下,养殖行业正迎来前所未有的发展机遇。智慧养殖以其高效、智能和可持续的特点,正逐步取代传统养殖方式…

6.26.4.1 基于交叉视角变换的未配准医学图像多视角分析

1. 介绍 许多医学成像任务使用来自多个视图或模式的数据,但很难有效地将这些数据结合起来。虽然多模态图像通常可以在神经网络中作为多个输入通道进行配准和处理,但来自不同视图的图像可能难以正确配准(例如,[2])。因此,大多数多视…

吴恩达2022机器学习专项课程C2W3:2.27 选修_数据倾斜

目录 处理不平衡数据集1.分类需求描述2.计算精确率和召回率 权衡精确率和召唤率1.手动调整阈值2.F1分数 总结 处理不平衡数据集 1.分类需求描述 如果你在处理一个机器学习应用,其中正例和负例的比例(用于解决分类问题)非常不平衡&#xff0…

数据库怎么同步

数据库要怎么同步呢,有很多方法,看你用什么数据库,如果是Sqlserver,你要数据库同步,那么可以使用自带的订阅发布,订阅发布应该是不错的方法,但是我上次要配置双向同步,它的对等发布好像没部署成…

Ansible-综合练习-生产案例

斌的招儿 网上教程大多都是官网模板化的教程和文档,这里小斌用自己实际生产环境使用的例子给大家做一个详解。涉及到一整套ansible的使用,对于roles的使用,也仅涉及到tasks和files目录,方便大家快速上手并规范化管理。 0.环境配置…

聚星文社AI工具

聚星文社AI工具是一种基于人工智能技术开发的工具,旨在辅助作者和写作人员提升创作效率和质量。 点击下载 该工具可以提供多项功能,包括语法纠错、智能推荐、文章自动摘要等。 通过使用聚星文社AI工具,用户可以在写作过程中得到即时的纠错建…

ECMAScript6介绍及环境搭建

这实际上说明,对象的解构赋值是下面形式的简写。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而…

数据结构_绪论

1.数据结构的研究内容 研究数据的特性和数据之间的关系 用计算机解决一个问题的步骤 1.具体问题抽象成数学模型 实质: 分析问题--->提取操作对象--->找出操作对象之间的关系(数据结构)--->用数学语言描述 操作对象对象之间的关系 2.设计算法 3.编程,调试,运行 …

【数据结构与算法】哈希函数 详解

哈希函数的构造方法有哪些? 直接定址法:直接使用关键字或者关键字的某个线性函数值作为哈希地址。 数字分析法:对关键字进行分析,选择关键字中的某几位或者进行某种运算得到的结果作为哈希地址。 平方取中法:先计算关…

通信协议总结

IIC 基本特点 同步,半双工 标准100KHz,最高400KHz(IIC主要应用于低速设备) 硬件组成 需外接上拉电阻 通信过程 空闲状态 SDA和SCL都处于高电平 开始信号S和终止信号P 在数据传输过程中,当SCL0时,SDA才…

十常侍乱政 | 第2集 | 愿领精兵五千,斩关入内,册立新君,诛杀宦党,扫清朝廷,以安天下 | 三国演义 | 逐鹿群雄

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌这篇博客是毛毛张分享三国演义文学剧本中的经典台词和语句,本篇分享的是《三国演义》第Ⅰ部分《群雄逐鹿》的第2️⃣集《十常侍乱政治》&am…

汇聚荣做拼多多运营第一步是什么?

汇聚荣做拼多多运营第一步是什么?在众多电商平台中,拼多多凭借其独特的社交电商模式迅速崛起,吸引了大量消费者和商家的目光。对于希望在拼多多上开店的商家而言,了解如何进行有效运营是成功的关键。那么,汇聚荣做拼多多运营的第…

算法入门:二分查找及其Java实现

在程序开发中,算法是解决问题的核心。本篇博客将详细讲解一种高效的查找算法——二分查找,并通过Java代码示例帮助你理解其实现和应用。 如果你觉得这篇文章对你有帮助,不要忘记点赞、收藏和关注我,这将是对我最大的支持和鼓励&am…

VMware 最新的安全漏洞公告VMSA-2024-0013

#深度好文计划# 一、摘要 2024年6月26日,VMware 发布了最新的安全漏洞公告 VMSA-2024-0013,修复了 VMware ESXi 和 VMware vCenter 中的多个安全漏洞。 VMSA-2024-0013:VMware ESXi 和 vCenter Server 更新修正了多个安全性漏洞 &#xff…

Unity3D 物体的运动

运动方式1 修改 position / localPosition ,可以让物体运动 例如, Vector3 pos this.transform.localPosition; pos.z distance; this.transform.localPosition pos; 此时,小车向Z 方向运动 具体代码如下 using System.Collection…

C语言入门课程学习笔记10:结构体联合体位域

C语言入门课程学习笔记10 第48课 - 自定义数据类型(上)实验-typedef实验小结 第49课 - 自定义数据类型(中)实验实验小结 第50课 - 自定义数据类型(下)实验实验小结 第51课 - 多文件程序设计实验实验实验小结…

uni-app picker多列选项

预期实现的效果&#xff1a; 选中后的效果&#xff1a; // Dom部分 <template><picker mode"multiSelector" :range"ssqRange" range-key"name" columnchange"ssqColumnChange" change"ssqChange" class"p…

研究发现GPT-4o等较新的多模态AI模型的安全机制有不足之处

在 ChatGPT 和类似的生成式人工智能模型推出后&#xff0c;很多人都在强调安全问题&#xff0c;政府也参与其中&#xff0c;OpenAI 甚至成立了一个超级协调小组&#xff0c;以阻止未来的人工智能失控&#xff0c;但由于对人工智能安全的发展方向存在分歧&#xff0c;该小组于今…