maven依赖,使用了RestHighLevelClient6.4.0版本
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.4.0</version>
</dependency>
首先RestHighLevelClient配置,采用注入方式,启动就注册客户端bean
@Configuration
public class ESHighLevelRestClient {
public static final int CONNECT_TIMEOUT = 5000;
public static final int SOCKET_TIMEOUT = 60000;
public static final int MAX_RETRY_TIMEOUT = 60000;
public static final int WORK_THREADS = Runtime.getRuntime().availableProcessors();
private final String authEnable = "enable";
// 配置类,里面配置了es的地址,用户,密码
@Autowired
private ElasticsearchConfig elasticsearchConfig;
@Bean
public RestHighLevelClient restHighLevelClient() throws UnsupportedEncodingException {
ArrayList<HttpHost> httpHosts = Lists.newArrayList();
Map<String, String> hostsMap = Splitter.on(',').trimResults().omitEmptyStrings()
.withKeyValueSeparator(":")
.split(elasticsearchConfig.getHosts());
hostsMap.entrySet().stream().forEach(x -> {
httpHosts.add(new HttpHost(x.getKey(), Integer.valueOf(x.getValue()), "http"));
});
RestClientBuilder restClientBuilder = RestClient.builder(httpHosts.toArray(new HttpHost[httpHosts.size()]));
// set es connection timeout
restClientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder
.setConnectTimeout(CONNECT_TIMEOUT)
.setSocketTimeout(SOCKET_TIMEOUT);
}
}).setMaxRetryTimeoutMillis(MAX_RETRY_TIMEOUT);
// set es client works numbers
restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultIOReactorConfig(
IOReactorConfig.custom().setIoThreadCount(WORK_THREADS).build());
}
});
if (authEnable.equalsIgnoreCase(elasticsearchConfig.getAuth())) {
Header[] defaultHeaders = new Header[]{new BasicHeader("Authorization", getToken(elasticsearchConfig.getUsername(), elasticsearchConfig.getPassword()))};
restClientBuilder.setDefaultHeaders(defaultHeaders);
}
return new RestHighLevelClient(restClientBuilder);
}
private String getToken(String username, String password) throws UnsupportedEncodingException {
StringBuilder tokenBuilder = new StringBuilder();
tokenBuilder.append(username);
tokenBuilder.append(":");
tokenBuilder.append(password);
String token = new String(Base64.getEncoder().encode(tokenBuilder.toString().getBytes()), StandardCharsets.UTF_8);
return "Basic " + token;
}
}
封装abstract类,想要操作ES的实体需要继承这个类,重写packageElasticSearchBody()方法,封装查询条件
@Getter
@Setter
public abstract class BaseElasticSearchEntity {
/**
* ES的INDEX
*/
private String esIndex;
/**
* ES的TYPE
*/
private String esType;
/**
* ES唯一值ID
*/
private String esId;
protected BaseElasticSearchEntity() {
}
protected BaseElasticSearchEntity(String esIndex, String esType) {
this.esIndex = esIndex;
this.esType = esType;
}
protected BaseElasticSearchEntity(String esIndex, String esType, String esId) {
this.esIndex = esIndex;
this.esType = esType;
this.esId = esId;
}
/**
* 供子类封装查询条件
*
* @param boolQueryBuilder bool条件
*/
public abstract void packag