欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 谷粒商城实战笔记-125-全文检索-ElasticSearch-整合-SpringBoot整合high-level-client

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

2024/10/24 9:18:58 来源:https://blog.csdn.net/epitomizelu/article/details/140902004  浏览:    关键词:谷粒商城实战笔记-125-全文检索-ElasticSearch-整合-SpringBoot整合high-level-client

文章目录

  • 一,技术选型
    • 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>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com