ElasticSearch-SpringBoot整合ElasticSearch

六、SpringBoot整合ElasticSearch

1、浏览官方文档

1、查找跟ES客户端相关的文档

在这里插入图片描述

使用Java REST Client

在这里插入图片描述

选择Java Hight Level REST Client
在这里插入图片描述

2、创建项目的准备

1.找到原生的依赖

在这里插入图片描述
在这里插入图片描述

2.找到对象

在这里插入图片描述

3.分析这个类里面的方法

3、正式创建项目

1.创建工程

在这里插入图片描述

2.导入依赖

注意依赖版本和安装的版本一致

在这里插入图片描述

<properties><java.version>1.8</java.version><!-- 统一版本 --><elasticsearch.version>7.6.1</elasticsearch.version>
</properties>

导入elasticsearch

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

提前导入fastjson、lombok

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.70</version>
</dependency>
<!-- lombok需要安装插件 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
分析依赖

①导入的依赖使用的transport是6.8.6的,版本太低,需要重新导入

在这里插入图片描述

在这里插入图片描述

②找到ES的版本的默认配置,进行手动配置

在这里插入图片描述

③自定义配置es版本依赖,保证和本地的一致

在这里插入图片描述

④查看重新导入的依赖
在这里插入图片描述

在这里插入图片描述

3.创建并编写配置类

在这里插入图片描述

@Configuration
public class ElasticSearchConfig {// 注册 rest高级客户端 @Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));return client;}
}

分析源码(Au、PS)

在这里插入图片描述

①先找到Au,自动配置类

在这里插入图片描述

②先找到es目录,查看包下的静态类

在这里插入图片描述

③也可以在data目录下,查找封装的所有方法类

在这里插入图片描述

④核心配置类

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4、创建并编写实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {private static final long serialVersionUID = -3843548915035470817L;private String name;private Integer age;
}

5、编写测试类

所有测试均在 SpringbootElasticsearchApplicationTests中编写

注入 RestHighLevelClient

在这里插入图片描述

@Autowired
public RestHighLevelClient restHighLevelClient;

6、索引的操作

1)索引的创建
// 测试索引的创建, Request PUT lbj_index
@Test
public void testCreateIndex() throws IOException {CreateIndexRequest request = new CreateIndexRequest("lbj_index");CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);System.out.println(response.isAcknowledged());// 查看是否创建成功System.out.println(response);// 查看返回对象restHighLevelClient.close();
}

在这里插入图片描述

2)索引的获取,并判断其是否存在
// 测试获取索引,并判断其是否存在
@Test
public void testIndexIsExists() throws IOException {GetIndexRequest request = new GetIndexRequest("index");boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists);// 索引是否存在restHighLevelClient.close();
}

在这里插入图片描述
在这里插入图片描述

3)索引的删除
// 测试索引删除
@Test
public void testDeleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("lbj_index");AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);System.out.println(response.isAcknowledged());// 是否删除成功restHighLevelClient.close();
}

在这里插入图片描述

7、文档的操作

1)文档的添加

在这里插入图片描述

// 测试添加文档(先创建一个User实体类,添加fastjson依赖)
@Test
public void testAddDocument() throws IOException {// 创建一个User对象User lbj= new User("lbj", 18);// 创建请求IndexRequest request = new IndexRequest("lbj_index");// 制定规则 PUT /lbj_index/_doc/1request.id("1");// 设置文档IDrequest.timeout(TimeValue.timeValueMillis(1000));// request.timeout("1s")// 将我们的数据放入请求中request.source(JSON.toJSONString(lbj), XContentType.JSON);// 客户端发送请求,获取响应的结果IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);System.out.println(response.status());// 获取建立索引的状态信息 CREATEDSystem.out.println(response);// 查看返回内容 IndexResponse[index=lbj_index,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
}

在这里插入图片描述

2)文档信息的获取

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 测试获得文档信息
@Test
public void testGetDocument() throws IOException {GetRequest request = new GetRequest("lbj_index","1");GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);System.out.println(response.getSourceAsString());// 打印文档内容System.out.println(request);// 返回的全部内容和命令是一样的restHighLevelClient.close();
}

在这里插入图片描述

3)文档的获取,并判断其是否存在

在这里插入图片描述

// 获取文档,判断是否存在 get /lbj_index/_doc/1
@Test
public void testDocumentIsExists() throws IOException {GetRequest request = new GetRequest("lbj_index", "1");// 不获取返回的 _source的上下文了request.fetchSourceContext(new FetchSourceContext(false));request.storedFields("_none_");boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);System.out.println(exists);
}

在这里插入图片描述
在这里插入图片描述

4)文档的更新

在这里插入图片描述
在这里插入图片描述

// 测试更新文档内容
@Test
public void testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("lbj_index", "1");User user = new User("lmk",11);request.doc(JSON.toJSONString(user),XContentType.JSON);UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);System.out.println(response.status()); // OKrestHighLevelClient.close();
}

在这里插入图片描述
在这里插入图片描述

5)文档的删除

在这里插入图片描述

// 测试删除文档
@Test
public void testDeleteDocument() throws IOException {DeleteRequest request = new DeleteRequest("lbj_index", "1");request.timeout("1s");DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);System.out.println(response.status());// OK
}

在这里插入图片描述

6)批量添加数据
前面的操作都无法批量添加数据
// 上面的这些api无法批量增加数据(只会保留最后一个source)
@Test
public void test() throws IOException {IndexRequest request = new IndexRequest("bulk");// 没有id会自动生成一个随机IDrequest.source(JSON.toJSONString(new User("liu",1)),XContentType.JSON);request.source(JSON.toJSONString(new User("min",2)),XContentType.JSON);request.source(JSON.toJSONString(new User("kai",3)),XContentType.JSON);IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);System.out.println(index.status());// created
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

大数据情况下,都是使用随机的id

在这里插入图片描述

// 特殊的,真的项目一般会 批量插入数据
@Test
public void testBulk() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");ArrayList<User> users = new ArrayList<>();users.add(new User("lbj-1",1));users.add(new User("lbj-2",2));users.add(new User("lbj-3",3));users.add(new User("lbj-4",4));users.add(new User("lbj-5",5));users.add(new User("lbj-6",6));// 批量请求处理for (int i = 0; i < users.size(); i++) {bulkRequest.add(// 这里是数据信息new IndexRequest("bulk").id(""+(i + 1)) // 没有设置id 会自定生成一个随机id.source(JSON.toJSONString(users.get(i)),XContentType.JSON));}BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk.status());// ok
}

在这里插入图片描述

7)文档的查询

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

// 查询
// SearchRequest 搜索请求
// SearchSourceBuilder 条件构造
// HighlightBuilder 高亮
// TermQueryBuilder 精确查询
// MatchAllQueryBuilder
// xxxQueryBuilder ...
@Test
public void testSearch() throws IOException {// 1.创建查询请求对象SearchRequest searchRequest = new SearchRequest();// 2.构建搜索条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// (1)查询条件 使用QueryBuilders工具类创建// 精确查询TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "lbj");//        // 匹配查询//        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();// (2)其他<可有可无>:(可以参考 SearchSourceBuilder 的字段部分)// 设置高亮searchSourceBuilder.highlighter(new HighlightBuilder());//        // 分页//        searchSourceBuilder.from();//        searchSourceBuilder.size();searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));// (3)条件投入searchSourceBuilder.query(termQueryBuilder);// 3.添加条件到请求searchRequest.source(searchSourceBuilder);// 4.客户端查询请求SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);// 5.查看返回结果SearchHits hits = search.getHits();System.out.println(JSON.toJSONString(hits));System.out.println("=======================");for (SearchHit documentFields : hits.getHits()) {System.out.println(documentFields.getSourceAsMap());}
}

在这里插入图片描述

在这里插入图片描述

ElasticSearch-SpringBoot整合ElasticSearch 到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

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

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

相关文章

Python 函数式编程进阶:map、filter、reduce

Python 函数式编程进阶&#xff1a;map、filter、reduce 介绍map 函数作用和语法使用 map 函数Lambda 函数的配合应用 filter 函数作用和语法使用 filter 函数Lambda 函数的结合运用 reduce 函数作用和语法使用 reduce 函数典型应用场景 介绍 在函数式编程中&#xff0c;map、…

【QT】opcuaServer 的构建

【QT】opcuaServer 的构建 前言opcuaServer实现测试 前言 在博文【opcua】从编译文件到客户端的收发、断连、节点查询等实现 中&#xff0c;我们已经介绍了如何在QT 中创建opucaClient 。在本期的博文中&#xff0c;我们基于之前的部署环境&#xff0c;介绍一下如何构建opcuaS…

springboot与Elasticsearch版本兼容对比

首先 大家在下载 Elasticsearch 时 最好先弄清楚版本 因为 如果 Spring Boot 版本 不兼容 Elasticsearch 那就是到头一场空了 Elasticsearch 版本 6.x 可以兼容 Spring Boot 2.x Elasticsearch 版本 7.x 可以兼容 Spring Boot 2.x 3.x 4x Elasticsearch 版本 7.x 以及 8.x 可以…

Flask 入门4:Flask 模板

1. 前言 Flask 拥有丰富的扩展方法&#xff0c;且都有统一的特点&#xff1a;简单和即学即用。当我们要实现某个功能之前&#xff0c;可以提前去搜一搜这个功能包是否已经存在&#xff0c;这样也能帮助我剩下很多时间。那么要去哪里找到这些扩展包呢&#xff0c;这里推荐两个方…

5G智能卷烟工厂数字孪生可视化平台,推进烟草行业数字化转型

5G智能卷烟工厂数字孪生可视化平台&#xff0c;推进烟草行业数字化转型。随着5G技术的不断发展&#xff0c;智能卷烟工厂数字孪生可视化平台成为了推进烟草行业数字化转型的重要手段。该平台将5G技术与数字孪生技术相结合&#xff0c;实现了对卷烟生产全过程的实时监控、数据分…

ROE是什么?如何用ROE来分析企业?

ROE是什么&#xff1f; ROE&#xff0c;即净资产收益率&#xff08;Return on Equity&#xff09;&#xff0c;又称作股东权益报酬率、权益利润率&#xff0c;是净利润与平均股东权益的百分比&#xff0c;也称为净值报酬率、权益报酬率、权益利润率、净资产利润率&#xff0c;…

网络选择流程分析(首选网络类型切换流程)

首先是界面,我在此平台的界面如下: 对应的入口源码位置在Settings的UniEnabledNetworkModePreferenceController中,当然其他平台可能在PreferredNetworkModePreferenceController中,流程上都是大同小异 然后点击切换按钮会调用到UniEnabledNetworkModePreferenceControlle…

用的到的linux-删除文件-Day3

前言&#xff1a; 上一节&#xff0c;我们讲到了怎么去移动文件&#xff0c;其中使用到两大类的脚本命令即cp和mv。各两种命令都可以完成移动&#xff0c;但是cp是复制粘贴的方式&#xff0c;可以选择原封不动的复制粘贴过来&#xff0c;即不修改文件及文件夹的创建时间等&…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(五)NodeJS入门——http模块

044_http模块_创建HTTP服务端 hello&#xff0c;大家好&#xff0c;那这个小节我们来使用 nodejs 创建一个 http 的服务&#xff0c;有了这个 http 服务之后&#xff0c;我们就可以处理浏览器所发送过来的请求&#xff0c;并且还可以给这个浏览器返回响应。 顺便说一下&#x…

【Linux】线程Pthread的概念 | NPTL线程库函数

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

华为、清华等开源超高清、精准文生图模型,0.5秒极速生成!

华为诺亚方舟实验室、清华大学信息科技学院、大连理工、香港大学和Hugging Face的研究人员&#xff0c;联合开源了超高清文生图模型——PIXART-δ。 研究人员将潜在一致性模型&#xff08;LCM&#xff09;和创新控制架构ControlNet-Transformer集成在PIXART-δ中&#xff0c;在…

【LeetCode: 73. 矩阵置零 + 矩阵】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

使用Python语言生成区块链地址

# 单次运行 import binascii import sha3 from ecdsa import SigningKey, SECP256k1priv SigningKey.generate(curveSECP256k1) # 生成私钥 pub priv.get_verifying_key() # 生成公钥keccak sha3.keccak_256() keccak.update(pub.to_string()) # keccak_256哈希运算 addr…

vue配置开发环境和生产环境

在与src文件夹同级的地方增加两个文件 .env.development .env.production配置development和production两个文件 在.env.development中写&#xff1a; NODE_ENV development VUE_APP_NUM dev //VUE_APP_自己取名字在.env.production中写&#xff1a; NODE_ENV production…

linux k8s 源码编译及单集群测试

目录 概述实践安装插件docker 在线安装containerd安装二进制安装yum安装修改containder配置文件 cnietcdrsyncgo设置golang代理 安装CFSSL下载kubernetes代码编译启动本地单节点集群问题k8s没有被正常启动该如何k8s正常启动日志测试 结束 概述 此文详细说明在 centos 7上编译 k…

QT上位机:串口调试助手

前言 上位机的简单编写可以帮我们测试并完善平台&#xff0c;QT作为一款跨平台的GUI开发框架&#xff0c;提供了非常丰富的常用串口api。本文先从最简单的串口调试助手开始&#xff0c;编写平台软件的串口控制界面 工程配置 QT 串口通信基于QT的QSerialPort类&#xff0c;先在…

【halcon】write_image 图片保存

前言 write_image 是一个可以用来保存图片的算子&#xff0c;可以将Image对象保存成各种格式的图片。还可以对图片进行压缩。 正文 参数&#xff1a; Image&#xff08;输入对象&#xff09;&#xff1a; 输入图像或输入图像的数组。支持的像素类型包括byte、direction、cy…

druid配置wall导致无法批量sql

1、现象 2、原配置 spring:autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:druid:stat-view-servlet:enabled: trueloginUsername: ***loginPassword: ***allow:web-stat-filter:enabled: truefilter:wall:conf…

MATLAB知识点:矩阵元素的引用

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.3.2 矩阵元素的引用 在讲解矩阵元素的引用之…

【Unity优化(一)】音频优化

整理资教程&#xff1a;https://learn.u3d.cn/tutorial/unity-optimization-metaverse 1.音频优化 音频一般不会成为性能瓶颈&#xff0c;是为了节省内存和优化包体大小。 1.0 文件格式和压缩格式 原始音频资源尽量采用WAV格式。 移动平台音频尽量采用Vorbis压缩格式&#x…