SpringBoot工程整合ElasticSearch(通过Rest-High-Level-Client)并实现较复杂的查询

这篇博客介绍了如何在SpringBoot项目中使用Rest-High-Level-Client与ElasticSearch进行集成,以实现更复杂的查询操作。相较于上一篇博客中通过REST Client的简单增删改查,本文将详细阐述集成准备工作,包括版本选择和YML配置,以及客户端的构建。接着展示了Service层和Util类的代码实现,用于处理与ES的交互。

上一篇博客提到,REST Client的方式整合的项目实现复杂的查询比较麻烦,实现的方法是需要我们自己根据ES的语法写出符合语法的bean来,然后把这个bean发送http请求给服务端,这种方法也是我以前参与的一个项目的做法。但是ES本身是提供了java操作的api的,我们直接调用具体的类就能实现而不需要自己创建bean了。
上一篇博客只是实现了ES单节点根据id来实现简单的增删改查,上一篇博客的地址:SpringBoot整合ES(REST Client方式)并实现简单的增删改查
接下来的是ES多节点并实现复杂的通过条件查询并分页

集成准备工作

首先还是依赖

		<dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.5.1</version>
            <scope>compile</scope>
        </dependency>

建议选用ES7以上的版本,因为ES7版本相对于老版本有较大改动,比如不支持索引类型,所有的索引类型都默认为_doc类型,还有不支持TransportClient等等。7.5.1是我从docker里面搜索到的最新的官方版本。
PS:客户端和服务端的版本需要一样,不然接下来的查询会报语法错误(如果是自己写的bean则能实现向下兼容,这个不行)

YML文件

server:
  port: 8080

swagger:
  enable: true
  title: ElasticSearch-demo
  description:
  serviceUrl: http://localhost:8080/
  version: 1.0.0
  controllers: com.example.es.controller

elasticsearch:
  user:
  password:
  host: 192.168.145.128:9200,192.168.145.129:9200,192.168.145.130:9200

这里的swagger是用来进行测试用的,然后集群ip配置以","符号区分

ES客户端 的构建

代码如下

@Slf4j
@Configuration
public class ESRestClient {
   
   

    private static final int ADDRESS_LENGTH = 2;
    private static final String HTTP_SCHEME = "http";

    @Value("${elasticsearch.host}")
    String ipAddress;
    @Value("${elasticsearch.user}")
    private String userName;
    @Value("${elasticsearch.password}")
    private String password;

    @Bean
    public RestClientBuilder restClientBuilder() {
   
   
        String[] split = ipAddress.split(",");
        HttpHost[] hosts = Arrays.stream(split)
                .map(this::makeHttpHost)
                .filter(Objects::nonNull)
                .toArray(HttpHost[]::new);
        return RestClient.builder(hosts);
    }

    @Bean(name = "highLevelClient")
    public RestHighLevelClient highLevelClient(@Autowired RestClientBuilder restClientBuilder){
   
   
        //配置身份验证
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
        restClientBuilder.setHttpClientConfigCallback(
                httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
        //设置连接超时和套接字超时
        restClientBuilder.setRequestConfigCallback(
                requestConfigBuilder -> requestConfigBuilder.setSocketTimeout(10000).setConnectTimeout(60000));
        //配置HTTP异步请求ES的线程数
        restClientBuilder.setHttpClientConfigCallback(
                httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultIOReactorConfig(
                        IOReactorConfig.custom().setIoThreadCount(1).build()));
        //设置监听器,每次节点失败都可以监听到,可以作额外处理
        restClientBuilder.setFailureListener(new RestClient.FailureListener() {
   
   
            @Overr
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值