前言
本文主要介绍java客户端SpringBoot整合Elasticsearch,参照Elasticsearch的官方文档,将一些基本的常见的API封装,供自己后面项目中es能够开箱即用。
java客户端采用的RestHighLevelClient来实现es基础查询;
官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html
中文文档:https://www.kaifaxueyuan.com/server/elasticsearch7/elasticsearch-index-api.html
正文
maven依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<properties>
<!--<elasticsearch.version>6.3.2</elasticsearch.version>-->
<elasticsearch.version>7.4.2</elasticsearch.version>
<log4j2.version>2.12.1</log4j2.version>
</properties>
<dependencies>
<!--Spring框架基本的核心工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
配置类
此处可以用properties配置文件管理,我为了方便,直接在配置类写死了
package com.ruofei.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author: srf
* @Date: 2020/12/9 20:27
* @description:
*/
@Configuration
public class ESConfig implements DisposableBean {
private RestHighLevelClient restHighLevelClient;
@Bean
public RestHighLevelClient restHighLevelClient(){
RestClientBuilder restClientBuilder = RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http"));
//配置超时时间(非必须)
restClientBuilder.setRequestConfigCallback(requestConfigBuilder->{
//连接超时时间
requestConfigBuilder.setConnectTimeout(RestClientBuilder.DEFAULT_CONNECT_TIMEOUT_MILLIS);
//socket超时时间
requestConfigBuilder.setSocketTimeout(RestClientBuilder.DEFAULT_SOCKET_TIMEOUT_MILLIS);
//请求超时时间
requestConfigBuilder.setConnectionRequestTimeout(RestClientBuilder.DEFAULT_CONNECT_TIMEOUT_MILLIS);
return requestConfigBuilder;
});
//异步 httpclient 连接参数配置
restClientBuilder.setHttpClientConfigCallback(httpClientBuilder->{
//最大连接数
httpClientBuilder.setMaxConnTotal(RestClientBuilder.DEFAULT_MAX_CONN_TOTAL);
//单主机并发最大数
httpClientBuilder.setMaxConnPerRoute(RestClientBuilder.DEFAULT_MAX_CONN_PER_ROUTE);
return httpClientBuilder;
});
// 鉴权设置,如果需要账号密码用下面逻辑
/* if (StringUtils.isNotBlank(elasticsearchProperties.getUsername()) && StringUtils
.isNotBlank(elasticsearchProperties.getPassword()))
{
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider
.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticsearchProperties
.getUsername(), elasticsearchProperties.getPassword()));
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}*/
restHighLevelClient = new RestHighLevelClient(restClientBuilder);
return restHighLevelClient;
}
@Override
public void destroy() throws Exception {
restHighLevelClient.close();
}
}
API相关操作简单封装
主要对索引,文档,查询相关的api进行了封装。具体实现就一一写了,代码会上传github:https://github.com/RuofeiSun/springboot-es.git
这次主要是对常用的基本api封装了下,下一步打算做一个实际应用的demo。包括数据同步,查询等