RestHighLevelClient操作7.10.0(一)ElasticSearch 连接配置

ES 的更新速度非常快,官方推出的 Java 客户端 elasticsearch-rest-high-level-client,它的代码写法跟 DSL 语句很相似,这里我们就采用这种方式进行演练。

项目源码地址



一、查询官方文档

Elsticsearch官方文档地址
在这里插入图片描述

使用Restful风格文档,注意选择对应的版本
在这里插入图片描述
使用高级客户端
在这里插入图片描述


二、Maven 引入相关依赖

  • SpringBoot 版本:2.4.1
  • ElasticSearch 版本:7.10.0
  • lombok: lombok 工具依赖。
  • fastjson: 用于将 JSON 转换对象的依赖。
  • spring-boot-starter-web: SpringBoot 的 Web 依赖。
  • elasticsearch:ElasticSearch: 依赖,需要和 ES 版本保持一致。
  • spring-boot-starter-data-elasticsearch: 用于操作 ES 的 Java 客户端。

SpringBoot默认整合的是elasticsearch的6.8.6版本,因此需要修改依赖的版本信息为当前elasticsearch对应的版本 ,即spring-boot-starter-data-elasticsearch的依赖中已经引入了elasticsearch-rest-high-level-client依赖,因此只需要修改相关的版本即可

  • commons-lang3:String Utils
  • swagger:为后续在线操作文档做准备

pom文件相关配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.1</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com._520xuzai.es7</groupId>
	<artifactId>elasticsearch7</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>elasticsearch7</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<elasticsearch.version>7.10.0</elasticsearch.version>
		<swagger.version>1.9.1.RELEASE</swagger.version>
		<commons-lang3.version>3.11</commons-lang3.version>
		<fastjson.version>1.1.40</fastjson.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- SpringBoot与elasticsearch整合的相关依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>

		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<!-- swagger -->
		<dependency>
			<groupId>com.spring4all</groupId>
			<artifactId>swagger-spring-boot-starter</artifactId>
			<version>${swagger.version}</version>
		</dependency>

		<!--String Utils-->
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>${commons-lang3.version}</version>
		</dependency>

		<!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>

    </dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

三、ElasticSearch 连接配置

1、application.yml 配置文件

相关配置如下:

server:
  port: 8080

#spring
spring:
  application:
    name: springboot-elasticsearch

elasticsearch:
  address: 192.168.225.145:9200,192.168.225.145:9201,192.168.225.145:9202
  username: elastic
  password: 123456
  schema: http
  connectTimeout: 5000
  socketTimeout: 5000
  connectionRequestTimeout: 5000
  maxConnectNum: 100
  maxConnectPerRoute: 100

2、ES 连接参数类

ElasticsearchRuntimeEnvironment.java读取 application 中的配置信息

package com._520xuzai.es7.conf.esbase;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: 煦仔
 * \* Date: 2020-12-22
 * \* Time: 11:01
 * \* To change this template use File | Settings | File Templates.
 * \* Description: ElasticSearch 配置
 * \
 */
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "elasticsearch")
@ConditionalOnProperty("elasticsearch.address")
public class ElasticsearchRuntimeEnvironment {

    /**
     * es连接地址,如果有多个用,隔开
     */
    private String address;

    /**
     * es用户名
     */
    private String username;

    /**
     * es密码
     */
    private String password;

    /**
     * 协议
     */
    private String scheme;

    /**
     * 连接超时时间
     */
    private int connectTimeout;

    /**
     * Socket 连接超时时间
     */
    private int socketTimeout;

    /**
     * 获取连接的超时时间
     */
    private int connectionRequestTimeout;

    /**
     * 最大连接数
     */
    private int maxConnectNum;

    /**
     * 最大路由连接数
     */
    private int maxConnectPerRoute;

}


3、初始化RestHighLevelClient对象

package com._520xuzai.es7.conf;

import com._520xuzai.es7.conf.esbase.ElasticsearchRuntimeEnvironment;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: 煦仔
 * \* Date: 2020-12-22
 * \* Time: 9:40
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@Configuration
public class ElasticsearchConfig {


    @Autowired(required = false)
    private ElasticsearchRuntimeEnvironment esRuntimeEnvironment;


    @Bean
    //当前es相关的配置存在则实例化RestHighLevelClient,如果不存在则不实例化RestHighLevelClient
    @ConditionalOnBean(value = ElasticsearchRuntimeEnvironment.class)
    public RestHighLevelClient restHighLevelClient(){

        //es地址,以逗号分隔
        String nodes = esRuntimeEnvironment.getAddress();
        nodes = nodes.contains("http://") ? nodes.replace("http://","") : nodes;
        //es密码
        String password = esRuntimeEnvironment.getPassword();
        String scheme = esRuntimeEnvironment.getScheme();
        List<HttpHost> httpHostList = new ArrayList();
        //拆分es地址
        for(String address : nodes.split(",")){
            int index = address.lastIndexOf(":");
            httpHostList.add(new HttpHost(address.substring(0, index),Integer.parseInt(address.substring(index + 1)),scheme));
        }
        //转换成 HttpHost 数组
        HttpHost[] httpHosts = httpHostList.toArray(new HttpHost[httpHostList.size()]);

        //构建连接对象
        RestClientBuilder builder = RestClient.builder(httpHosts);

        //使用账号密码连接
        if ( StringUtils.isNotEmpty(password)){
            String username = esRuntimeEnvironment.getUsername();
            CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            credentialsProvider .setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(username,password));
            builder.setHttpClientConfigCallback(f->f.setDefaultCredentialsProvider(credentialsProvider));
        }

        // 异步连接延时配置
        builder.setRequestConfigCallback(requestConfigBuilder -> {
            requestConfigBuilder.setConnectTimeout(esRuntimeEnvironment.getConnectTimeout());
            requestConfigBuilder.setSocketTimeout(esRuntimeEnvironment.getSocketTimeout());
            requestConfigBuilder.setConnectionRequestTimeout(esRuntimeEnvironment.getConnectionRequestTimeout());
            return requestConfigBuilder;
        });

        // 异步连接数配置
        builder.setHttpClientConfigCallback(httpClientBuilder -> {
            httpClientBuilder.setMaxConnTotal(esRuntimeEnvironment.getMaxConnectNum());
            httpClientBuilder.setMaxConnPerRoute(esRuntimeEnvironment.getMaxConnectPerRoute());
            return httpClientBuilder;
        });

        return new RestHighLevelClient(builder);
    }


}


至此ElasticSearch 连接配置已经基本完成。


四、swagger文档

为便于后续操作,我们同时进行了swagger的相关配置

package com._520xuzai.es7.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: 煦仔
 * \* Date: 2020-12-22
 * \* Time: 10:52
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@EnableSwagger2
@Configuration
public class Swagger2Config {

    //访问地址:http://ip:port/swagger-ui.html
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com._520xuzai.es7"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("搜索Api接口文档")
                .version("1.0")
                .build();
    }

}

在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值