谷粒商城实战笔记-125-全文检索-ElasticSearch-整合-SpringBoot整合high-level-client

news/2024/10/20 17:30:53/

文章目录

  • 一,技术选型
    • 1. 通过 TCP 连接(9300 端口)
    • 2. 通过 HTTP 连接(9200 端口)
    • 3.最终选择
  • 二,SpringBoot整合Elasticsearch-Rest-High-Level-Client
    • 1,新增模块gulimall-search
    • 1,添加依赖
    • 2,创建客户端
    • 3,单元测试
  • 整合问题记录

一,技术选型

在Java项目中整合Elasticsearch (ES) 的过程中,通常会面临多种客户端的选择。

1. 通过 TCP 连接(9300 端口)

  • Transport API (spring-data-elasticsearch:transport-api.jar):
    • 与 Spring Boot 版本有关,不同版本的 Spring Boot 需要不同的 Transport API 版本来适配不同的 Elasticsearch 版本。
    • 在 Elasticsearch 7.x 版本开始,官方已经不建议使用 Transport API,并且在 Elasticsearch 8.x 及以上版本中已被废弃。

2. 通过 HTTP 连接(9200 端口)

  • JestClient:
    • 非官方客户端,更新速度较慢,可能会出现与最新版本的 Elasticsearch 兼容性问题。
  • RestTemplate:
    • 使用标准的 HTTP 客户端来发送请求,适用于对 HTTP 协议有深入了解的开发者。

    • 需要手动封装 ES 的各种操作,增加了开发的工作量和复杂度。

    • RestTemplate 需要手动构建 JSON 格式的请求体。

      
      public class ElasticsearchExample {public static void main(String[] args) {RestTemplate restTemplate = new RestTemplate();String indexName = "example_index";String query = "{\"query\": {\"match_all\": {}}}";HttpHeaders headers = new HttpHeaders();headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON);HttpEntity<String> entity = new HttpEntity<>(query, headers);ResponseEntity<String> response = restTemplate.exchange("http://localhost:9200/" + indexName + "/_search",HttpMethod.POST,entity,String.class);System.out.println(response.getBody());}
      }
      

3.最终选择

基于上述分析,推荐使用 Elasticsearch-Rest-High-Level-Client 作为 Java 应用程序与 Elasticsearch 交互的客户端。这是因为它不仅是由 Elasticsearch 官方维护和支持的,而且提供了良好的 API 封装,使得开发者能够更加专注于业务逻辑而不是底层细节。

二,SpringBoot整合Elasticsearch-Rest-High-Level-Client

1,新增模块gulimall-search

在这里插入图片描述

对于这个模块,做一下基本配置。

  • 配置注册中心地址
  • 配置启动类服务发现注解

1,添加依赖

在search模块的pom文件中添加相应的依赖。

配置如下:

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

2,创建客户端

创建一个 RestHighLevelClient 实例,指定连接信息(如主机名、端口等),通过配置类将其注入到Spring容器中。

在这里插入图片描述


public class GulimallElasticSearchConfig {public RestHighLevelClient esRestClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.56.10", 9200, "http")));return  client;}}

3,单元测试

通过如下单元测试,测试客户端实例能否正常注入到容器,如果能,说明整合成功。


(SpringRunner.class)
class GulimallSearchApplicationTests {private RestHighLevelClient restHighLevelClient;public void contextLoads() {}public void restHighLevelClient() {System.out.println(restHighLevelClient);}}

如下,单元测试通过,说明整合Elasticsearch客户成功。
在这里插入图片描述

整合问题记录

运行单元测试报错,如下。

19:51:11.026 ERROR [           main]                SpringApplication - Application startup failed
java.lang.ClassNotFoundException: org.elasticsearch.common.CheckedConsumerat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at java.lang.ClassLoader.loadClass(ClassLoader.java:357) [1 skipped]at com.glassdoor.applicantManagement.aws.AwsAmsElasticsearchClientConfig.getElastics

原因是缺少Elasticsearch的依赖包,把下面两个全部加上。

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

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

相关文章

springboot在线图库网站-计算机毕业设计源码38597

基于SpringbootVue的在线图库网站的设计与实现 摘 要 本文基于Spring Boot作为后端框架&#xff0c;Vue作为前端框架&#xff0c;设计并实现了一个功能丰富的在线图库网站。该网站提供了注册、登录、普通用户功能和管理员功能等一系列功能&#xff0c;为用户提供了方便的浏览摄…

无人机的控制系统的组成!

无人机的控制系统主要由以下几个部分组成&#xff1a; 飞行控制系统&#xff08;Flight Control System, FCS&#xff09;&#xff1a; 功能&#xff1a;负责控制无人机的姿态、高度、速度和航向等飞行参数。 组成&#xff1a;通常由传感器、机载计算机和执行机构组成。传感…

Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

Python 爬虫入门&#xff08;九&#xff09;&#xff1a;Scrapy安装及使用「详细介绍」 前言1. Scrapy 简介2. Scrapy 的安装2.1 环境准备2.2 安装 Scrapy 3. 创建 Scrapy 项目3.1 创建项目3.2 项目结构简介 4. 编写爬虫4.1 创建爬虫4.2 解析数据4.3 运行爬虫 5. 存储数据5.1 存…

【书生大模型实战营第三期 | 入门岛第3关-Git 基础知识】

学习Git版本控制系统心得体会 摘要 通过参与InternLM Git教程&#xff0c;我对Git这一开源的分布式版本控制系统有了更深入的理解和实践。Git以其高效的团队协作能力、详尽的代码历史记录以及灵活的分支管理功能&#xff0c;成为软件开发中不可或缺的工具。 文章大纲 Git简介…

双指针算法(一)

一、移动零 题目链接 题目详情: 1.算法分析 这道题采用的算法原理是双指针算法&#xff1a;利用数组下标当做指针。 利用双指针算法的目的就是进行数组划分、数组分块。 我们先定义一个下标cur和一个下标dest。 两个指针的作用&#xff1a; cur&#xff1a;从左至右的进…

Midjourney V6.1更新 | 细节狂魔,绝美人像(附提示词)

前言 Midjourney V6.1版本&#xff0c;堪称细节狂魔&#xff0c;在人像上简直登峰造极&#xff01; 自V6.1版本更新以来我一次次被Midjourney生成的人像震惊到&#xff01;用Midjourney官网分享的提示词微调&#xff0c;生成图像&#xff0c;每一张都绝美&#xff0c;晚上玩到…

LeetCode题练习与总结:查找重复的电子邮箱--182

一、题目描述 SQL Schema > Pandas Schema 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该表的主键&#xff08;具有唯一值的列&#xff0…

【区块链+医疗健康】基于区块链的中药饮片流转质量服务与监管平台 | FISCO BCOS应用案例

有数据显示&#xff0c;医疗机构委托第三方代煎代配业务已经占到医院代煎业务总量的 92.3%。委托代煎业务虽然方便了 医疗机构和患者&#xff0c;但业务过程牵涉处方外流&#xff0c;业务范围从“医院 - 患者”扩展到“医院 - 中药代煎中心 - 物流 - 患者”&#xff0c; 涉及到…