本章节介绍Elasticsearch的Java Client的原理、版本兼容性以及使用示例,帮助您快速地使用Java客户端与Elasticsearch集群进行交互,完成检索、分析等相关业务。

Transport Client迁移至REST Client

Transport Client随着Elasticsearch的第一个版本诞生,是一个特别的客户端。特别之处在于,它使用TCP协议与Elasticsearch通信,这也造成了当客户端与不同版本的Elasticsearch通信时,会存在兼容性问题。详情请参见Motivations around a new Java client

Elasticsearch官网于2016年发布Low Level REST客户端,该客户端基于Apache HTTP客户端,允许通过HTTP协议与任何版本的Elasticsearch集群通信。在Low Level REST客户端的基础上,Elasticsearch发布了High Level REST Client。

Elasticsearch 7.0中已经弃用Transport Client,在8.0中完全移除它。因此在实际开发中建议您使用Java REST Client。REST Client通过HTTP请求,帮助您处理请求和返回的序列化问题,为您的业务开发带来便捷。
注意
  • 如果您需要使用Transport Client通过9300端口访问阿里云Elasticsearch实例,请购买5.5或5.6版本的实例(6.x及以上版本不支持)。
  • 使用Transport Client 5.5或5.6版本与Elasticsearch建立连接时会提示NoNodeAvailableException的错误。推荐使用Transport Client 5.3.3或Java Low Level REST Client来访问Elasticsearch集群,以保障版本的兼容性。如果使用Transport Client,需要在代码中将client.transport.sniff设置为false,详情请参见Transport Client(5.x)

Java REST客户端

Java REST客户端有两种类型:
  • Java Low Level REST Client:Elasticsearch Client低级别客户端。它允许通过HTTP请求与Elasticsearch集群进行通信。API本身不负责数据的编码解码,由用户去编码解码。它与所有的Elasticsearch版本兼容。
  • Java High Level REST Client:Elasticsearch Client官方高级客户端。基于低级客户端,主要目标是为了暴露各API特定的方法。Java High Level REST Client依赖于Elasticsearch核心项目,将Request对象作为参数,返回一个Response对象。所有API都可以同步或异步调用。
    • 同步调用方法立即返回一个Response对象。
    • 而异步调用方法(方法名以async结尾)依赖于监听,当有请求返回或是错误返回时,该监听会通知到对应的方法继续执行。