大数据-177 Elasticsearch Query DSL - 聚合分析 指标聚合 桶聚合

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(正在更新…)

章节内容

上节我们完成了如下的内容:

  • Filter DSL
  • 查询排序
  • 结果高亮
  • 批量操作

在这里插入图片描述

聚合介绍

Elasticsearch 的聚合分析是一种强大的功能,允许用户在查询数据的同时对其进行统计分析、分组计算和排序,类似于 SQL 中的 GROUP BY 和 COUNT() 等操作。聚合分析包括两个主要类别:指标聚合和桶聚合。在聚合的基础上,你还可以进行嵌套聚合,将多个聚合组合在一起,从而构建复杂的分析查询。

聚合分析是数据库中的重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某个字段(或计算表达式的结果)的最大值、最小值、计算和、平均值等。Elasticsearch作为搜索引擎兼数据库,同样提供了强大的聚合分析能力。
对一个数据集求最大、最小、和、平均值等指标的聚合,在ES中称为指标聚合metric,而关系型数据库中除了有桶聚合函数外,还可以对查询出的数据进行分组GROUP BY,再在组上进行指标聚合,在ES中GROUP BY称为分桶,桶聚合Bucketing
Elasticsearch聚合分析语法,在查询请求体中aggregations节点,按如下语法定义聚合分析:

"aggregations" : {"<aggregation_name>" : { <!--聚合的名字 -->"<aggregation_type>" : { <!--聚合的类型 --><aggregation_body> <!--聚合体:对哪些字段进行聚合 -->}[,"meta" : { [<meta_data_body>] } ]? <!---->[,"aggregations" : { [<sub_aggregation>]+ } ]? <!--在聚合里面在定义子聚合 -->}
}

说明:aggregatations 也可以简写做:aggs

指标聚合

max min sum avg

指标聚合 (Metrics Aggregations)
指标聚合的主要功能是计算某个字段的数值统计结果。常见的指标聚合包括求和、平均值、最大值、最小值、计数等。它们通常用于返回单个数值结果。

常用的指标聚合包括:

  • avg:计算数值字段的平均值。
  • sum:计算数值字段的总和。
  • min:返回数值字段的最小值。
  • max:返回数值字段的最大值。
  • value_count:计算某个字段的值的数量。
  • stats:返回字段的统计信息,包括最小值、最大值、平均值、总和和数量。
  • extended_stats:比 stats 聚合提供更详细的统计信息,如标准差和方差。

查询最贵的

# price的最大值 
POST /book/_search
{"size": 0,"aggs": {"max_price": {"max": {"field": "price"}}}
}

执行结果如下图所示:
在这里插入图片描述

price大于100的

# 使用 _count 计算数量
POST /book/_count
{"query": {"range": {"price" : {"gt":100}}}
}

执行结果如下:
在这里插入图片描述

统计字段有值

# 通过聚合的方式 统计 price 有值的
POST /book/_search
{"size": 0,"aggs": {"book_nums": {"value_count": {"field": "price"}}}
}

执行结果如下图所示:
在这里插入图片描述

去重计数

# agg 聚合 去重数量
POST /book/_search?size=0
{"aggs": {"price_count": {"cardinality": {"field": "price"}}}
}

执行的结果如下图所示:
在这里插入图片描述

统计计数

stats 可以统计好几个值:

  • max
  • min
  • count
  • avg
  • sum
# stats
POST /book/_search?size=0
{"aggs": {"price_stats": {"stats": {"field": "price"}}}
}

运行结果如下图所示:
在这里插入图片描述

扩展统计

Extended Stats,高级统计,比stats多4个统计结果:

  • 平方和
  • 方差
  • 标准差
  • 平均值加/减两个标准差的区间
# extended stats
POST /book/_search?size=0
{"aggs": {"price_stats": {"extended_stats": {"field": "price"}}}
}

占比百分位

Percentiles 占比百分位对应的值统计

# 占比百分位
POST /book/_search?size=0
{"aggs": {"price_percents": {"percentiles": {"field": "price"}}}
}

执行结果如下图所示:
在这里插入图片描述

当然,我们也可以指定分位值:

# 指定分位值
POST /book/_search?size=0
{"aggs": {"price_percents": {"percentiles": {"field": "price","percents" : [75, 99, 99.9]}}}
}

运行结果如下图:
在这里插入图片描述

统计值小于等于指定值的文档占比

统计price小于100和200的文档的占比

POST /book/_search?size=0
{"aggs": {"gge_perc_rank": {"percentile_ranks": {"field": "price","values": [100,200]}}}
}

运行结果如下图所示:
在这里插入图片描述

桶聚合

Bucket Aggregations,桶聚合。
它执行的是对文档分组的操作(与SQL中的GROUP BY类似),把满足相关特性的文档分到一个桶里,即桶分,输出结果往往是一个包含多个文档的桶(一个桶就是一个GROUP)

  • bucket 一个数据分组
  • metric 对一个数据分组执行的统计

桶聚合的目的是根据某些条件对文档进行分组,每个组称为一个“桶”。每个桶包含符合特定条件的文档集合,可以对每个桶进一步执行其他聚合分析(如指标聚合或嵌套的桶聚合)。

常见的桶聚合包括:

  • terms:按某个字段的不同值进行分组(类似 SQL 的 GROUP BY)。
  • range:根据数值范围对字段进行分组。
  • date_histogram:基于时间字段按固定时间间隔分组。
  • histogram:基于数值字段按固定间隔分组。
  • filter:根据查询条件过滤文档。
  • filters:根据多个查询条件将文档分为多个不同的桶。
  • geo_distance:基于地理位置和距离的范围来分组。
POST /book/_search
{"size": 0,"aggs": {"group_by_price": {"range": {"field": "price","ranges": [{"from": 0,"to": 200},{"from": 200,"to": 400},{"from": 400,"to": 1000}]},"aggs": {"average_price": {"avg": {"field": "price"}}}}}
}

执行的结果如下图所示:
在这里插入图片描述

我们也可以实现having的效果:

POST /book/_search
{"size": 0,"aggs": {"group_by_price": {"range": {"field": "price","ranges": [{"from": 0,"to": 200},{"from": 200,"to": 400},{"from": 400,"to": 1000}]},"aggs": {"average_price": {"avg": {"field": "price"}},"having": {"bucket_selector": {"buckets_path": {"avg_price": "average_price"},"script": {"source": "params.avg_price >= 200 "}}}}}}
}

执行结果如下图所示:
在这里插入图片描述

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

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

相关文章

VSCode设置用鼠标滚轮控制字体大小

VSCode设置用鼠标滚轮控制字体大小 1. 在左下角&#xff0c;打开设置选项&#xff1a; 2. 找到字体设置&#xff0c;直接修改配置文件&#xff1a; 3. 在配置文件中添加如下内容&#xff1a; "editor.mouseWheelZoom": true别忘了上一行要以逗号结尾。 4. 按住ctrl…

西圣、酷盟和绿联哪款平替电容笔好?三款电容笔真实测评对比

随着越来越多的人开始体验无纸化学习和办公&#xff0c;电容笔成为了一个广受欢迎的iPad配件。而原装电容笔价格太高&#xff0c;如果能有性能相当&#xff0c;价格低廉的替代品&#xff0c;无疑会减轻一些经济负担。因此&#xff0c;平替电容笔应运而生&#xff0c;成为了许多…

Node-RED开源项目的modbus通信(TCP)

一、Modbus 通信协议 Modbus是一种串行通信协议&#xff0c;是Modicon公司&#xff08;现在的施耐德电气 Schneider Electric&#xff09;于1979年为使用可编程逻辑控制器&#xff08;PLC&#xff09;通信而发表。Modbus已经成为工业领域通信协议的业界标准&#xff08;De fact…

FineReport 模板参数查询示例

通过模板参数实现&#xff0c;参数为空查询全部 参数无值时查询全部&#xff0c;则在查询前&#xff0c;需要先判断参数是否有值&#xff0c;有值则执行过滤&#xff1b;无值则不过滤。 1、新建数据集 ds1 SELECT * FROM S订单2、添加模板参数 3、单元格配置 $货主地区 &qu…

【Triton教程】向量相加

Triton 是一种用于并行编程的语言和编译器。它旨在提供一个基于 Python 的编程环境&#xff0c;以高效编写自定义 DNN 计算内核&#xff0c;并能够在现代 GPU 硬件上以最大吞吐量运行。 更多 Triton 中文文档可访问 →https://triton.hyper.ai/ 在本教程中&#xff0c;你将使…

Golang | Leetcode Golang题解之第485题最大连续1的个数

题目&#xff1a; 题解&#xff1a; func findMaxConsecutiveOnes(nums []int) (maxCnt int) {cnt : 0for _, v : range nums {if v 1 {cnt} else {maxCnt max(maxCnt, cnt)cnt 0}}maxCnt max(maxCnt, cnt)return }func max(a, b int) int {if a > b {return a}return …

Android TextView实现一串文字特定几个字改变颜色

遇到一个需求&#xff0c;让Android端实现给定一个字符串指定下标的几个字颜色与其他字颜色不一致。 主要是用ForegroundColorSpan这个API来传入颜色值&#xff0c;用SpannableString来设置指定索引下标的字的颜色值。 这里通过给定一个输入文字描述框&#xff0c;要求输入指定…

线上问题排查-常见的线上问题

一、线上问题排查思路 明确问题&#xff1a;首先&#xff0c;需要明确线上出现了什么问题。这包括了解问题的具体表现、发生的时间、影响的范围等。通过收集用户反馈、查看监控系统告警等方式&#xff0c;收集问题相关信息。收集信息&#xff1a;收集与问题相关的各种信息&…

BIO CHINA2025生物发酵展高歌猛进,规模再升级, 亮点及活动发布,精彩就在此刻!

BIO CHINA2025生物发酵展高歌猛进&#xff0c;规模再升级&#xff0c; 亮点及活动发布&#xff0c;精彩就在此刻&#xff01; 目前国家高度重视生物经济与生物技术产业的发展&#xff0c;出台了一系列政策措施支持行业发展。生物发酵行业作为现代生物经济的重要支柱&#xff0…

【原创】java+ssm+mysql校园在线答疑管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Scrapy | 爬取笑话网来认识继承自Spider的crawlspider爬虫类

crawlspider 1. 创建crawlspider爬虫2. 实战-爬取笑话网笑话 本篇内容旨在拓展视野和知识&#xff0c;了解crawlspider的使用即可&#xff0c;主要熟悉掌握spider类的使用 CrawlSpider 提供了一种更高级的方法来定义爬取规则&#xff0c;而无需编写大量的重复代码。它基于规则…

Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。

2024-10-19&#xff0c;由伊利诺伊大学厄巴纳-香槟分校和香港城市大学的研究团队提出了一种创新方法&#xff0c;通过将常规视频转换成伪标记的多摄像机视角推荐数据集&#xff0c;有效解决了在未知领域中模型泛化能力差的问题。数据集的创建&#xff0c;为电影、电视和其他媒体…

【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的

目录 1、问题 2、解决方法 1、问题 写论文的时候&#xff0c;有时会出现乱码的情况&#xff0c; 如下图&#xff0c;这种情况&#xff0c; 可是 在打印预览的时候&#xff0c;就显示的正常 如下图&#xff0c; 2、解决方法 既然是文档正文显示错误&#xff0c;显示乱码&…

typeAliases以及mappers

typeAliases 我们来观察一下CarMapper.xml中的配置信息&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd&qu…

Spark数据源的读取与写入、自定义函数

1. 数据源的读取与写入 1.1 数据读取 读文件 read.jsonread.csv csv文件由两个部分组成&#xff1a;头部数据&#xff08;也就是字段数据&#xff09;、行数据。 read.orc 读数据库 read.jdbc(jdbc连接地址,table‘表名’,properties{‘user’用户名,‘password’密码,‘driv…

万能工具箱小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 万能工具箱小程序源码系统是一款集多种实用工具于一体的综合性平台。它为用户提供了便捷的操作界面和丰富的功能选项&#xff0c;满足了人们在日常生活和工作中的各种需求。 该系统采用先进的技术架构&#xff0c;具备高度的稳定性和可靠性。无论是在处理大量数据还…

python excel如何转成json,并且如何解决excel转成json时中文汉字乱码的问题

1.解决excel转成json时中文汉字乱码的问题 真的好久没有打开这个博客也好久没有想起来记录一下问题了&#xff0c;今天将表格测试集转成json格式的时候遇到了汉字都变成了乱码的问题&#xff0c;虽然这不是个大问题&#xff0c;但是编码问题挺烦人的&#xff0c;乱码之后像下图…

Flink窗口分配器WindowAssigner

前言 Flink 数据流经过 keyBy 分组后&#xff0c;下一步就是 WindowAssigner。 WindowAssigner 定义了 stream 中的元素如何被分发到各个窗口&#xff0c;元素可以被分发到一个或多个窗口中&#xff0c;Flink 内置了常用的窗口分配器&#xff0c;包括&#xff1a;tumbling wi…

【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律

文章目录 C 栈与队列详解&#xff1a;基础与进阶应用前言第一章&#xff1a;栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章&#xff1a;队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

【linux】线程(二)

10. pthread_t 类型 注意&#xff1a; 每一个线程的库级别的tcb的起始地址&#xff0c;就是线程的 tid每一个线程都有自己独立的栈结构线程和线程之间&#xff0c;也是可以被其他线程看到并访问的&#xff08;比如全局函数&#xff09; 代码 如果想要进程拥有私人的全局变量(即…