新年快乐! 致2025年还在努力学习的你!
你已经很努力了,今晚就让自己好好休息一晚吧!
在后端中选用哪种elasticsearch客户端?
elasticsearch可以通过9200或者9300端口进行操作
1)9300:TCP
-
spring-data-elasticsearch:transport-api.jar
-
springboot版本不同,transport-api.jar不同,不能适配es版本
-
7.x已经不建议使用,8以后就要废弃
-
2)9200:HTTP
-
JestClient:非官方,更新慢
-
RestTemplate:模拟发HTTP请求,ES很多操作需要自己封装,麻烦
-
HttpClient:同上
-
high-level-client:官方(推荐)
综上,使用官方推荐的high-level-client。
以下为在idea中配置high-level-client的详细操作步骤:
①:在gulimall模块下创建子模块gulimall-search
在gulimall
父模块的pom下添加gulimall-search
作为子模块
②导入相关依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.13.0</version>
</dependency>
刷新依赖,可以发现其中的elasticsearch依赖和elasticsearch-rest-client依赖的版本是7.15.2
elasticsearch和elasticsearch-rest-client这两个依赖是elasticsearch-rest-high-level-client的传递依赖,就是说elasticsearch-rest-high-level-client依赖着elasticsearch和elasticsearch-rest-client这两个依赖。
我们点开elasticsearch-rest-high-level-client-7.13.0.pom
,可以看到elasticsearch
和elasticsearch-rest-client
这两个依赖的版本是7.13.0
那么为什么项目实际引入的版本实际是7.15.2
?
原因在于该项目pom文件下的的内容
查看spring-boot-dependencies-2.6.13.pom
下的内容
可以看到spring-boot-dependencies-2.6.13.pom
中也指定了elasticsearch的版本,并且版本号为7.15.2
,是不是和前面实际引入的版本号对应上了~
至于为什么dependencyManager
会影响到elasticsearch-rest-high-level-client
的传递依赖版本,具体可以参考博客:maven的dependencyManagement中定义的依赖声明优先级高于传递依赖
总之结论就是:maven的dependencyManagement中定义的依赖声明优先级高于传递依赖。
所以,我们把elasticsearch-rest-high-level-client
里面的两个依赖,elasticsearch和
elasticsearch-rest-client`排除,然后显示导入这两个依赖,如下
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.13.0</version><exclusions><exclusion><artifactId>elasticsearch</artifactId><groupId>org.elasticsearch</groupId></exclusion><exclusion><artifactId>elasticsearch-rest-client</artifactId><groupId>org.elasticsearch.client</groupId></exclusion></exclusions></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.13.0</version></dependency><dependency><artifactId>elasticsearch-rest-client</artifactId><groupId>org.elasticsearch.client</groupId><version>7.13.0</version></dependency>
③编写配置类
配置类编写如下:
@Configuration
public class GulimallElasticSearchConfig {@Beanpublic RestHighLevelClient client() {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.206.134", 9200, "http")));return client;}
}
④单元测试
@SpringBootTest
class GulimallSearchApplicationTests {@Autowiredprivate RestHighLevelClient client;@Testvoid contextLoads() {System.out.println(client);}
}
输出结果如下:
说明配置成功!
ps:这里没有引入common
模块,因为我在引入入common模块后出现了could not find class [org.springframework.cloud.client.loadbalancer.reactive.onnoribbondefaultcondition]
报错,所以我暂时忽略common依赖的引入。如果需要引入common依赖,在运行测试类的时候会出现无法找到数据源
的错误,需要在如下启动类上添加exclude = DataSourceAutoConfiguration.class
.由于配置了mybatis等与数据库相关的类,spring boot在启动时会自动加载数据源,具体可以参考我写的博客:报错:Failed to determine a suitable driver class 让spring boot项目启动时不连接数据库