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://www.mzph.cn/news/673481.shtml

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

相关文章

DC-7靶机渗透详细流程

信息收集&#xff1a; 1.存活扫描&#xff1a; 由于靶机和kali都是nat的网卡&#xff0c;都在一个网段&#xff0c;我们用arp-scan会快一点&#xff1a; arp-scan arp-scan -I eth0 -l └─# arp-scan -I eth0 -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:dd:ee:6…

【蓝桥杯冲冲冲】[NOIP2017 提高组] 宝藏

蓝桥杯备赛 | 洛谷做题打卡day29 文章目录 蓝桥杯备赛 | 洛谷做题打卡day29[NOIP2017 提高组] 宝藏题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示题解代码我的一些话[NOIP2017 提高组] 宝藏 题目背景 NOIP2017 D2T2 题目描…

机器人学、机器视觉与控制 上机笔记(2.1章节)

机器人学、机器视觉与控制 上机笔记&#xff08;2.1章节&#xff09; 1、前言2、本篇内容3、代码记录3.1、新建se23.2、生成坐标系3.3、将T1表示的变换绘制3.4、完整绘制代码3.5、获取点*在坐标系1下的表示3.6、相对坐标获取完整代码 4、结语 1、前言 工作需要&#xff0c;想同…

51单片机之数码管显示表白数字篇

朝菌不知晦朔 蟪蛄不知春秋 眼界决定境界 CSDN 请求进入专栏 是否进入《51单片机专栏》? 确定 目录 数码管的简介 数码管引脚定义 数码管的原理图 74HC245 代码实现 静态数码管的显示 动态数码管的显示 数码管实现表白画面 数码管的简介 L…

Pytorch 安装与配置

每次在服务器上配置环境都需要考虑 Pytorch 版本 / CUDA 版本 / GPU 驱动版本等诸多因素&#xff0c;因为 ⌈ \lceil ⌈Pytorch 只能下载指定 CUDA 版本的库 ⌋ \rfloor ⌋、 ⌈ \lceil ⌈GPU 只能使用特定版本的驱动 ⌋ \rfloor ⌋、 ⌈ \lceil ⌈GPU 有最高支持的 CUDA 版本…

国际物流数字化运输方式选择指南 | 箱讯科技

国际物流涉及多种运输方式&#xff0c;每种方式都有其独特的优势和适用场景。选择合适的运输方式对于确保货物安全、及时到达目的地并控制成本至关重要。以下是对六种主要国际运输方式的简要介绍和选择建议&#xff1a; 国际快递&#xff1a;适用于小件、高价值或急需的货物。…

基于Skywalking开发分布式监控(二)

续上篇&#xff0c;上一篇主要是讲了为啥选skywalking&#xff0c;以及怎么有针对性改造SW Agent&#xff0c;现在我们继续看看如何构建自定义Trace跟踪链 要对SW Agent插件做适当剪裁&#xff0c;原来包括customize插件在内SW 8.9有100多个插件&#xff0c;如果没有作用也就罢…

jvm几个常见面试题整理

1. Full GC触发机制有如下5种情况。 (1)调用System.gc()时&#xff0c;系统建议执行Full GC&#xff0c;但是不必然执行。(2)老年代空间不足。(3)方法区空间不足。(4)老年代的最大可用连续空间小于历次晋升到老年代对象的平均大小就会进行Full GC。(5)由Eden区、S0(From)区向S…

基于蒙特卡洛的电力系统可靠性分析matlab仿真,对比EDNS和LOLP

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 1.课题概述 电力系统可靠性是指电力系统按可接受的质量标准和所需数量不间断地向电力用户供应电力和电能量的能力的量度&#xff0c;包括充裕度和安全性两个方面。发电系统可靠性是指统一并网的全部发电机…

OOD分类项目训练

一、项目地址 GitHub - LooKing9218/UIOS 二、label制作 将训练、验证、测试数据的分类信息转换入.csv文件中&#xff0c;运行如下脚本即可&#xff1a; import os import csv#要读取的训练、验证、测试文件的目录&#xff0c;该文件下保存着以各个类别命名的文件夹和对应的分…

【网站项目】035家居商城系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

加推科技,华为云上生长的营销革新

编辑&#xff1a;阿冒 设计&#xff1a;沐由 “我是个很幸运的人。”几天前的一次采访中&#xff0c;彭超——加推科技创始人、CEO&#xff0c;如此扼要简洁地总结自己的职业历程&#xff0c;完全不是我想象中那种前顶级Sales的口若悬河。 加推科技创始人、CEO 彭超 没错&…

ZigBee学习——在官方例程上实现串口通信

Z-Stack版本为3.0.2 IAR版本为10.10.1 文章目录 一、添加头文件二、定义接收缓冲区三、编写Uart初始化函数四、编写串口回调函数五、函数声明六、函数调用七、可能遇到的问题(function “halUartInit“ has no prototype) 以下所有操作都是在APP层进行&#xff0c;也就是这个文…

ThinkPHP 中使用Redis

环境.env [app] app_debug "1" app_trace ""[database] database "" hostname "127.0.0.1" hostport "" password "" prefix "ls_" username ""[redis] hostname "127.0.0.1…

Java并发基础:BlockingQueue和BlockingDeque接口的区别?

核心概念 BlockingQueue 和 BlockingDeque 它们都支持在并发编程中的线程安全操作&#xff0c;但是&#xff0c;这两个接口之间存在一些关键的区别&#xff0c;主要在于它们所支持的操作和数据结构的特性&#xff0c;如下&#xff1a; 1、数据结构特性&#xff1a; Blocking…

npm 上传一个自己的应用(4) 更新自己上传到NPM中的工具版本 并就行内容修改

前面 npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM 我们讲了将自己写的一个函数发送到npm上 那么 如果我们想到更好的方案 希望对这个方法进行修改呢&#xff1f; 比如 我们这里加一个方法 首先 我们还是要登录npm npm login然后 根据要求填写 Username 用…

HDFS 之 数据管理(namespace 和 slaves)

1、namespace Namespace在HDFS中是一个非常重要的概念,也是有效管理数据的方法。Namespace有很多优点:可伸缩性。使HDFS集群存储能力可以轻松进行水平拓展;系统性能。单点性能受限,影响系统吞吐;隔离性。不同业务类型访问集群有时容易互相干扰,使用多Namespace可以有效管…

BlueLotus 下载安装使用

说明 蓝莲花平台BlueLotus&#xff0c;是清华大学曾经的蓝莲花战队搭建的平台&#xff0c;该平台用于接收xss返回数据。 正常执行反射型xss和存储型xss&#xff1a; 反射型在执行poc时&#xff0c;会直接在页面弹出执行注入的poc代码&#xff1b;存储型则是在将poc代码注入用…

如何在 emacs 上开始使用 Tree-Sitter(windows)

文章目录 如何在emacs上开始使用Tree-Sitter&#xff08;windows&#xff09; 如何在emacs上开始使用Tree-Sitter&#xff08;windows&#xff09; 参考&#xff1a;“How to Get Started with Tree-Sitter”。 首先要有一个可运行的emacs&#xff0c;并且它支持Tree-Sitter&…

Docker配置Portainer容器管理界面

目录 一、Portainer 简介 优点&#xff1a; 缺点&#xff1a; 二、环境配置 1. 拉取镜像 2. 创建启动容器 三、操作测试 1. 进入容器 2. 拉取镜像并部署 3. 访问测试 一、Portainer 简介 Portainer 是一个开源的轻量级容器管理界面&#xff0c;用于管理 Docker 容器…