Java 操作 ElasticSearch
配置环境
通过官方文档可以得知,现在存在至少三种Java客户端。
- Transport Client
- Java High Level REST Client
- Java Low Level Rest Client
造成这种混乱的原因是:
1、长久以来,ES 并没有官方的 Java 客户端,并且 Java 自身是可以简单支持 ES 的 API 的,于是就先做成了 TransportClient。但是 TransportClient 的缺点是显而易见的,它没有使用 RESTful 风格的接口,而是二进制的方式传输数据。
2、之后 ES 官方推出了 Java Low Level REST Client,它支持 RESTful,用起来也不错。但是缺点也很明显,因为TransportClient 的使用者把代码迁移到 Low Level REST Client 的工作量比较大。官方文档专门为迁移代码出了一堆文档来提供参考。
3、现在 ES 官方推出 Java High Level REST Client,它是基于 Java Low Level REST Client 的封装,并且 API 接收参数和返回值和 TransportClient 是一样的,使得代码迁移变得容易并且支持了 RESTful 的风格,兼容了这两种客户端的优点。当然缺点是存在的,就是版本的问题。ES 的小版本更新非常频繁,在最理想的情况下,客户端的版本要和 ES 的版本一致(至少主版本号一致),次版本号不一致的话,基本操作也许可以,但是新 API 就不支持了。
强烈建议 ES5 及其 以后的版本使用Java High Level REST Client。其主要导入如下两个依赖,注意依赖要和 ES 版本一致
<!--es-->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.11</version>
</dependency>
<!--es的高级api-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.8.11</version>
</dependency>
创建一个客户端用来连接服务
public class ESClient {
public static RestHighLevelClient getClient(){
// 指定es服务器的ip,端口
HttpHost httpHost = new HttpHost("localhost",9200);
// 创建 RestClientBuilder
RestClientBuilder builder = RestClient.builder(httpHost);
return new RestHighLevelClient(builder);
}
}