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

项目实战:ES的增加数据和查询数据

文章目录

  • 背景
  • 在ES中增加数据
    • 新建索引
    • 删除索引
  • 在ES中查询数据
    • 查询数据总数量
  • 项目具体使用(实战)
    • 引入依赖
    • 方式一:使用配置类连接对应的es服务器
      • 创建配置类
      • 编写业务逻辑----根据关键字查询相关的聊天内容
      • 在ES中插入数据
  • 总结提升

背景

最近需要做一个有关查询聊天记录的功能,通过资料了解到使用ES可以方便我们快速查询内容。自己进行ES框架的搭建,感兴趣的可以看博客进行学习:https://blog.csdn.net/weixin_45309155/article/details/132686375?spm=1001.2014.3001.5501
ES搭建好之后就是应用了,下面就先总结一下关于最近在项目中的应用。

在ES中增加数据

因为在要在项目中进行增加数据。查阅资料需要有索引。所以要先进行索引的创建。这部分是先在postman中调用接口进行创建索引。

新建索引

在postman中,使用接口:

http://116.XXXXXX:9200/chat

IP地址+端口号+你需要创建的索引名称。请求类型为put
在这里插入图片描述
如果创建成功之后就会显示如下代码:

{"acknowledged": true,"shards_acknowledged": true,"index": "chat"
}

删除索引

在postman中使用接口:

http://116.XXXXXX:9200/chat

P地址+端口号+你需要删除的索引名称。请求类型为delete
如果删除成功会显示代码:

{"acknowledged": true
}

这里需要注意的是:当你删除索引的时候,如果该索引下有数据内容的话,会把对应的数据进行删除。

在ES中查询数据

在postman中使用接口:

http://116.XXXXX:9200/chat/_search

在这里插入图片描述
如果有内容,就可以看到相应插入的数据

查询数据总数量

在postman中使用接口

http://116.XXXXX:9200/chat/_count

请求类型为get
请求体为:

{"query": {"match_all": {}}
}

在这里插入图片描述
如果有数据的话会显示数据的总数;
在这里插入图片描述

项目具体使用(实战)

引入依赖

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client-sniffer</artifactId><version>${elasticsearch.version}</version></dependency>

方式一:使用配置类连接对应的es服务器

创建配置类

@Configuration
public class ElasticSearchClientConfig {@Beanpublic RestClientBuilder restClientBuilder() {RestHighLevelClient restHighLevelClient =new RestHighLevelClient (RestClient.builder(new HttpHost("ES的ip地址",9200,"http")));return client;}
}

编写业务逻辑----根据关键字查询相关的聊天内容

这里需要入参:需要查询的关键字keyword

public List<Map<String, Object>> search(String userId,String fileName, String keyword) throws IOException {ArrayList<Map<String, Object>> resultList = new ArrayList<>();try {if (userId.isEmpty()||fileName.isEmpty()||keyword.isEmpty()){throw new Exception();}// 构建查询条件BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();// 匹配receiver或sender为userId的文档boolQueryBuilder.should(QueryBuilders.termQuery("receiver", userId));boolQueryBuilder.should(QueryBuilders.termQuery("sender", userId));// 部分匹配content字段的关键字MatchQueryBuilder contentQueryBuilder = QueryBuilders.matchQuery(fileName, keyword);boolQueryBuilder.must(contentQueryBuilder);// 创建搜索请求,chat为索引值SearchRequest searchRequest = new SearchRequest("chat");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(boolQueryBuilder);searchRequest.source(searchSourceBuilder);// 执行搜索SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);// 解析结果for (SearchHit documentFields : searchResponse.getHits().getHits()) {Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();Object  receiver =  sourceAsMap.get("receiver");Object  sender =  sourceAsMap.get("sender");if ((receiver != null && receiver.toString().equals(userId)) || (sender != null && sender.toString().equals(userId))) {resultList.add(sourceAsMap);}}return resultList;}catch (Exception e){e.printStackTrace();}return resultList;}

在ES中插入数据

public Boolean parseContent() throws IOException {List<SendMessagePojo> list= queryContent();//需要插入的内容BulkRequest bulkRequest = new BulkRequest();for (int i = 0; i < list.size(); i++) {bulkRequest.add(new IndexRequest("chat").source(JSONObject.toJSONString(list.get(i)), XContentType.JSON));}try {BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);return !bulk.hasFailures();}catch (Exception e){e.printStackTrace();}return null;}

插入到es时,不需要提前定义列名,当你什么实体的类型的值时,就可以直接按照你的实体名称进行存储。

上面两段业务代码可以根据自己的业务代码进行修改调整。

总结提升

Elasticsearch (ES) 是一个分布式搜索和分析引擎,它具有强大的实时数据处理能力。以下是关于ES增加和删除业务场景的总结,旨在提升您对ES的理解。

ES的增加业务场景

  1. 数据索引和搜索
    ES的主要用途之一是将数据索引到Elasticsearch集群中,并使用其强大的搜索功能来查询和检索数据。以下是一些使用ES进行数据索引和搜索的业务场景:

电子商务网站:将商品信息索引并快速搜索,实现商品的全文搜索、过滤和排序。
新闻网站:将新闻文章索引到ES中,通过关键字搜索、相关性排序等功能提供高效的全文搜索服务。
日志分析:将日志数据索引到ES,利用其强大的搜索和聚合功能来实时分析和监控系统日志。
社交媒体分析:将社交媒体数据索引到ES,通过搜索和聚合功能来分析用户行为、趋势和情感分析等。
2. 实时数据处理
ES对实时数据处理的支持使其成为处理大规模实时数据流的理想选择。以下是一些使用ES进行实时数据处理的业务场景:

监控和告警系统:将实时产生的监控指标和日志数据索引到ES中,通过实时搜索和聚合功能进行告警和异常检测。
实时日志分析:将实时产生的日志数据索引到ES中,通过搜索和聚合功能快速分析应用程序或系统的实时日志。
事件处理和通知:将实时事件索引到ES中,通过实时搜索和推送功能来处理事件并发送通知。
3. 数据聚合和分析
ES提供了强大的聚合和分析功能,可以对大规模数据集进行高效的数据挖掘和分析。以下是一些使用ES进行数据聚合和分析的业务场景:

业务智能报表:利用ES的聚合功能,对大规模数据进行聚合和汇总,生成业务智能报表和可视化图表。
用户行为分析:通过对用户行为数据的聚合和分析,提取用户喜好、兴趣和行为模式等信息,用于个性化推荐和营销策略。
数据探索和发现:通过搜索和聚合功能,对数据集进行探索和发现,挖掘数据中的潜在模式、关联性和趋势。
ES的删除业务场景

  1. 数据清理和过期数据删除
    由于ES的索引是基于倒排索引的,对于长时间未更新的数据,可能会占用不必要的磁盘空间和内存资源。以下是一些使用ES进行数据清理和过期数据删除的业务场景:

日志数据清理:定期删除旧的日志数据,以保持ES集群的性能和存储效率。
缓存数据刷新:根据数据的过期时间,在ES中实现缓存数据的自动刷新和删除。
2. 数据保护和隐私合规
根据隐私法规和合规要求,需要定期删除或销毁某些类型的数据。以下是一些使用ES进行数据保护和隐私合规的业务场景:

用户数据删除:根据用户的请求或特定时间段,删除包含敏感信息的用户数据。
合规数据保留:根据法律法规的要求,对特定类型的数据进行保留期限管理和数据销毁操作。
总结来说,ES的增加和删除功能可以应用于各种业务场景,包括数据索引和搜索、实时数据处理、数据聚合和分析,以及数据清理和隐私合规。通过充分利用ES的功能,可以提升数据的可发现性、实时性和分析能力,从而为业务带来更大的价值。

相关文章:

项目实战:ES的增加数据和查询数据

文章目录 背景在ES中增加数据新建索引删除索引 在ES中查询数据查询数据总数量 项目具体使用&#xff08;实战&#xff09;引入依赖方式一&#xff1a;使用配置类连接对应的es服务器创建配置类编写业务逻辑----根据关键字查询相关的聊天内容在ES中插入数据 总结提升 背景 最近需…...

vs code调试rust乱码问题解决方案

在terminal中 用chcp 65001 修改一下字符集&#xff0c;就行了。有的博主推荐 修改 区域中的设置&#xff0c;这会引来很大的问题。千万不要修改如下设置&#xff1a;...

大数据课程K22——Spark的SparkSQL的API调用

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的通过api使用SparkSQL; 一、通过api使用SparkSQL 1. 实现步骤 1. 打开scala IDE开发环境,创建一个scala工程。 2. 导入spark相关依赖jar包。 3. 创建包路径以object类。 4.…...

数据结构学习系列之顺序表的两种删除方式

方式1&#xff1a;在顺序表的末端删除所存储的数据元素&#xff0c;代码如下&#xff1a;示例代码&#xff1a; int delete_seq_list_1(list_t *seq_list){if(NULL seq_list){printf("入参为NULL\n");return -1;}if(0 seq_list->count){printf("顺序表为空…...

机器学习笔记之最优化理论与方法(七)无约束优化问题——常用求解方法(上)

机器学习笔记之最优化理论与方法——基于无约束优化问题的常用求解方法[上] 引言总体介绍回顾&#xff1a;线搜索下降算法收敛速度的衡量方式线性收敛范围高阶收敛范围 二次终止性朴素算法&#xff1a;坐标轴交替下降法最速下降法(梯度下降法)梯度下降法的特点 针对最速下降法缺…...

ES-索引管理

前言 数据类型 ​ 搜索引擎是对数据的检索&#xff0c;所以我们先从生活中的数据说起。我们生活中的数据总体分为两种&#xff1a; 结构化数据非结构化数据 结构化数据&#xff1a; 也称作行数据&#xff0c;是由二维表结构来逻辑表达和实现的数据&#xff0c;严格地遵循数…...

linux中常用shell脚本整理

linux常见shell脚本整理 备份日志 #!/bin/bash # 每日创建新的备份日志-根据日期备份 tar -czf log-date %Y%m%d.tar.gz /var/log # 通过crontab 每日定时启动 00 03 * * 5 /root/logbak.sh 监控内存和磁盘容量&#xff0c;小于给定值时报警 #!/bin/bash # 实…...

介绍PHP

PHP是一种流行的服务器端编程语言&#xff0c;用于开发Web应用程序。它是一种开源的编程语言&#xff0c;具有易学易用的语法和强大的功能。PHP支持在服务器上运行的动态网页和Web应用程序的快速开发。 PHP可以与HTML标记语言结合使用&#xff0c;从而能够生成动态的Web页面&a…...

selenium+find_elements用法

1、假如我们遇到多个标签的class一样&#xff0c;比如像下面这样的 我们可以采用js语法去定位&#xff0c;比如&#xff1a; document.getElementsByClassName("ant-calendar-picker-input ant-input")[0]...

1DM+下载器_11.2.1魔改增强版下载

1DM「原&#xff1a;IDM」下载器是一款安卓端的下载工具&#xff0c;多语言解锁版直安装版本&#xff0c;号称是目前 Android 平台最快、最先进的下载管理器应用「支持通过Torrent下载」&#xff0c;而这个版本是改线程的最新idm版本&#xff0c;可用来下载视频、音乐、电影、T…...

vue3:3、项目目录和关键文件

关于vsvode的更改 <!-- 加上setup允许在script中直接编写组合式api --> <script setup> // 组件引入后直接用 import HelloWorld from ./components/HelloWorld.vue import TheWelcome from ./components/TheWelcome.vue</script><!-- 1、js放在最上面&am…...

ChatGPT实战与私有化大模型落地

文章目录 大模型现状baseline底座选择数据构造迁移方法评价思考 领域大模型训练技巧Tokenizer分布式深度学习数据并行管道并行向量并行分布式框架——Megatron-LM分布式深度学习框架——Colossal-AI分布式深度学习框架——DeepSpeedP-tuning 微调 资源消耗模型推理加速模型推理…...

10分钟从实现和使用场景聊聊并发包下的阻塞队列

上篇文章12分钟从Executor自顶向下彻底搞懂线程池中我们聊到线程池&#xff0c;而线程池中包含阻塞队列 这篇文章我们主要聊聊并发包下的阻塞队列 阻塞队列 什么是队列&#xff1f; 队列的实现可以是数组、也可以是链表&#xff0c;可以实现先进先出的顺序队列&#xff0c;…...

Python入门学习13(面向对象)

一、类的定义和使用 类的使用语法&#xff1a; 创建类对象的语法&#xff1a; ​​​​​​​ class Student:name None #学生的名字age None #学生的年龄def say_hi(self):print(f"Hi大家好&#xff0c;我是{self.name}")stu Student() stu.name &q…...

哈工大计算机网络课程网络安全基本原理之:身份认证

哈工大计算机网络课程网络安全基本原理之&#xff1a;身份认证 在日常生活中&#xff0c;在很多场景下我们都需要对当前身份做认证&#xff0c;比如使用密码、人脸识别、指纹识别等&#xff0c;这些都是身份认证的常用方式。本节介绍的身份认证&#xff0c;是在计算机网络安全…...

海外代购系统/代购网站怎么搭建

搭建海外代购系统/代购网站的详细步骤涉及到的内容非常多&#xff0c;本文将分为以下几个部分进行详细介绍&#xff1a;前端开发、后端管理系统的开发、数据库设计和代购流程的设计与实现。 一、前端开发 前端开发是整个代购网站的门面&#xff0c;它直接面向用户&#xff0c…...

go-micro

go-micro Go Micro简介go-micro体系结构gin-go-micro使用consul实现服务注册与发现实现服务发现批量启动多个服务测试服务发现服务调用在微服务中使用ProtocolBuffergo-micro配置文件...

安装GPU驱动,CUDA Toolkit和配置与CUDA对应的Pytorch

如果有帮助,记得回来点个赞 目录 1.安装指定GPU驱动如果安装的GPU CUDA Version和CUDA Toolkit版本已经冲突怎么办? 2.安装指定版本的CUDA Toolkit如果我安装了CUDA Toolkit之后nvcc -V仍然显示旧的CUDA Toolkit版本怎么办? 3.安装与CUDA对应的Pytorch 1.安装指定GPU驱动 &…...

JavaScript单例模式

JavaScript单例模式 1 什么是单例模式2 实现一个基础的单例模式3 透明的单例模式4 用代理实现单例模式5 JavaScript 中的单例模式6 惰性单例 1 什么是单例模式 保证一个类只有一个实例&#xff0c;并提供一个访问它的全局访问点&#xff0c;这就是单例模式。 单例模式是一种常…...

centos下安装jenkins.war

https://get.jenkins.io/war-stable/ 下载jenkins.war包,(2.164.1 版本支持1.8&#xff0c;其他的都是jdk11),可以安装完成后更新jenkins.war的安装包启动jenkins命令 java -jar jenkins.war --httpPort8010访问http://IP:8010/jenkins &#xff08;密码在/root/.jenkins/secre…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...