Elasticsearch Java API
Java 操作 Es 的方案有如下几种,根据Elasticsearch版本的不同要选择对应的客户端。
1、直接使用HTTP请求
Elasticsearch提供Rest API,所以可以直接直接使用 HTTP 请求,去操作 Es。HTTP 请求工具,可以使用 Java 自带的 HttpUrlConnection,也可以使用一些 HTTP 请求库,例如 HttpClient、OKHttp、Spring 中的 RestTemplate 都可以。这种方式有一个弊端,就是要自己组装请求参数,自己去解析响应的 JSON。
2、Low Level REST Client
Elasticsearch Client低级别客户端。它允许通过HTTP请求与Elasticsearch集群进行通信。API本身不负责数据的编码解码,由用户去编码解码。它与所有的Elasticsearch版本兼容。这种方式好处就是兼容所有的 Es 版本。但是就是数据处理比较麻烦。
3、Java High Level REST Client
Elasticsearch Client官方高级客户端。基于低级客户端,主要目标是为了暴露各API特定的方法。Java High Level REST Client依赖于Elasticsearch核心项目,将Request对象作为参数,返回一个Response对象。所有API都可以同步或异步调用。
- 同步调用方法立即返回一个Response对象。
- 而异步调用方法(方法名以async结尾)依赖于监听,当有请求返回或是错误返回时,该监听会通知到对应的方法继续执行。
注意:这种方式,所使用的依赖库的版本要和 Es 对应。
4、TransportClient
Transport Client随着Elasticsearch的第一个版本诞生,是一个特别的客户端。特别之处在于,它使用TCP协议与Elasticsearch通信,这也造成了当客户端与不同版本的Elasticsearch通信时,会存在兼容性问题。
Elasticsearch 7.0中已经弃用Transport Client,在8.0中完全移除它。
5、Java API Client
Elasticsearch在7.17版本之前使用的Java客户端是Java REST Client,从7.17版本开始Elastic官方将Java REST Client标记为弃用(deprecated),并推荐使用新版Java客户端Java API Client。
Java API Client是一个用于与Elasticsearch服务器进行通信的Java客户端库,帮助开发人员与Elasticsearch服务器进行通信,开发人员可以更加轻松地开发和维护代码。
Java API Client主要包含三个部分:
- ElasticsearchClient类:Java API Client的核心类,提供与Elasticsearch服务器进行通信的方法。该类封装了底层的Transport通信,并提供了同步和异步调用、流式和函数式调用等方法。
- JSON object mapper:处理数据序列化和反序列化的库。JSON object mapper与Jackson无缝集成,可以将Java对象映射到JSON格式。
- 通用能力:提供了连接池、重试、JSON序列化等通用能力,提高了代码的可读性和可维护性,便于开发人员进行开发。