Java ElasticSearch REST 客户端

一、基础信息

1、pom.xml(根据业务选择适合版本)

		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>${elasticsearch.version}</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-client</artifactId>
			<version>${elasticsearch.version}</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-high-level-client</artifactId>
			<version>${elasticsearch.version}</version>
		</dependency>

2、nacos配置(根据业务选择适合模式)

elasticsearch:
  prefix: http
  uris: es-cn-**********************.aliyun.com:9200
  username: esadmin
  password: 123456

3、创建ElasticSearchConfig(项目启动自动注入)

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchConfig {
	//http
	@Value("${elasticsearch.prefix}")
	private String prefix;
	//es连接url(多个url用","隔开)
	@Value("${elasticsearch.uris}")
	private String esUrl;
	//账户(没有可不填)
	@Value("${elasticsearch.username}")
	private String username;
	//密码(没有可不填)
	@Value("${elasticsearch.password}")
	private String password;
	
	//方法
}

二、低级客户端创建

	@Bean
    public RestClient restClient() {
        //处理多连接模式
        String[] split = esUrl.split(",");
        HttpHost[] httpHost = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String[] item = split[i].split(":");
            httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
        }
        return RestClient.builder(httpHost).build();
    }

三、高级客户端创建

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        //处理多连接模式
        String[] split = esUrl.split(",");
        HttpHost[] httpHost = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String[] item = split[i].split(":");
            httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
        }
        return new RestHighLevelClient(RestClient.builder(httpHost));
    }

四、高级客户端创建(带用户名和密码)

    @Bean
    public RestHighLevelClient restHighLevelClient() {
    	//处理多连接模式
        String[] split = esUrl.split(",");
        HttpHost[] httpHost = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String[] item = split[i].split(":");
            httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
        }
        //需要用户名和密码的认证
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
        RestClientBuilder restClientBuilder = RestClient.builder(httpHost)
                .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
        return new RestHighLevelClient(restClientBuilder);
    }

五、最新客户端创建

    @Bean
    public ElasticsearchClient elasticsearchClient() {
        //处理多连接模式
        String[] split = esUrl.split(",");
        HttpHost[] httpHost = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String[] item = split[i].split(":");
            httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
        }
        RestClient restClient = RestClient.builder(httpHost).build();
        return new ElasticsearchClient(new RestClientTransport(restClient, new JacksonJsonpMapper()));
    }

六、最新客户端创建(带用户名和密码)

    @Bean
    public ElasticsearchClient elasticsearchClient() {
        String[] split = esUrl.split(StrPool.COMMA);
        HttpHost[] httpHost = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String[] item = split[i].split(StrPool.COLON);
            httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
        }
        //需要用户名和密码的认证
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
        RestClient restClient = RestClient.builder(httpHost)
                .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider)).build();
        return new ElasticsearchClient(new RestClientTransport(restClient, new JacksonJsonpMapper()));
    }

附一:增加部分参数

        RestClientBuilder restClientBuilder = RestClient.builder(httpHost)
                // 认证和线程数
                .setHttpClientConfigCallback(httpClientBuilder -> {
                    httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    int threadCount = 10;
                    httpClientBuilder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(threadCount).build());
                    return httpClientBuilder;
                })
                // 超时超时设置
                .setRequestConfigCallback(requestConfigCallback -> {
                    requestConfigCallback.setConnectTimeout(10);
                    requestConfigCallback.setSocketTimeout(10);
                    return requestConfigCallback;
                });

附二:最新客户端注入时抛出异常:jakarta/json/spi/JsonProvider

        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>7.17.9</version>
        </dependency>
        <dependency>
            <groupId>jakarta.json</groupId>
            <artifactId>jakarta.json-api</artifactId>
            <version>2.0.1</version>
        </dependency>
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值