在 Elasticsearch 中,有几种不同类型的客户端可以用来与 Elasticsearch 集群进行交互。这些客户端包括:
-
Transport Client:Transport Client 是基于 Java 的客户端,用于与 Elasticsearch 集群进行通信。然而,它已经在 Elasticsearch 7.0 版本中被废弃,不再推荐使用。
-
High Level REST Client:High Level REST Client 是一个基于 RESTful API 的客户端,提供了更简单、更直观的接口来与 Elasticsearch 集群进行交互。它是目前推荐使用的客户端之一,适用于大多数的应用场景。
-
Low Level REST Client:Low Level REST Client 也是基于 RESTful API 的客户端,提供了更底层的接口来与 Elasticsearch 集群进行交互。虽然它的使用相对复杂,但在一些特定的场景下仍然可以使用。
总的来说,High Level REST Client 是目前推荐使用的客户端,而 Transport Client 已经被废弃不建议使用。
下面是gradle依赖,示例版本为6.4.3.
api "org.elasticsearch:elasticsearch:6.4.3"
api "org.elasticsearch.client:elasticsearch-rest-client:6.4.3"
api "org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3"
api "org.elasticsearch.client:transport:6.4.3"
api "org.springframework.boot:spring-data-elasticsearch"
1、elasticsearch:6.4.3 包含TransportClient、NodeClient等客户端,其中TransportClient对于查询dsl有以QueryBuilder接口为基础的大量面向对象封装,底层使用tcp协议连接es服务器,但这个客户端已逐渐被废弃。
“关于TransportClient,elastic计划在Elasticsearch 7.0中弃用TransportClient,并在8.0中完全删除它”。
该模块被transport:6.4.3依赖,也被早期的spring-data-elasticsearch依赖。
2、transport:6.4.3 里仅仅包含一个类PreBuiltTransportClient,它是TransportClient的子类,拥有自动嗅探功能,可以通过任意节点地址,或者集群名,自动搜索所有节点信息,省略初始化时的集群信息设置。也跟着它爹一起逐渐被废弃。
3、elasticsearch-rest-client:6.4.3,低级客户端【es官方推荐】,一个简易的http连接es服务器的客户端,对于创建索引、查询等dsl没有面向对象封装,示例:
RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200)).build();
// 获取id为1的文档
Request request = new Request("GET", "/some_index/1");
Response response = restClient.performRequest(request);
该模块被elasticsearch-rest-high-level-client:6.4.3依赖。
4、elasticsearch-rest-high-level-client:6.4.3,高级客户端【es官方推荐】,依赖于低级客户端elasticsearch-rest-client和elasticsearch两个模块,使用面向对象的方式来形成dsl,和TransportClient不同的是,它是通过低级客户端的http协议和es服务器来交互。
5、spring-data-elasticsearch:spring封装的es,使用ElasticTemplate以及@Document、@Field等注解,在创建索引的方式上也实现了面向对象设计。而ElasticsearchCrudRepository的设计让es的增删改查像数据库一样简单。封装程度非常之高。
在spring-data-elasticsearch 4.0之前,spring底层使用TransportClient,4.0之后升级到es7.6.2,弃用了TransportClient