Springboot 整合 Elasticsearch(三):使用RestHighLevelClient操作ES ①

📁 前情提要:

Springboot 整合 Elasticsearch(一):Linux下安装 Elasticsearch 8.x

Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES

目录

一、Springboot 整合 Elasticsearch

1、pom.xml 中添加依赖

2、application.yml 中添加配置项

3、RestHighLevelClient API介绍

3.1、连接配置类

3.2、检查索引是否存在

3.2、创建索引

3.3、删除索引

3.4、增加文档

3.5、按主键更新文档内容

3.6、按主键删除文档内容

3.7、批量添加文档


一、Springboot 整合 Elasticsearch

1、pom.xml 中添加依赖

        <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId></dependency>

2、application.yml 中添加配置项

spring:elasticsearch:rest:uris: 192.168.1.250:9200

3、RestHighLevelClient API介绍

3.1、连接配置类

@Component
public class EsConfig {@Value("${spring.elasticsearch.rest.uris}")private String uris;/*** 高版本客户端** @return*/@Beanpublic RestHighLevelClient restHighLevelClient() {String[] split = uris.split(",");HttpHost[] httpHostArray = new HttpHost[split.length];for (int i = 0; i < split.length; i++) {String item = split[i];httpHostArray[i] = new HttpHost(item.split(":")[0], Integer.parseInt(item.split(":")[1]), "http");}// 创建RestHighLevelClient客户端return new RestHighLevelClient(RestClient.builder(httpHostArray));}
}

3.2、检查索引是否存在

    @Testpublic void checkIndex() {try {String indexName = "forest";boolean exists = esConfig.restHighLevelClient().indices().exists(new GetIndexRequest(indexName), RequestOptions.DEFAULT);System.out.println("exists:" + exists);} catch (IOException e) {e.printStackTrace();}}

3.2、创建索引

    @Testpublic void createIndex() {try {// 创建名为“森林”的索引String indexName = "forest";if (checkIndex(indexName)) {log.info("已存在名为{}的索引", indexName);return;}CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName);CreateIndexResponse createIndexResponse = esConfig.restHighLevelClient().indices().create(createIndexRequest, RequestOptions.DEFAULT);System.out.println("已创建索引:" + createIndexResponse.index());} catch (IOException e) {e.printStackTrace();}}public boolean checkIndex(String indexName) {boolean exists = false;try {exists = esConfig.restHighLevelClient().indices().exists(new GetIndexRequest(indexName), RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();}return exists;}

3.3、删除索引

    @Testpublic void deleteIndex() {String indexName = "forest";DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indexName);// 发送delete请求try {AcknowledgedResponse response = esConfig.restHighLevelClient().indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);System.out.println("是否已删除:" + response.isAcknowledged());} catch (IOException e) {e.printStackTrace();}}

3.4、增加文档

    @Testpublic void createDoc() {try {String indexName = "forest";ForestDoc forestDoc = new ForestDoc();forestDoc.setId(001L).setTitle("枫树").setImages("http://fengshu.jpg").setPrice(300.00).setInventory(600);// 创建索引请求对象IndexRequest indexRequest = new IndexRequest(indexName);indexRequest.id(forestDoc.getId().toString());indexRequest.source(JSON.toJSONString(forestDoc), XContentType.JSON);// 设置数据刷新策略indexRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);IndexResponse index = esConfig.restHighLevelClient().index(indexRequest, RequestOptions.DEFAULT);System.out.println("状态:" + index.status().getStatus());} catch (IOException e) {e.printStackTrace();}}

 ⚠️​​​​​RefreshPolicy 刷新策略,是WriteRequest接口中的一个内部枚举
 ① IMMEDIATE:
    请求向ElasticSearch提交了数据,立即进行数据刷新,然后再结束请求。
    优点:实时性高、操作延时短。
    缺点:资源消耗高。
 ② WAIT_UNTIL:
    请求向ElasticSearch提交了数据,等待数据完成刷新,然后再结束请求。
    优点:实时性高、操作延时长。
    缺点:资源消耗低。
 ③ NONE:
    默认策略。
    请求向ElasticSearch提交了数据,不关系数据是否已经完成刷新,直接结束请求。
    优点:操作延时短、资源

3.5、按主键更新文档内容

修改 id 为 2 的 images字段内容

    @Testpublic void updateDocById() {try {String indexName = "forest";String id = "2";UpdateRequest updateRequest = new UpdateRequest(indexName, id);Map<String, Object> map = new HashMap<>();map.put("images", "http://baihuashu.jpg");updateRequest.doc(map);UpdateResponse update = esConfig.restHighLevelClient().update(updateRequest, RequestOptions.DEFAULT);System.out.println("状态:" + update.status().getStatus());} catch (IOException e) {e.printStackTrace();}}

3.6、按主键删除文档内容

    @Testpublic void deleteDocById() {String indexName = "forest";String id = "5";DeleteRequest deleteRequest = new DeleteRequest(indexName,id);try {DeleteResponse delete = esConfig.restHighLevelClient().delete(deleteRequest, RequestOptions.DEFAULT);System.out.println("状态:" + delete.status().getStatus());} catch (IOException e) {e.printStackTrace();}}

3.7、批量添加文档

    @Testpublic void batchCreateDoc() {try {String indexName = "forest";List<ForestDoc> list = new ArrayList<>();ForestDoc forestDoc = new ForestDoc();forestDoc.setId(6L).setTitle("批量_柏树").setImages("http://baishu.jpg").setPrice(1100.00).setInventory(1200);list.add(forestDoc);ForestDoc forestDoc2 = new ForestDoc();forestDoc2.setId(7L).setTitle("批量_苹果树").setImages("http://pingguoshu.jpg").setPrice(1200.00).setInventory(1300);list.add(forestDoc2);ForestDoc forestDoc3 = new ForestDoc();forestDoc3.setId(8L).setTitle("批量_海棠树").setImages("http://haitangshu.jpg").setPrice(1300.00).setInventory(1400);list.add(forestDoc3);//批量导入BulkRequest bulk = new BulkRequest(indexName);for (ForestDoc doc : list) {IndexRequest indexRequest = new IndexRequest();indexRequest.id(doc.getId().toString());indexRequest.source(JSON.toJSONString(doc), XContentType.JSON);bulk.add(indexRequest);}BulkResponse bulkResponse = esConfig.restHighLevelClient().bulk(bulk, RequestOptions.DEFAULT);System.out.println("状态:" + bulkResponse.status().getStatus());} catch (IOException e) {e.printStackTrace();}}


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

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

相关文章

c++设计模式之装饰器模式

作用 为现有类增加功能 案例说明 class Car { public:virtual void show()0; };class Bmw:public Car { public:void show(){cout<<"宝马汽车>>"<<endl;} };class Audi:public Car { public:void show(){cout<<"奥迪汽车>>&q…

2023年12月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( ) A:10倍 B:2倍 C:4倍 D:8倍 答案:C 二进制进位规则是逢二进一,因此末尾添加一个0,是扩大2倍,添加两个0…

【Linux开发工具】yum命令详解

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.概念2.yum的配置信…

Docker-Learn(二)保存、导入、使用Docker镜像

1.保存镜像 根据上一节内容&#xff0c;将创建好镜像进行保存&#xff0c;需要退出当前的已经在运行的docer命令行中断里面&#xff0c;可以通过在终端里面输入指令exit或者按下键盘上的 ctrlD建退出&#xff1a; 回到自己的终端里面&#xff0c;输入指令&#xff1a; docker…

学习VR全景拍摄,如何选择适合的VR全景设备?

随着VR全景技术的不断成熟和发展&#xff0c;VR全景已经成为摄影爱好者、地产行业、中介经纪人、广告、企业宣传等行业从业者们乐于尝试的新领域、新手段。 如何选择合适的VR全景设备成为了一个重要的问题。今天&#xff0c;和大家聊一聊&#xff0c;不同行业、人群和用途更适合…

从Unity到Three.js(安装启动)

发现在3D数字孪生或模拟仿真方向&#xff0c;越来越多的公司倾向使用Web端程序&#xff0c;目前一直都是使用的Unity进行的Web程序开发&#xff0c;但是存在不少问题&#xff0c;比如内存释放、shader差异化、UI控件不支持复制或输入中文等。虽然大多数问题都可以找到解决方案&…

Swift Combine 发布者publisher的生命周期 从入门到精通四

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三 1. 发布者和订阅者的生命周期 订阅者和发布者以明确定义的顺序进行通信&#xff0c;因此使得它们具有从开始到结束的生命周期&#xff1a; …

Leetcode3020. 子集中元素的最大数量

Every day a Leetcode 题目来源&#xff1a;3020. 子集中元素的最大数量 解法1&#xff1a;哈希 枚举 用一个哈希表统计数组 nums 中的元素及其出现次数。 暴力枚举数组中的数&#xff0c;作为 x&#xff0c;然后不断看 x2,x4,⋯ 在数组中的个数。直到个数不足 2 个为止&a…

CDH6.3.2 多 Spark 版本共存

一 部署Spark客户端 1.1 部署spark3客户端 tar -zxvf spark-3.3.1-bin-3.0.0-cdh6.3.2.tgz -C /opt/cloudera/parcels/CDH/lib cd /opt/cloudera/parcels/CDH/lib mv spark-3.3.1-bin-3.0.0-cdh6.3.2/ spark3将 CDH 集群的 spark-env.sh 复制到 /opt/cloudera/parcels/CDH/li…

C语言系列-文件操作

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 为什么使用文件 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存上&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就会丢失了&#xff0c;等再次运行…

如何内网映射到外网访问?

内网映射到外网访问是一种常见的网络技术&#xff0c;它允许内部网络的资源通过公网进行访问。在某些情况下&#xff0c;我们可能想要访问内部服务器或设备&#xff0c;但由于网络环境的限制&#xff0c;无法直接通过公网访问。此时&#xff0c;内网映射就成为一种解决方案。 天…

Netty源码系列 之 AbstractUnsafe 高低水位线 ChannelOutboundBuffer 源码

目录 AbstractUnsafe.write [注&#xff1a;AbstractUnsafe为Netty定制的Unsafe&#xff0c;非jdk原生的Unsafe] 高低水位线补充 ChannelOutboundBuffer总览 & 高低水位线的剖析 AbstractUnsafe.write [注&#xff1a;AbstractUnsafe为Netty定制的Unsafe&#xff0c;非j…

学习好并用好大模型

大模型是个好东西&#xff0c;学好并用好益处多多~ 1. 运用大模型服务我们的工作 运用大模型服务于工作&#xff0c;可以从以下几个方面着手&#xff1a; 知识管理与检索&#xff1a; 利用大模型强大的自然语言处理能力&#xff0c;建立企业内部的知识库系统。员工可以通过提问…

Python速成篇(基础语法)上

引言 都是我手欠非要报什么python的计算机二级&#xff0c;现在好了假期不但要冲C艹&#xff0c;还要学个python&#xff0c;用了几天的时间速成了一下python的基础语法&#xff0c;其实在学会C的基础上&#xff0c;py学起来是非常的快啊。这篇博客呢&#xff0c;建议有一定语…

Golang 基础 Go Modules包管理

Golang 基础 Go Modules包管理 在 Go 项目开发中&#xff0c;依赖包管理是一个非常重要的内容&#xff0c;依赖包处理不好&#xff0c;就会导致编译失败&#xff0c;本文将系统介绍下 Go 的依赖包管理工具。 我会首先介绍下 Go 依赖包管理工具的历史&#xff0c;并详细介绍下…

Wireshark不显示Thrift协议

使用Wireshark对thrift协议进行抓包&#xff0c;但是只显示了传输层的tcp协议&#xff1a; "右键" -> "Decode As" 选择thrift的tcp端口 将“当前”修改为Thrift&#xff0c;然后点击“确定” 设置后&#xff0c;可以发现Wireshark里面显示的协议从Tcp变…

#Z2322. 买保险

一.题目 二.思路 1.暴力 训练的时候&#xff0c;初看这道题&#xff0c;这不就打个暴力吗&#xff1f; 2.暴力代码 #include<bits/stdc.h> #define int long long using namespace std; int n,m,fa,x,y,vis[1000001],ans; vector<int> vec[1000001]; void dfs(i…

网站被攻击有什么办法呢?

最近&#xff0c;德迅云安全遇到不少网站用户遇到攻击问题&#xff0c;来咨询安全解决方案。目前在所有的网络攻击方式中&#xff0c;DDoS是最常见&#xff0c;也是最高频的攻击方式之一。不少用户网站上线后&#xff0c;经常会遭受到攻击的困扰。有些攻击持续时间比较短影响较…

Redis——缓存设计与优化

讲解Redis的缓存设计与优化&#xff0c;以及在生产环境中遇到的Redis常见问题&#xff0c;例如缓存雪崩和缓存穿透&#xff0c;还讲解了相关问题的解决方案。 1、Redis缓存的优点和缺点 1.1、缓存优点&#xff1a; 高速读写&#xff1a;Redis可以帮助解决由于数据库压力造成…

以“防方视角”观JS文件信息泄露

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 案例概述02 攻击路径03 防方思路 01 案例概述 这篇文章来自微信公众号“黑白之道”&#xff0c;记录的某师傅从js文件泄露接口信息&#xff0c;未授权获取大量敏感信息以及通过逻辑漏洞登录管理员账…