ElasticSearch(八)— 聚集查询1

news2024/9/9 0:51:57

一、总概

聚集查询(Aggregation)提供了针对多条文档的统计运算功能,它不是针对文档本身内容的检索,而是要将它们聚合到一起运算某些方面的特征值。
聚集查询与 SQL 语言中的聚集函数非常像,聚集函数在 Elasticsearch 中相当于是聚集查询的一种聚集类型。 比如在 SQL 中的 avg 函数用于求字段平均值,而在 Elasticsearch 中要实现相同的功能可以使用 avg 聚集类型。

聚集查询也是通过_search 接口执行,只是在执行聚集查询时使用的参数是
aggregations 或 aggs。所以_search 接口可以执行两种类型的查询,1 种是通过query 参数执行 DSL,另一种则是通过 aggregations 执行聚集查询。

这两种查询方式还可以放在一起使用, 执行逻辑是先通过 DSL 检索满足查
询条件的文档,然后再使用聚集查询对 DSL 检索结果做聚集运算这一规则适用于本章列举的所有聚集查询。聚集查询有着比较规整的请求结构,具体格式如下:

"aggregations/aggs": {
	"<聚集名称>": {
		"<聚集类型>": {
			<聚集体>
		}………[,
		"aggregations/aggs": ([<子聚集>]+)]
	}[,
	"<聚集名称>”: (...) ]*
}

aggregations 和 aggs 都是_search 的参数,其中 aggs 是 agregations 的简写。每一个聚集查询都需要定义一个聚集名称,并归属于种聚集类型。聚集名称是用户自定义的, 而聚集类型则是由 Elasticsearch 预先定义好。

聚集名称会在返回结果中标识聚集结果,而聚集类型则决定了聚集将如何运
算。比如前面提到的 avg 就是一种聚集类型。 这里要特别强调的是,聚集中可以再包含子聚集。子聚集位于父聚集的名称中,与聚集类型同级,所以子聚集的运算都是在父聚集的环境中运算。Eaticsarch 对子聚集的深度没有限制,所以理论上说可以包含无限深度的子聚集。

聚集类型总体上被分为四种大类型,即指标聚集(Metrics Aggregation)、 桶
型( Bucket Aggregation)、管道聚集( Pipeline Aggregation) 和矩阵聚集( Matrix Aggregation)。

指标聚集是根据文档字段所包含的值运算某些统计特征值,如平均值、总和
等,它们的结果一般都包含一个或多个数值,前面提到的 avg 聚集就是指标聚集的 1 种。桶型聚集根据一定的分组标准将文档归到不同的组中,这些分组在Elasticsearch 中被称为桶( Bucken),桶型聚集与 SQL 中 group by 的作用类似,一般会与指标聚集嵌套使用。管道聚集可以理解为聚集结果的再聚集,它一般以另一个聚集结果作为输人,然后在此基础上再做聚集。矩阵聚集是 Elasticsearch 中的新功能,由于是针对多字段做多种运算,所以形成的结果类似于矩阵。

二、 指标聚集

指标聚集是根据文档中某一字段做聚集运算,比如计算所有产品销量总和、
平均值等等。指标聚集的结果可能是单个值,这种指标聚集称为单值指标聚集;也可能是多个值,称为多值指标聚集。

2.1 平均值聚集

平均值聚集是根据文档中数值类型字段计算平均值的聚集查询,包括 avg 聚集和 weighted_avg 聚集两种类型。avg 聚集直接取字段值后计算平均值,而weighted _avg 聚集则会在计算平均值时添加不同的权重。

avg 聚集
avg 聚集计算平均值,例如在示例中计算航班的平均延误时间:

POST indexname/_search?filter_path=aggregations{
	"aggs": {
		"delay_avg": {
			"avg": {
				"field": "FlightDelayMin"
			}
		}
	}
}

请求参数 fiter _path 将返回结果的其他字段过滤掉了,否则查询的结果中将包含 kibana_sample_data_flights 索引中的文档。加了filter_path 之后返果为:
在这里插入图片描述
在返回结果中,aggregations 是关键字,代表这是聚集查询的结果。其中的delay_avg 则是在聚集查询中定义的聚集名称,value 是聚集运算的结果。
上述运算航班延误时间时会将所有文档都包含进来做计算,如果只想其
中一部分文档参与运算则可以使用 query 参数以 DSL 的形式定义查询条件。
例如在示例中就是只计算了飞往中国的航班平均延误时间:

POST indexname/_search?filter_path=aggregations{
	"query": {
		"match": {
			"DestCountry": "CN"
		}
	},
	"aggs": {
		"delay_avg": {
			"avg": {
				"field": "FlightDelayMin"
			}
		}
	}
}

请求_search 接口时,同时使用了 query 与 aggs 参数。在执行检索时会先通过 query 条件过滤文档,然后再在符合条件的文档中运算平均值聚集。

2.2 计数聚集与极值聚集

计数聚集用于统计字段值的数量,而极值聚集则是查找字段的极大值和极小
值。
计数聚集
value_count 聚集和 cardinality 聚集可以归入计数聚集中,前者用于统计从
字段中取值的总数,而后者则用于统计不重复数值的总数。例如:

POST indexname/_search?filter_path=aggregations{
	"aggs": {
		"country_code": {
			"cardinality": {
				"field": "DestCountry"
			}
		},
		"total_country": {
			"value_count": {
				"field": "DestCountry"
			}
		}
	}
}

在示例中,cardinality 聚集统计了 DestCountry 字段非重复值的数量,类似
于 SQL 中的 distinct。value_count 聚集则统计了 DestCountry 字段所有返回值的数量,类似于 SQL 中的 count。

需要注意的是,cardinality 聚集的算法使用极小内存实现统计结果的基本准
确。所以 cardinality 在数据量极大的情况下是不能保证完全准确的。

极值聚集
极值聚集是在文档中提取某一字段最大值或最小值的聚集,包括 max 聚集
和 min 聚集。

POST indexname/_search?filter_path=aggregations{
	"aggs": {
		"max_price": {
			"max": {
				"field": "AvgTicketPrice"
			}
		},
		"min_price": {
			"min": {
				"field": "AvgTicketPrice"
			}
		}
	}
}

上面例子聚集有 max_price 和 min_price 两个,它们分别计算了机票价格的最大的最小值。

三、统计聚集

统计聚集是一个多值指标聚集,也就是返回结果中会包含多个值,都是一些
与统计相生的数据。统计聚集包含 stats 聚集和 extended_stats 聚集两种,前者返回的统计数据是一些比较基本的数值,而后者则包含一些比较专业的统计数值。

stats 聚集
stats 聚集返回结果中包括字段的最小值(min)、 最大值(max)、总和(sum)、数业(coun) 及平均值(avg) 五项内容。

POST indexname/_search?filter_path=aggregations{
	"aggs": {
		"price_stats": {
			"stats": {
				"field": "AvgTicketPrice"
			}
		}
	}
}

在示例中,stats 聚集使用 field 参数指定参与统计运算的字段为
AvgTicketPrice。

extended_stats 聚集
extended_stats 聚集增加了几项统计数据,这包括平方和、方差、标准方差和标准方差偏移量。从使用的角度来看,extended_stats 聚集与 stats 聚集完全相同,只是聚集类型不同。

四、百分位聚集

百分位聚集根据文档字段值统计字段值按百分比的分布情况,包括pecrentiles 聚集和 percentile_ranks 两种。前者统计的是百分比与值的对应关系,而后者正好相反统计值与百分比的对应关系。

POST indexname/_search?filter_path=aggregations{
	"aggs": {
		"price_percentile": {
			"percentiles": {
				"field": "AvgTicketPrice",
				"percents": [25,
				50,
				75,
				100]
			}
		},
		"price_percentile_rank": {
			"percentile_ranks": {
				"field": "AvgTicketPrice",
				"values": [600,
				1200]
			}
		}
	}
}

pecrentiles 聚集通过 pecrents 参数设置组百分比,然后按值由小到大的顺序划分不同区间,每个区间对应一个百分比。percentile_ranks 聚集则通过 value 参数设置组值, 然后根据这些值分别计算落在不同值区间的百分比。
以示例返回的结果为例:
在这里插入图片描述
在 pecrentiles 返回结果 price_percentile 中,““25.0”:410.0127977258341" 代表的含义是 25%的机票价格都小于 410.0127977258341,其他以此类推。在percentile_ranks 返回结果 price_percentile_rank 中, 600.0": 45. 39892372745635"代表的含义是 600.0 以下的机票占总机票价格的百分比为45.39892372745635%。

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

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

相关文章

掌控数据流的智能仪表板:Redpanda Console

Redpanda Console&#xff1a; 一站式管理&#xff0c;让数据流尽在掌控之中。- 精选真开源&#xff0c;释放新价值。 概览 Redpanda Console&#xff0c;是一款创新的Web界面工具&#xff0c;专为简化Kafka和Redpanda数据流的监控与管理而设计。它以用户友好的交互方式&#…

浏览器用户文件夹详解 - Favicons(二)

1. 引言 上一篇文章我们深入探讨了Chromium用户文件夹中的Bookmarks文件,了解了它的JSON结构以及如何解析和修改书签数据。 在本文中,我们将继续探索Chromium用户文件夹中的另一个重要文件:Favicons。Favicons,也就是我们常说的网站图标,是浏览器中不可或缺的一部分。它们不仅…

RK3568笔记四十七:PWM 子系统

若该文为原创文章&#xff0c;转载请注明原文出处。 pwm 子系统功能单一&#xff0c;很少单独使用&#xff0c;一般用于控制显示屏的背光、控制无源蜂鸣器、伺服电机、电压调节等等。 一、PWM介绍 PWM(Pulse width modulation)&#xff0c;脉冲宽度调制。在内核中 PWM 驱动较简…

并发编程工具集——并发容器-下(二十五)

List List 里面只有一个实现类就是 CopyOnWriteArrayList。CopyOnWrite&#xff0c;写的时候会将共享变量新复制一份出来&#xff0c;读操作完全无锁&#xff1b;适合读多写少的场景&#xff0c;写操作会复制数组&#xff0c;在新的数组中操作实现原理&#xff1a;CopyOnWriteA…

备考软考高级系统架构设计师,需要买哪些资料?

距离2024下半年软考高级系统架构设计师考试仅剩三个月&#xff01;时间紧迫&#xff0c;单单啃书已经不够了&#xff0c;毕竟是软考高级科目&#xff0c;难度不是那些初、中级可以比拟的。要想短时间速通架构考试&#xff0c;学会抓重点真的很重要&#xff0c;45分说多不多说少…

【音视频】RTSP、RTMP与流式传输

文章目录 前言RTSP与RTMPRTSP&#xff08;Real-Time Streaming Protocol&#xff09;RTMP&#xff08;Real-Time Messaging Protocol&#xff09;主要差异 什么是流式传输&#xff1f;流式传输的特点流式传输与传统下载的区别 使用VLC播放RTSP监控 总结 前言 在现代网络环境中…

C++ //练习 16.2 编写并测试你自己版本的compare函数。

C Primer&#xff08;第5版&#xff09; 练习 16.2 练习 16.2 编写并测试你自己版本的compare函数。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*********************************************************************…

PyTorch深度学习快速入门(下)

PyTorch深度学习快速入门&#xff08;下&#xff09; 一、现有网络模型的使用及修改&#xff08;一&#xff09;背景知识&#xff08;二&#xff09;修改网络模型的三种方法 二、网络模型的保存与加载&#xff08;一&#xff09;保存网络模型的两种方法&#xff08;二&#xff…

阿里云 服务器安装rabbit

现在我们去服务器安装一个rabbit 进入home 创建一个rabbit文件夹 /home/rabbit vim deployRabbit.sh 脚本内容 #!/bin/bash docker run -d \ --name dev.rabbit \ --network dev-net \ -p 15672:15672 \ -v ./data:/var/lib/rabbitmq \ --hostname dev.rabbit \ rabbitmq:…

css3 红色阴影边框紧急提醒呼吸灯特效

效果截图 代码 <!DOCTYPE html> <html><head><title>红色呼吸灯紧急特效</title><style>keyframes alarm {0% {box-shadow: 0 0 30px #ff0000;}50% {box-shadow: 0 0 60px #ff0000, inset 0 0 60px #ff0000;}100% {box-shadow: 0 0 30px …

八、【Python】基础 - 【Python while 循环全解析】:掌握无限循环的艺术

&#x1f4a1;&#x1f4da;【Python while 循环全解析】&#xff1a;掌握无限循环的艺术&#x1f4da;&#x1f4a1; 目录 1.基本语法 2.示例 3.注意事项 4.嵌套循环与循环控制语句 5.示例&#xff1a;使用 break 和 continue 6.示例&#xff1a;计数器 7.示例&#xf…

Web:Url 编码 -13

URL编码概述 HTTP协议只支持iso8859-1字符集。 而此字符集中只有英文数字常见符号。 所以HTTP原生是无法传输非iso8859-1字符的。 为了解决这个问题&#xff0c;提出了一种称之为URL编码的解决方案。 URL编解码详解 将非iso8859-1字符&#xff0c;进行转换 先将字符按照指定码表…

时间序列分析方法之 -- 自回归移动平均模型(Autoregressive Moving Average, ARMA)原理及Python代码示例

目录 原理 适用情况 Python 示例代码 结论 原理 自回归移动平均模型&#xff08;Autoregressive Moving Average, ARMA&#xff09;是一种结合了自回归&#xff08;AR&#xff09;模型和移动平均&#xff08;MA&#xff09;模型的时间序列分析模型。它适用于描述和预测平稳…

AGI思考探究过程中的意义、价值与乐趣 Ⅰ

探究以泛GPT为代表的预训练自回归next token prediction GenAI(即llm)与Alpha系列为代表的RL&#xff0c;再到Sora为代表的DiT视觉生成领域模型的本质普遍性及表象差异&#xff0c;以及为什么要将其两者或三者联系甚至融合起来看待&#xff1f;本质上是尝试对比采用上述三种模型…

昇思MindSpore 应用学习-Diffusion扩散模型-CSDN

Diffusion扩散模型 本文基于Hugging Face&#xff1a;The Annotated Diffusion Model一文翻译迁移而来&#xff0c;同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件&#xff0c;执行Python文件时&#xff0c;请…

【项目管理】高手项目经理都在用的6个SOP

SOP&#xff08;Standard Operating Procedure&#xff09;流程是一种标准化的操作指南&#xff0c;旨在确保组织或团队在各种情况下都能高效、一致地完成任务。SOP流程通常包括详细的步骤、关键控制点和责任分配&#xff0c;以确保质量和安全。SOP流程涉及从日常运营到危机管理…

五、Spring Boot - 上手篇(1)

&#x1f33b;&#x1f33b;目录 一、快速入门&#xff1a;创建第一个SpringBoot 工程1.1 点击File--->New--->Project...1.2 选择版本和依赖的相关骨架包1.3 设置项目保存目录1.4 项目创建完成&#xff0c;工程主界面如下1.5 项目说明1.6 启动项目1.7 编写 HelloControl…

2024年7月23日~2024年7月29日周报

目录 一、前言 二、完成情况 2.1 一种具有边缘增强特点的医学图像分割网络 2.2 融合边缘增强注意力机制和 U-Net 网络的医学图像分割 2.3 遇到的困难 三、下周计划 一、前言 上周参加了一些师兄师姐的论文讨论会议&#xff0c;并完成了初稿。 本周继续修改论文&#xff0…

【Git】 如何将一个分支的某个提交合并到另一个分支

【Git】 如何将一个分支的某个提交合并到另一个分支 在使用 Git 进行版本控制时&#xff0c;常常会遇到这样的需求&#xff1a;将某个分支的特定提交合并到另一个分支中。这种情况下&#xff0c;我们可以使用 cherry-pick 命令来实现。本文将详细介绍 cherry-pick 命令的使用方…

定时任务报错问题,通级下还有其他定时任务却没有报错,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…