当前位置: 首页 > news >正文

Elasticsearch(三)聚合基本使用

基础概念

bucket

数据分组,一些数据按照某个字段进行bucket划分,这个字段值相同的数据放到一个bucket中。可以理解成Java中的Map<String, List>结构,类似于Mysql中的group by后的查询结果。

metric:

对一个数据分组执行的统计,比如计算最大值,最小值,平均值等 类似于Mysql中的max(),min(),avg()函数的值,都是在group by后使用的。

案例

以如下文档结构为例:

{"_index" : "zb_notice","_type" : "_doc","_id" : "4451224572914342308301065","_score" : 1.0,"_source" : {"_class" : "NoticeEntity","id" : "111","url" : "https://xxxxxx/purchaseNotice/view/111?","owner" : "河管养所","procurementName" : "工程建筑","procurementNameText" : "应急抢险配套工程建筑","intermediaryServiceMatters" : "无(属于非行政管理的中介服务项目采购)","investmentApprovalProject" : "是","code" : "789456","scale" : 3.167183E8,"scaleText" : "投资额(¥316,718,300.00元)","area" : "","requiredServices" : "工程建筑","typeCodes" : ["021"],"context" : "是一座具有灌溉 、供水 、排洪 、交通和挡潮蓄淡等多功能的大(2)型水闸工程,承担黄冈河下游 8.65 万亩农田的灌溉任务并","timeLimit" : "具体时限以合同条款约定为准。","amount" : 0.0,"amountText" : "暂不做评估与测算","amountDescription" : "","selectIntermediaryType" : "直接选取","isChooseIntermediary" : "否","isAvoidance" : "否","endTime" : "2023-09-04 09:30:00","startTime" : "2023-08-31","files" : [{"fileName" : "东溪水闸初设批复(1).pdf","url" : "/aa/bb/file/downloadfile/PjAttachment/123456"}]}
}

统计服务类型最多公告

GET zb_notice/_search
{"size": 0,"aggs": {"song_qty_by_language": {"terms": {"field": "requiredServices"}}}
}

语法解释:

  • size:0 表示只要统计后的结果,原始数据不展现
  • aggs:固定语法 ,聚合分析都要声明aggs
  • song_qty_by_language:聚合的名称,可以随便写,建议规范命名
  • terms:按什么字段进行分组
  • field:具体的字段名称

响应结果如下:

{"took": 2,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 5,"max_score": 0,"hits": []},"aggregations": {"song_qty_by_language": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"doc_count": 5}]}}
}

语法解释:

  • hits: 由于请求时设置了size:0,hits就是空的
  • aggregations:聚合查询的结果
  • song_qty_by_language:请求时声明的名称
  • buckets:根据指定字段查询后得到的数据分组集合,[]内的是每一个数据分组,其中key为每个bucket的对应指定字段的值,doc_count为统计的数量。

默认按doc_count降序排序。

按服务分类的平均服务价格

GET zb_notice/_search
{"size": 0,"aggs": {"lang": {"terms": {"field": "requiredServices"},"aggs": {"length_avg": {"avg": {"field": "amount"}}}}}
}

这里为两层aggs聚合查询,先按服务类型统计,得到数据分组,再在数据分组里算平均价格。

多个aggs嵌套语法也是如此,aggs代码块的位置即可。

统计最多服务费、最少服务费等的公告

最常用的统计:count,avg,max,min,sum,语法含义与mysql相同。

GET zb_notice/_search
{"size": 0,"aggs": {"color": {"terms": {"field": "requiredServices"},"aggs": {"length_avg": {"avg": {"field": "amount"}},"length_max": {"max": {"field": "amount"}},"length_min": {"min": {"field": "amount"}},"length_sum": {"sum": {"field": "amount"}}}}}
}

按上架日期分段统计服务类型数量

按月统计

date histogram与histogram语法类似,搭配date interval指定区间间隔 extended_bounds表示最大的时间范围。

复制代码GET zb_notice/_search
{"size": 0,"aggs": {"sales": {"date_histogram": {"field": "publishTime","interval": "month","format": "yyyy-MM-dd","min_doc_count": 0,"extended_bounds": {"min": "2023-01-01","max": "2023-12-31"}}}}
}

interval的值可以天、周、月、季度、年等。可以延伸一下

GET zb_notice/_search
{"size": 0,"aggs": {"sales": {"date_histogram": {"field": "publishTime","interval": "quarter","format": "yyyy-MM-dd","min_doc_count": 0,"extended_bounds": {"min": "2019-01-01","max": "2019-12-31"}},"aggs": {"lang_qty": {"terms": {"field": "requiredServices"},"aggs": {"like_sum": {"sum": {"field": "amount"}}}},"total" :{"sum": {"field": "amount"}}}}}
}

带上过滤条件

聚合查询可以和query搭配使用,相当于mysql中where与group by联合使用

查询条件
GET zb_notice/_search
{"size": 0,"query": {"match": {"requiredServices": "工程咨询"}},"aggs": {"sales": {"terms": {"field": "requiredServices"}}}
}
过滤条件
GET zb_notice/_search
{"size": 0,"query": {"constant_score": {"filter": {"term": {"requiredServices": "工程咨询"}}}},"aggs": {"sales": {"terms": {"field": "requiredServices"}}}
}

相关文章:

Elasticsearch(三)聚合基本使用

基础概念 bucket 数据分组&#xff0c;一些数据按照某个字段进行bucket划分&#xff0c;这个字段值相同的数据放到一个bucket中。可以理解成Java中的Map<String, List>结构&#xff0c;类似于Mysql中的group by后的查询结果。 metric&#xff1a; 对一个数据分组执行…...

单片机C语言实例:14、音频输出

一、喇叭发声原理 程序实例1&#xff1a; #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff0c;头文件包含特殊功能寄存器的定义sbit SPK P1^2; //定义喇叭端口 /*------------------------------------------------函数声明 --------------…...

docker 和 podman的区别

Podman 和 Docker 都是用于容器化应用程序的工具&#xff0c;它们在很多方面非常相似&#xff0c;但也有一些关键区别&#xff1a; 1. 架构和权限&#xff1a; - Docker&#xff1a;Docker 使用守护进程&#xff08;dockerd&#xff09;来管理容器&#xff0c;它需要在操作…...

苹果手机远程控制安卓手机,为什么不能发起控制?

这位用户想要用iOS设备远程控制安卓设备&#xff0c;在被控端安装好AirDroid之后&#xff0c;就在控制端的苹果手机上也安装了AirDroid&#xff0c;然而打开控制端的软件&#xff0c;却没有在手机界面上看到【远程控制】按钮&#xff0c;于是提出了以上疑问。 解答 想要让iOS设…...

Gradle 配置国内镜像

我们在使用gradle构建项目的时候&#xff0c;每当需要build或者刷新依赖的时候&#xff0c;由于gradle需要从服务器下载各种依赖包&#xff0c;速度非常慢&#xff0c;根本原因是由于gradle服务器在国外&#xff0c;而国内有些一些大厂和高校(比如阿里&#xff0c;华为&#xf…...

Spring AOP使用指南: 强大的面向切面编程技术

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

Spring Boot集成Elasticsearch实战

文章目录 一、简介二、安装与配置Elasticsearch三、集成Spring Boot与Elasticsearch1. 添加依赖与配置文件2. 创建Elasticsearch数据模型3. 定义Elasticsearch仓库接口4. 实现Elasticsearch数据操作 四、基本查询与索引操作1. 插入与更新数据2. 删除数据与索引3. 条件查询与分页…...

【python零基础入门学习】python基础篇之文件对象open、模块以及函数的使用(三)

本站以分享各种运维经验和运维所需要的技能为主 《python》&#xff1a;python零基础入门学习 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…...

【JavaEE】_CSS常用属性值

目录 1. 字体属性 1.1 设置字体家族 font-family 1.2 设置字体大小 font-size 1.3 设置字体粗细 font-weight 1.4 设置字体倾斜 font-style 2. 文本属性 2.1 设置文本颜色 color 2.2 文本对齐 text-align 2.3 文本装饰 text-decoration 2.4 文本缩进 text-indent 2.…...

vue组件库开发,webpack打包,发布npm

做一个像elment-ui一样的vue组件库 那多好啊&#xff01;这是我前几年就想做的 但webpack真的太难用&#xff0c;也许是我功力不够 今天看到一个视频&#xff0c;早上6-13点&#xff0c;终于实现了&#xff0c;呜呜 感谢视频的分享-来龙去脉-大家可以看这个视频&#xff1a;htt…...

Java中快速排序的优化技巧:随机取样、三数取中和插入排序

目录 快速排序基础 优化1&#xff1a;随机取样 优化2&#xff1a;三数取中 优化3&#xff1a;插入排序 总结&#xff1a; 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;它的平均时间复杂度为O(n log n)。然而&#xff0c;在某些情况下&…...

【leetcode 力扣刷题】删除字符串中的子串or字符以满足要求

删除字符串中的子串或者字符以满足题意要求 1234. 替换子串得到平衡字符串680. 验证回文串917. 仅仅反转字母 1234. 替换子串得到平衡字符串 题目链接&#xff1a;1234. 替换子串得到平衡字符串 题目内容&#xff1a; 题目中给出了平衡字符串的定义——只有’Q’&#xff0c;…...

【Unity基础】3.脚本控制物体运动天空盒

【Unity基础】3.脚本控制物体运动&天空盒 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;搭建开发环境 &#xff08;1&#xff09;下载visual studio 在我们下载unity编译器的时候&…...

Spring MVC拦截器

拦截器&#xff08;Interceptor&#xff09;是 Spring MVC 提供的一种强大的功能组件。它可以对用户请求进行拦截&#xff0c;并在请求进入控制器&#xff08;Controller&#xff09;之前、控制器处理完请求后、甚至是渲染视图后&#xff0c;执行一些指定的操作。 在 Spring MV…...

ClickHouse的Join算法

ClickHouse的Join算法 ClickHouse是一款开源的列式分析型数据库&#xff08;OLAP&#xff09;&#xff0c;专为需要超低延迟分析查询大量数据的场景而生。为了实现分析应用可能达到的最佳性能&#xff0c;分析型数据库&#xff08;OLAP&#xff09;通常将表组合在一起形成一个…...

java面试题-RabbitMQ面试题

RabbitMQ面试题 面试官&#xff1a;RabbitMQ-如何保证消息不丢失 候选人&#xff1a; 嗯&#xff01;我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的&#xff0c;这里面就要求了消息的高可用性&#xff0c;我们要保证消息的不丢失。主要从三个层面考虑 第一…...

数据仓库-核心概念

数据仓库 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决策支持目的而创建。为需要业务智能的…...

java中的实体类

在Java与数据库交互时&#xff0c;设计实体类有以下几个原因&#xff1a; 1、对象关系映射&#xff08;ORM&#xff09;&#xff1a;实体类提供了一种将数据库中的表映射为Java对象的方式。这样&#xff0c;开发人员可以使用面向对象的方式操作数据库&#xff0c;而无需编写大…...

使用Puppeteer爬取地图上的用户评价和评论

导语 在互联网时代&#xff0c;获取用户的反馈和意见是非常重要的&#xff0c;它可以帮助我们了解用户的需求和喜好&#xff0c;提高我们的产品和服务质量。有时候&#xff0c;我们需要从地图上爬取用户对某些地点或商家的评价和评论&#xff0c;这样我们就可以分析用户对不同…...

GLSL ES着色器语言 使用矢量和矩阵的相关规范

目录 矢量和矩阵类型 下面是声明矢量和矩阵的例子&#xff1a; 赋值和构造 矢量构造函数 矩阵构造函数 构造矩阵的几种方式 访问元素 . 运算符 矢量的分量名 &#xff3b; &#xff3d;运算符 运算符 矢量和矩阵可用的运算符 矢量和矩阵相关运算 矢量和浮点数的…...

为什么你的电脑风扇总是“抽风“?3个简单步骤彻底解决Windows风扇控制难题

为什么你的电脑风扇总是"抽风"&#xff1f;3个简单步骤彻底解决Windows风扇控制难题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://git…...

Go语言实现轻量级C2框架:从零构建命令控制原型

1. 项目概述&#xff1a;一个轻量级、可自托管的C2框架初探最近在整理自己的安全研究环境时&#xff0c;发现很多开源C2&#xff08;Command and Control&#xff09;框架要么过于庞大&#xff0c;依赖复杂&#xff0c;要么功能过于单一&#xff0c;难以满足从学习到模拟测试的…...

终极指南:如何用免费软件完全掌控Windows电脑风扇噪音与散热平衡

终极指南&#xff1a;如何用免费软件完全掌控Windows电脑风扇噪音与散热平衡 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_T…...

Taotoken用量看板如何帮助开发者洞察API消费明细

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板如何帮助开发者洞察API消费明细 对于依赖大模型API进行开发的团队或个人而言&#xff0c;清晰、透明地掌握资源消…...

从零到一:基于STM32与MAX30102构建可穿戴健康监测原型

1. 硬件选型与原理分析 第一次接触MAX30102传感器时&#xff0c;我被它小巧的体积和强大的功能震撼到了。这个比指甲盖还小的芯片&#xff0c;居然能同时测量心率和血氧饱和度&#xff0c;这让我对可穿戴设备有了全新的认识。选择STM32F103作为主控&#xff0c;主要是看中它丰富…...

星露谷物语SMAPI终极指南:5分钟解锁无限模组世界

星露谷物语SMAPI终极指南&#xff1a;5分钟解锁无限模组世界 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 你是否曾梦想过让星露谷物语变得更加精彩&#xff1f;想象一下&#xff1a;当你辛苦耕种…...

别再复制官网代码了!Vue + Ant Design 图标与分隔符的本地化实战(附避坑指南)

Vue Ant Design 图标与分隔符的本地化实战指南 在Vue项目中使用Ant Design Vue组件库时&#xff0c;很多开发者习惯直接从官网复制示例代码。然而&#xff0c;这种"拿来主义"常常导致项目运行时出现图标不显示、样式依赖CDN资源等问题。本文将带你从零开始&#xff…...

从零到一:构建与解析XTS测试环境的实战指南

1. 环境准备&#xff1a;搭建XTS测试环境的基础条件 第一次接触XTS测试环境搭建时&#xff0c;我完全被各种术语搞晕了。后来才发现&#xff0c;只要把基础环境准备好&#xff0c;后面的工作就会顺利很多。就像盖房子要先打地基一样&#xff0c;搭建XTS测试环境也需要先准备好几…...

[GESP202512 C++ 三级] 选择题第 8 题 ← unsigned int

【题目描述】 在一个特定的计算机系统中&#xff0c;假如 unsigned int 类型需要占用2个字节的存储空间&#xff08;每个字节有8位&#xff09;&#xff0c;则 unsigned int 可以表示的数据范围是&#xff08; A &#xff09; A. 0 ~ 65535 B. 0 ~ 65536 C. -65536 ~ 655…...

Godot引擎集成CEF实现Web混合渲染:gdcef项目架构与实战指南

1. 项目概述与核心价值最近在折腾一个老项目的现代化改造&#xff0c;需要把传统的桌面应用嵌入到Web视图中&#xff0c;实现混合渲染。在技术选型时&#xff0c;我绕不开一个名字&#xff1a;CEF&#xff0c;也就是Chromium Embedded Framework。它几乎是桌面应用内嵌浏览器控…...