目录
1 根据项目架构选择整合方案
以springboot为例,可选方式有三种:
- JAVA API
- 整合TransportClient客户端
- 基于TCP通信
- 已过时
- RestClient
- 基于HTTP通信
- Java Low Level REST Client
- 兼容所有版本ES
- Java Hight Level REST Client
- 基于Low开发,只暴露部分API
- Spring-data-es
- spring-data-elasticsearch
2 项目实践
考虑到时效性,只作后两种方案尝试
2.1 SpringData整合
- 按ES版本配置相关依赖(注意es与springdata的版本搭配)
- 配置xml,配置集群连接,创建bean对象elasticsearchTemplate
- 使用(CriteriaQuery与SearchQuery)
- SearchQuery依赖于elasticsearch的原生QueryBuilders;
- CriteriaQuery而是特定于Spring Data
参考链接:Spring data ES攻略
2.2 RestClient整合
2.2.1 引入依赖
- Java Low Level REST Client
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.4.0</version>
</dependency>
</dependencies>
- Java Hight Level REST Client
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.0.0</version>
</dependency>
</dependencies>
2.2.2客户端配置
2.2.2.1 Java Low Level REST Client
@Configuration
public class RestConfig {
private String userName;
private String password;
private String hostName;
private Integer port;
@Bean(destroyMethod="close")
public RestClient getClient(){
String[] hosts = this.hostName.split(",");
HttpHost[] httpHosts = new HttpHost[hosts.length];
for(int i=0;i<hosts.length;i++){
httpHosts[i] = new HttpHost(hiist[i],port,"http");
}
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthSope.ANY,
new UsernamePasswordCredentials(userName,Password));
RestClientBuilder restClientBuilder = RestClient.build(httpHosts);
//配置身份验证
restClientBuilder.setHttpClientConfigCallback(
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
return restClientBuilder.build();
}
}
2.2.2.2 Java Hight Level REST Client
@Configuration
public class RestConfig {
private String userName;
private String password;
private String hostName;
private Integer port;
@Bean()
public RestHighLevelClient getRestClient(){
String[] hosts = this.hostName.split(",");
HttpHost[] httpHosts = new HttpHost[hosts.length];
for(int i=0;i<hosts.length;i++){
httpHosts[i] =