数据聚合、数据同步

news/2024/11/25 9:45:37/

文章目录

  • 数据聚合
    • Bucket聚合语法
    • 聚合结果排序
    • 限定聚合范围
    • Metric聚合语法
  • RestAPI实现聚合
  • 数据同步
    • 发送MQ消息
    • 接收MQ消息

数据聚合

Bucket聚合语法

GET /hotel/_search
{"size": 0,   // 设置size为0,结果中  不包含文档,只包含聚合结果~"aggs": {    // 定义聚合"brandAgg": {  //给聚合起个名字"terms": {   // 聚合的类型,按照品牌值聚合,所以选择term"field": "brand",   // 参与聚合的字段"size": 20    // 希望获取的聚合结果数量}}}
}

在这里插入图片描述

聚合结果排序

默认情况下,Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序。

我们可以指定order属性,自定义聚合的排序方式

GET /hotel/_search
{"size": 0, "aggs": {"brandAgg": {"terms": {"field": "brand","order": {"_count": "asc" // 按照_count升序排列},"size": 20}}}
}

限定聚合范围

可以限定要聚合的文档范围,只要添加query条件即可

GET /hotel/_search
{"query": {"range": {"price": {"lte": 200 // 只对200元以下的文档聚合}}}, "size": 0, "aggs": {"brandAgg": {"terms": {"field": "brand","size": 20}}}
}

这次,聚合得到的品牌明显变少了:
在这里插入图片描述

Metric聚合语法

对酒店按照品牌分组,形成了一个个桶。现在我们需要对桶内的酒店做运算,获取每个品牌的用户评分的min、max、avg等值。

这就要用到Metric聚合了,例如stat聚合:就可以获取min、max、avg等结果。

语法如下:

GET /hotel/_search
{"size": 0, "aggs": {"brandAgg": { "terms": { "field": "brand", "size": 20},"aggs": { // 是brands聚合的子聚合,也就是 分组后对每组分别计算"score_stats": { // 聚合名称"stats": { // 聚合类型,这里stats可以计算min、max、avg等"field": "score" // 聚合字段,这里是score}}}}}
}

在这里插入图片描述

RestAPI实现聚合

聚合条件与query条件同级别,因此需要使用request.source()来指定聚合条件。
在这里插入图片描述
聚合的结果也与查询结果不同,API也比较特殊。不过同样是 JSON逐层解析:
在这里插入图片描述

数据同步

在这里插入图片描述

流程如下:

  • hotel-admin对mysql数据库数据完成增、删、改后,发送MQ消息
  • hotel-demo监听MQ,接收到消息后完成elasticsearch数据修改

发送MQ消息

在这里插入图片描述

接收MQ消息

@Override
public void deleteById(Long id) {try {// 1.准备RequestDeleteRequest request = new DeleteRequest("hotel", id.toString());// 2.发送请求client.delete(request, RequestOptions.DEFAULT);} catch (IOException e) {throw new RuntimeException(e);}
}@Override
public void insertById(Long id) {try {// 0.根据id查询酒店数据Hotel hotel = getById(id);// 转换为文档类型HotelDoc hotelDoc = new HotelDoc(hotel);// 1.准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());// 2.准备Json文档request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);// 3.发送请求client.index(request, RequestOptions.DEFAULT);} catch (IOException e) {throw new RuntimeException(e);}
}

http://www.ppmy.cn/news/4336.html

相关文章

行为树 --- [7] BehaviorTree.CPP 4.x版本的编译及使用

根据BehaviorTree.CPP的官方介绍,3.x版本已经不再维护了,建议使用4.x版本, 4.x版本和3.x版本的区别可以看这里 — https://www.behaviortree.dev/migration 本文介绍4.x版本的编译及使用,环境是Debian 10.5,编译器是…

<Linux进程通信之管道>——《Linux》

目录 一、进程通信 1.进程间通信介绍 2.进程间通信目的 3.进程间通信发展 4.进程间通信分类 二、管道 1.什么是管道 2.匿名管道 3.用fork来共享管道原理 4.站在文件描述符角度-深度理解管道​编辑 5.编程模拟实现父子进程在管道读写通信​编辑 6.进程控制&#xff…

nodejs+vue校园用车辆校车管理系统

本项目的应用场景描述如下:为减少学生等待校车的时间,合理安排校车调度,设计并开发一个校车预约系统,系统由手机端、服务器端、车载刷卡端三部分组成。学生通过手机应用(或微信应用)查看校车运行时段&#…

将 Bean 注入 Spring 容器的方法

这里写目录标题1. Configuration Bean2. Componet ComponentScan3. Import 注解导入3.1 Import 直接导入类3.2 Import ImportSelector接口3.3 Import DeferredImportSelector接口3.4 Import ImportBeanDefinitionRegistrar接口4. FactoryBean接口5. BeanDefinitionRegistr…

三层-生成树-ospf-速端口思科练习实验

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,…

大数据呀大数据

大数据 啥是大数据? 我自己的一些经历–>>在做代码开发之前,一直觉得大数据这件事是高大上的一门学问,门槛很高,而且我上大学的时候这个词才刚刚在众多互联网记住中展露头角; 我的个人经历–>> 我上大学时那时候安卓的版本才到安卓4.4,在智能手机出来普及以前,各…

json对象数组集合-第10讲

假设我们有如下是一组数据: { "my_array": [{ "name": "www", "age": 120 }, { "name": "wkf&q…

van-uplaoder保存文件到后端,回显后端接口返回的数据

实现功能:在移动端使用van-uploader组件上传图片,然后调用接口保存到后端数据库,提交保存信息成功后,调用另外的接口返回数据用来回显uploaded的文件,(一般正常的返回数据的接口是个图片地址,可…