es的聚合查询(二)

1、es常用的聚合查询有三种
桶聚合
指标聚合
管道聚合
首先我们创建一个product的索引,并插入数据

PUT /product
{"mappings": {"properties": {"category": { "type": "keyword" },"price": { "type": "float" },"timestamp": { "type": "date" }}}
}POST /product/_doc/1
{"category": "iphone","price": 1200,"timestamp": "2024-04-01"
}POST /product/_doc/2
{"category": "Electronics","price": 800,"timestamp": "2024-04-10"
}POST /product/_doc/3
{"category": "Clothing","price": 50,"timestamp": "2024-04-10"
}POST /product/_doc/4
{"category": "Clothing","price": 30,"timestamp": "2024-04-15"
}POST /product/_doc/5
{"category": "Electronics","price": 1500,"timestamp": "2024-05-21"
}

2、桶聚合:常用的桶聚合如下
Terms聚合 - 类似SQL的group by,根据字段唯一值分组;
Histogram聚合 - 根据数值间隔分组,例如: 价格按100间隔分组,0、100、200、300等等;
Date histogram聚合 - 根据时间间隔分组,例如:按月、按天、按小时分组;
Range聚合 - 按数值范围分组,例如: 0-150一组,150-200一组,200-500一组;

比如:我想根据category字段唯一值来分组

GET /product/_search?size=0
{"aggs": {"shop": { //聚合查询的名字,随便取个名字"terms": { //聚合类型为: terms"field": "category"  //要聚合分组的字段}}}
}

以上好比sql为

select category, count(*) from product group by category

结果为:

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 5,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"shop" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "Clothing", //key是category的各种情况"doc_count" : 2 //是每种category的次数},{"key" : "Electronics","doc_count" : 2},{"key" : "iphone","doc_count" : 1}]}}
}

以上这种写法经常用到下拉框列表的聚合分组查询。

2、按照产品类别进行分组,并计算每个类别下的平均价格

GET /product/_search
{"size": 0,"aggs": {"category_buckets": {"terms": {"field": "category"},"aggs": {"avg_price": {"avg": {"field": "price"}}}}}
}

结果如下:

{"took" : 5,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 5,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"category_buckets" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "Clothing","doc_count" : 2,"avg_price" : {"value" : 40.0}},{"key" : "Electronics","doc_count" : 2,"avg_price" : {"value" : 1150.0}},{"key" : "iphone","doc_count" : 1,"avg_price" : {"value" : 1200.0}}]}}
}

3、指标聚合:指标聚合对文档中的数值字段执行统计操作,如求和、平均值、最大值、最小值等
比如:计算所有产品的平均价格。

{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 5,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"avg_price" : {"value" : 716.0}}
}

比如:计算所有商品的最大价格

GET /product/_search
{"size": 0,"aggs": {"avg_price": {"max": {"field": "price"}}}
}

4、写一个复杂的聚合查询,并配合query查询
比如我想筛出 category = Electronics 和Clothing 的商品,然后在这基础上对category分组,求分组后category的平均值及合计两个字段

GET /product/_search
{"size": 0, //size=0代表不需要返回query查询结果,仅仅返回aggs统计结果"query": { //query查询category=Electronics 和Clothing的数据"terms": {"category": ["Electronics","Clothing"]}},"aggs": { //开始对category字段聚合分组"product_category": { //聚合名称"terms": {"field": "category"},"aggs": { //聚合名称  "avg_price": {"avg": { // 指标聚合类型为avg"field": "price"}},"sum_price":{ //聚合名称"sum": { //指标聚合类型为sum"field": "price"}}}}}
}

结果如下:

{"took" : 27,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 4,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"product_category" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "Clothing","doc_count" : 2,"avg_price" : {"value" : 40.0},"sum_price" : {"value" : 80.0}},{"key" : "Electronics","doc_count" : 2,"avg_price" : {"value" : 1150.0},"sum_price" : {"value" : 2300.0}}]}}
}

后续更新管道聚合

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

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

相关文章

系统思考—时间滞延

“没有足够的时间是所有管理问题的一部分。”——彼得德鲁克 鱼和熊掌可以兼得,但并不能同时获得。在提出系统解决方案时,我们必须认识到并考虑到解决方案的实施通常会有必要的时间滞延。这种延迟有时比我们预想的要长得多,特别是当方案涉及…

2024年大唐杯备考

努力更新中…… 第一章 网络架构和组网部署 1.1 5G的网络整体架构 5G网络中的中传、回传、前传(这里属于承载网的概念) CU和DU之间是中传 BBU和5GC之间是回传 BBU和AAU之间是前传(这个好记) 这里竟然还藏了MEC(…

golang的MQTT的连接操作

最近在使用golang开发后端服务的时候,因为需要和物联网设备进行数据交互,由于需要终端主动上报数据,也需要平台主动下发指令,所以我们选择了mqtt进行通信。 1、MQTT通信逻辑 MQTT采用的是订阅和发布的方式,数据是通过…

前端大屏适配几种方案

一、方案一:remfont-size 动态设置HTML根字体大小和body字体大小,会使用到lib-flexible.js插件lib-flexible.js (function flexible(window, document) {var docEl document.documentElementvar dpr window.devicePixelRatio || 1// adjust body font…

Element-UI 自定义-下拉框选择年份

1.实现效果 场景表达&#xff1a; 默认展示当年的年份&#xff0c;默认展示前7年的年份 2.实现思路 创建一个新的Vue组件。 使用<select>元素和v-for指令来渲染年份下拉列表。 使用v-model来绑定选中的年份值。 3.实现代码展示 <template><div><el-…

智能革命:未来人工智能创业的天地

智能革命&#xff1a;未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代&#xff0c;人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步&#xff0c;不仅影响着科技行业的每一个角落&#xff0c;更是为创业者提供了…

创建一个flutter的左划重命名,右划隐藏的功能

首先定义一下参数&#xff0c;以及左划右划的方法 double deleteButtonPosition -120;double renameButtonPosition -120;void _onHorizontalDragUpdate(DragUpdateDetails details) {setState(() {if (details.delta.dx < 0) {// 左滑deleteButtonPosition 0; // 显示删…

【vs2019】window10环境变量设置

【vs2019】window10环境变量设置 【先赞后看养成习惯】求关注点赞收藏&#x1f60a; 安装VS2019时建议默认安装地址&#xff0c;最好不要改动&#xff0c;不然容易出问题 以下是安装完VS2019后环境变量的设置情况&#xff0c;C:\Program Files (x86)\Microsoft Visual Studi…

5.3 mybatis之autoMappingUnknownColumnBehavior作用

文章目录 1. NONE2. WARNING3. FAILING autoMappingUnknownColumnBehavior是< settings >配置下的属性&#xff0c;该属性是指定发现自动映射目标未知列&#xff08;或未知属性类型&#xff09;的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应…

【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、类的作用域 二、类的实例化 三、类对象模型 四、this指针 1、this指针的引出 2 this指针的特…

AI python

AI python 软件方面程序上的人工智能&#xff0c;和物理那种能跑机器人没关系

cocos creator 实现spine局部换装

1 使用3.7.4版本 2 js代码 3 c Native层修改源码

为什么你的LDO输出不稳定?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海。 前一阵朋友和我说当初用某型号LDO时&#xff0c;发现输出异常&#xff0c;仔细阅读datasheet后&#x…

Java可重复单列集合

Collection集合 Java Collection 是 java.util包中的一个接口&#xff0c;它用于将多个对象表示为单个单元。 Collection接口在Java中扮演着非常重要的角色&#xff0c;它提供了一种方式来存储和操作一组对象。以下是一些关于Java Collection的重要信息&#xff1a; 接口定义…

C++string类(个人笔记)

string类 1.认识string的接口以及熟练使用常用接口1.1string类对象的常见构造1.2string类对象的容量操作1.3string类对象的访问及遍历操作1.4string类对象的修改操作 2.vs 和g下string结构的说明3.string类运用的笔试题4.string类的模拟实现 1.认识string的接口以及熟练使用常用…

数据链路层(上):以太网、二层交换机和网络风暴

目录 数据链路层知识概览 数据链路层设备 1、二层交换机 2、拓展&#xff1a;二层交换机与三层交换机有啥区别&#xff1f; 3、广播风暴 4、交换机以太网接口的工作模式 数据链路层的功能 数据链路层--以太网 1、以太网是什么&#xff1f; 2、以太网地址 数据链路层知…

bugku-web-安慰奖

提示备份 开始扫后台 得到备份文件index.php.bak 得到php代码 <?phpheader("Content-Type: text/html;charsetutf-8"); error_reporting(0); echo "<!-- YmFja3Vwcw -->"; class ctf {protected $username hack;protected $cmd NULL;public f…

【python】 numpy 中常用随机数函数的使用和记忆(不易混淆)

文章目录 概述固定分布随机数&#xff08;只需指定形状的随机函数&#xff09;np.random.randomnp.random.randnp.random.randn 随机范围随机数&#xff08;需要指定范围和形状的随机函数&#xff09;np.random.randintnp.random.uniformnp.random.normalnp.random.poisson 代码…

数据分析案例(三):基于RFM分析的客户分群

实验2 基于RFM分析的客户分群 Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢…

PostgreSQL入门到实战-第二十九弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(四)官网地址PostgreSQL概述PostgreSQL中CUBE命令理论PostgreSQL中CUBE命令实战更新计划 PostgreSQL中数据分组操作(四) 如何使用PostgreSQL CUBE生成多个分组集 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不…