黑马学ElasticSearch(九)

news2025/1/18 17:02:55

目录:

(1)数据聚合-聚合的分类

(2)数据聚合-DSL实现Bucket聚合

(3) 数据聚合-DSL实现Metrics聚合

(4)数据聚合-RestClient实现聚合

(5)数据聚合-多条件聚合

(6)数据聚合-带过滤条件的聚合


前面学习了ES的基本用法和数据搜索功能,下面 继续深入ES的搜索功能,看一看它更复杂的用法

数据聚合:可以帮助我们可以对海量的数据做统计分析,如果结合Kanban形成可视化的报表,让用户一目了然形成数据结果,更方便数据分析

自动补全:可以根据用户输入的部分信息,去自动补全和提示用户想要输入的内容 ,增加用户的体验

数据同步:ES和MySQL数据库的双写的一致性问题,对应的解决方案

(1)数据聚合-聚合的分类

在MySQL也有聚合功能:聚合函数:avg、max、min等等,聚合函数需要结合group by分组去使用

ES具备MySQL类似的聚合功能,并且还做了更丰富的聚合功能: 

聚合先学习下面常见的,详细可以查看官网:

Aggregations | Elasticsearch Guide [8.6] | Elastic

 

 桶聚合:类似Group by

(2)数据聚合-DSL实现Bucket聚合

 

aggs:aggressions的缩写,aggs里面可以定义好多的聚合的,所以是一个数组,里面可以定义多个 

定义几个brandAgg就会有多少个brandAgg 的结果

 size=0  是搜索中不包含文档,所以hits是空的

关注的是aggregations

buckets是桶:聚合是桶的聚合,所以结果有很多桶,这个桶是品牌的桶,品牌一样的放在一个桶里面,所以是一个数组,会有很多桶

里面的size是显示10条

 

 

 doc_count:是文档数量,桶里面有几条文档啊,是倒叙排序,统计出来越多的排名越靠前,这是默认的排序规则,排序可以更改

 

上面的聚合是对整个索引库的搜索,如果有上亿条数据,这个聚合对内存的消耗还是非常大的 ,我们能不能限定聚合搜索的范围呢?

(3) 数据聚合-DSL实现Metrics聚合

 

 

 在按照平均评分做降序排列:

 

 (4)数据聚合-RestClient实现聚合

 

添加一个单元测试方法:

 

 

 

 

 

添加解析:

 

 

 

 (5)数据聚合-多条件聚合

 

在IHotelService中定义新的接口:

 

实现类IHotelServiceImpl中实现这个方法: 

可以把聚合条件封装成一个方法Ctrl+Alt+M 

 

 

 

 

 

把解析方法中相同的部分也进行封装成一个方法Ctrl+Alt+M

解析封装的方法:

 

封装的聚合方法: 

 

最终代码:

 

 在一个测试类中打印一下这个结果:

成功的得到了三个字段的聚合结果: 

 

 (6)数据聚合-带过滤条件的聚合

 

 

filter:是查询聚合过滤项的请求 

 

发现这两个请求携带的参数是一样的,为什么查过滤项的时候也要带条件呢?过滤项查询要通过聚合来实现,聚合一带上条件就来限定聚合的范围,为何要限定范围呢?直接对整个索引库做聚合不行呢?

在搜索是没有加条件,搜索的是索引库的所有数据,对所有数据做聚合得到城市和品牌没有问题,但是当输入内容虹桥,得到的数据一定是跟上海虹桥有关的结果

上海虹桥有关的城市对应的一定是上海,但是对索引库的所有数据做聚合,得到的城市一定包含所有的城市,所以用户一定就很奇怪拉,命名搜索的是上海的还能出现北京的呢?如果再点击北京在结合搜索条件虹桥,能搜到任何东西吗?肯定是不能的北京没有虹桥,所以说不应该对索引库的所有字段做聚合,用户条件是虹桥,就应该对虹桥相关的酒店做聚合,限定聚合的范围,需要加查询条件,查询时用什么条件聚合时也用什么条件,这样就是在酒店的基础上做聚合,这样查询结果就更精确了因此,在查询过滤项时和查询时要用相同的条件

 

 

 

在HotelController中添加新的接口访问:

 

 修改接口的方法:加上一个参数,上面已经写过这个方法,只是没有参数

 实现类的方法:加一个参数,加一个查询条件

 聚合封装的方法buildAggregation()

封装的聚合方法: 

 query封装的过滤方法:

 

 发现已经搜索出来了:

 使用价格过滤:城市变少了

 在添加搜索虹桥:搜到的更少了,城市直接就没了,因为虹桥只有是上海,没有必要在去选

 所以在聚合的时候需要添加一些过滤条件,去限制聚合的范围。

 

 

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

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

相关文章

重复生成数据itertools.repeat()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】 【Python-数据分析】 重复生成数据 itertools.repeat() [太阳]选择题 以下python代码结果错误的一项是? import itertools print("【执行】xitertools.repeat(abc,3)") xitertools.repeat(abc,3) print…

xml中xsd/xsi/xsl/xmlns的区别和联系

(2023.01.13Fri才明白,具体解析xml文件的不是xml文件本身,xsi也不是在解析xml文件,只是检验xml文件是否符合标准,xsd是在限制xml文件的内容。而具体解析某个element究竟是什么样式、起到什么作用,是需要接收…

可信AI年度观察 | 生成式AI技术及产品快速迭代,生成内容质量及安全性仍需提升

自2021年起,生成式人工智能(以下简称“生成式AI”)连续两年入选Gartner《Hype Cycle for Artificial Intelligence》,被认为是未来重要的AI技术趋势。2022年以来,生成式AI产品不断涌现,生成内容模态多样&am…

Python机器学习:认识机器学习

🌕 机器学习是什么? ⭐️:机器学习是一门涉及数学、统计学、计算机科学等的学科。 ⭐️:机器学习是从一个大量的已知数据中,学习如何对未知的新数据进行预测,并且可以随着学习内容的增加,提高对…

让你彻彻底底理解“并发”以及“并行”

1. 前言 我们做后端的人,一般会遇到别人给你说高并发,那我们知道什么叫并发吗??? 什么叫并行吗??? 今天这篇文章的目的其实就是为了讲明白什么叫并发,并行。好了废话不多…

二维数组八个方向的判断--牛客刷题1023-病菌感染

铁子和顺溜上生物课的时候不小心将几滴超级病菌滴到了培养皿上,这可急坏了他们。 培养皿可以被看成一个n*n的方格,最初病菌滴在了这n*n的格子中的某些格子,病菌的传染方式是这样的,如果一个方格与两个或多个被感染的方格相邻(两个…

2023,数字政务潮水已至

城市是时代发展最鲜活的物理存在,政务是城市的“中枢系统”,将数字技术广泛应用于政府管理服务,既能提高政府公共服务的履约效能,亦顺应经济社会数字化转型的大趋势。 作者|子雨 出品|产业家 从集聚资源求增长,到…

Linux的文件系统和软硬链接

目录 文件系统 磁盘的物理结构: 磁盘的存储结构 磁盘的逻辑抽象结构 管理文件 那么文件如何与属于自己的内容关联起来? 创建一个文件,OS做了什么? 删除一个文件,OS做了什么? 软硬链接 硬链接 软连…

Python学习笔记——字典

字典是一种映射类型 ,它是一个无序的集合。内部元素是键值对形式出现,即一个关键字(key)与一个值(value)的组合(“键-值”对)。字典是一种可变容器模型,且可存…

视频在线点播功能如何实现?

1. 视频点播需求分析1.1 需求描述视频点播需求如下:1、学生可以在windows浏览器上在线观看视频。2、播放器具有快进、快退、暂停等基本功能。1.2 视频点播解决方案1.2.1 流媒体详细参考:https://baike.baidu.com/item/%E6%B5%81%E5%AA%92%E4%BD%93/98740…

2023年网络安全比赛--网络安全应急响应中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交; 2.找出系统中被植入的后门用户删除掉,并将后门用户的账号作为Flag值提交(多个用户名之间以英文逗号分割,如:admi…

【项目】小帽教育(一)

小帽教育 第一章 项目开发环境搭建 一、项目背景 1.在线教育市场环境 在线教育行业是一个有着极强的广度和深度的行业,从校内到校外;从早幼教到职业培训;从教育工具到全信息化平台等等。 2020年的新冠疫情外生冲击,让在线教育…

Android 深入系统完全讲解(14)

2 如何定位编译问题 编译不出来,编译不生效,都是可以用比对的方式去处理。之前遇见只改资源单编译不生效,跟正常的一比较发现是系统编译机制是判断代码的时间戳,而不管资源目录,于是处理的方式就是单编配置强制&#…

过年了,我采集采集m3u8格式做做动态壁纸不过分吧

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 首先澄清一下,我用Python收集这些视频,绝不是想做别的什么, 真的只是用来做动态壁纸,大家不要误会!我不是那样的人~ 这样的不过份吧 😻 环境 Python…

二叉树的深度 | 分治 +回溯 + 迭代

二叉树的最大深度 leetcode https://leetcode.cn/problems/maximum-depth-of-binary-tree/ 回溯基本思路 二叉树的最大深度就是 : 从根节点到叶子节点的最大的深度 定义一个全局变量 int res 0 , 以及局部变量 depth 表示当前层的深度当我们访问到根节点的时候(前序位置), 就…

亿信华辰出席2022DAMA中国数据管理峰会,共话数据治理

2023年1月7日-8日,万众瞩目的2022DAMA中国数据管理峰会在上海成功举办,国内外知名行业领袖、业内优秀企业代表出席了会议。会上,围绕 “数据基础制度和数字化转型”主题,前沿观点高能碰撞、专家学者共话未来。亿信华辰首席运营官毛…

CTP开发(1)CTP开发的概述

CTP是上海期货交易所开发的一套程序化交易的API。这篇文章呢,是进行扫盲和引路的,让你在开发时可以少走弯路。1、如果你要进行CTP开发,那么先是在模拟环境下调试,这就需要去上期的仿真模拟网站simnow下载相应的API包。地址如下&am…

[数字信号处理]时域中的离散时间信号和系统

离散时间信号最基本的形式是定义在等间隔的时间离散值上,且在这些离散时间上的信号振幅值是连续的。离散时间系统则是输入为离散时间信号输出也是离散时间信号的系统。对于线性时不变(LTI)系统来说,我们可以发现LTI系统与该系统的…

【4】Kubesphere_多租户

目录 创建企业空间角色 邀请新成员 部门管理 准备工作 创建部门 分配用户至部门 从部门中移除用户 删除和编辑部门 进入访问控制 可以配置企业空间、用户和用户角色 企业空间角色页面列出了以下四个可用的内置角色。创建企业空间时,KubeSphere 会自动创建内…

对称加密面临的那些挑战

密码对于多数人,是既熟悉又陌生的存在,注册账户、登录账号、网购,网络上的开展大多数行为都需要基于输入密码这一前提,从这方面谈,我们熟悉且熟知密码。然而这些由简单的字母、数字、符号等构成的简单口令,…