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

server/2024/10/20 15:47:15/

文章目录

  • 一,技术选型
    • 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/server/95847.html

相关文章

Studying-代码随想录训练营day57| prim算法精讲、kruskal算法精讲

第57天&#xff0c;图论07&#xff0c;两个最小生成树算法的讲解&#x1f4aa;(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 题目&#xff1a;53. 寻宝&#xff08;第七期模拟笔试&#xff09; (kamacoder.com) prim算法精讲 拓展 总结&#xff1a; …

贝叶斯学习方法:几种方法介绍

目录 1 拉普拉斯还原-轻松贝叶斯深度学习2 具有归一化流的变分推理3 基于条件归一化流的多元概率时间序列预测 1 拉普拉斯还原-轻松贝叶斯深度学习 深度学习的贝叶斯公式已被证明具有令人信服的理论性质&#xff0c;并提供实用的功能优势&#xff0c;例如改进预测不确定性量化…

搜索引擎设计:如何避免大海捞针般的信息搜索

搜索引擎设计&#xff1a;如何避免大海捞针般的信息搜索 随着互联网的发展&#xff0c;信息的数量呈爆炸式增长。如何在海量信息中快速、准确地找到所需信息&#xff0c;成为了搜索引擎设计中的核心问题。本文将详细探讨搜索引擎的设计原理和技术&#xff0c;从信息获取、索引…

机器学习第五十周周报 CGNN

文章目录 week50 CGNN摘要Abstract0. 概述1. 题目2. Abstract3. 网络结构3.1 状态更新网络3.2 method 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程 5. 结论6.相关代码CompositeLGNNCompositeGNNcomposite-graph-class小结参考文献 week50 CGNN 摘要 本周阅读了题为Co…

MYSQL数据管理 - 增删改语句

文章目录 数据管理&#xff08;CRUD&#xff09;1 插入数据 INSERT2 删除数据 DELETEQ- drop、delete 与 truncate 区别&#xff1f; 3 修改数据 UPDATE参考 数据管理&#xff08;CRUD&#xff09; CRUD: CREATE READ UPDATE DELETE 对于增加数据、删除和修改数据&#xff0c…

QObject::connect: Cannot queue arguments of type ‘QList<QString>‘

QObject::connect: Cannot queue arguments of type ‘QList’ QObject::connect: Cannot queue arguments of type QList<QString> (Make sure QList<QString> is registered using qRegisterMetaType().)使用信号和槽时&#xff0c;QList无法当做参数被传递&…

vuex知识

Vuex之Mutation mutation用于管理同步事件&#xff0c;如果有异步操作&#xff0c;请用action。 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。 在vue中&#xff0c;我们要修改data中的值&#xff0c;一般会这么做。 this.count 2如果我们要修改vuex的store中的…

[Day 39] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的安全性分析 區塊鏈技術已經成為現代數字經濟的一個重要組成部分&#xff0c;提供了去中心化、透明和不可篡改的數據存儲與交易系統。然而&#xff0c;隨著區塊鏈技術的廣泛應用&#xff0c;其安全性問題也日益受到關注。本篇文章將詳細探討區塊鏈技術的安全性&#xf…