Java ElasticSearch Client 选型

一、介绍

  • Elasticsearch 官方提供了很多版本的 Java 客户端,包含但不限于:

    • Transport 客户端
    • Java REST 客户端
    • Low Level REST 客户端
    • High Level REST 客户端
    • Java API 客户端
  • 非官方的 Java 客户端,包含但不限于:

    • Jest 客户端
    • BBoss 客户端
    • Spring Data Elasticsearch 客户端 …

二、版本

  • 注意:
    • 某些版本的 Elasticsearch 和 Spring Boot 可能不再受支持,因此请始终查看官方文档以获取详细信息。并且需要明确的是,更高版本的 Spring Data Elasticsearch 库不能与旧版本的 Elasticsearch 或 Spring Boot 合作使用,因此在升级时要小心。
    • 截至目前为止(2021年8月),Spring Boot 尚未正式宣布完全支持 Elasticsearch 8。但是,可以使用 Spring Data Elasticsearch 库和 RestHighLevelClient 客户端直接连接到 Elasticsearch 8 集群。
    • 虽然官方文档中没有提及 Elasticsearch 8 实际上不被 Spring Boot 支持,但 Elastic 公司建议仍然需要依赖于最新的 Spring Data Elasticsearch 存储库版本来确保与 Elasticsearch 8 的兼容性,并避免与旧版 Elastic Stack 环境产生冲突。
    • 另外,RestHighLevelClient 客户端已经支持 Elasticsearch 8,因此如果您打算在 Spring Boot 中使用较新版本的 Elasticsearch,则可以考虑使用该客户端。
  • 参考文档:
    • Spring Boot 2.5.x:Elasticsearch 版本为 7.13.3,参考文档
    • Spring Boot 2.4.x:Elasticsearch 版本为 7.10.x,参考文档
    • Spring Boot 2.3.x:Elasticsearch 版本为 7.6.x,参考文档
    • Spring Boot 2.2.x:Elasticsearch 版本为 6.8.x,参考文档
    • Spring Boot 2.1.x:Elasticsearch 版本为 6.7.x,参考文档
Elasticsearch 版本Spring Boot 版本
7.14.02.4.X - 2.5.X
7.13.02.4.X - 2.5.X
7.12.02.4.X - 2.4.6
7.11.02.4.X - 2.4.3
7.10.22.3.X
7.9.32.3.X
7.8.12.3.X
7.7.12.2.X
7.6.22.2.X
7.5.22.2.X
7.4.22.1.X
7.3.22.1.X
7.2.12.1.X
7.1.1, 7.0.12.1.X

Spring Data Elasticsearch 版本 4.x:

Spring Data Elasticsearch 版本Elasticsearch 版本Spring Boot 版本
4.3.x7.x2.4.x
4.2.x6.x, 7.x2.1.x, 2.4.x
4.1.x5.x, 6.x, 7.x1.5.x, 2.x
4.0.x2.x, 5.x, 6.x1.5.x, 2.x

Spring Data Elasticsearch 版本 3.x:

Spring Data Elasticsearch 版本Elasticsearch 版本Spring Boot 版本
3.2.x6.x, 7.x2.1.x, 2.4.x
3.1.x5.x, 6.x1.5.x, 2.x
3.0.x2.x, 5.x1.5.x, 2.x

Spring Data Elasticsearch 版本 2.x:

Spring Data Elasticsearch 版本Elasticsearch 版本Spring Boot 版本
2.2.x5.x, 6.x1.5.x, 2.x
2.1.x2.x, 5.x1.3.x, 1.4.x
2.0.x2.x, 5.x1.3.x, 1.4.x

三、优缺点

详细的客户端发展史可以参考:elasticsearch客户端发展史

客户端优点缺点说明
TransportClient使用Transport 接口进行通信,能够使用ES集群中的一些特性,性能最好JAR包版本需与ES集群版本一致,ES集群升级,客户端也跟着升级到相同版本过时产品,7版本之后不再支持
Java Low Level Rest Client与ES版本之间没有关系,适用于作为所有版本ES的客户端功能少兼容所有版本
Java High Level Rest Client使用最多,兼容性中等使用需与ES版本保持一致,主版本必须相同,次要版本向后兼容基于Low Level Rest Client,它提供了更多的接口。注意:7.15版本之后将被弃用
Elasticsearch Java API Client最新的es客户端文档少

四、扩展

  • TransportClient

    • 介绍:
      • TransportClient 是最早提供的 Elasticsearch 客户端 API 之一,用于连接到 Elasticsearch 节点并执行搜索、索引等操作。它基于远程传输协议(TCP)进行通信,可以对 Elasticsearch 请求、响应进行序列化和反序列化,因此效率较高。
    • 优点
      • 可以直接对 Elasticsearch 进行操作,无需通过 HTTP 协议进行传输。
      • 提供了完整的 Elasticsearch 操作API,可以执行比较复杂的搜索、索引等操作。
      • 同步和异步的客户端 API 都可用。
    • 缺点
      • 在集群环境中,需要为每个节点创建一个 TransportClient 对象,代价较高。
      • 由于使用的是 TCP 协议进行通信,在网络分区或节点故障时可能会导致请求失败。
      • 目前已经标记为过时,且将在未来版本中被移除。

  • Java Low Level Rest Client

    • 介绍:
      • Java Low Level Rest Client 是 Elasticsearch 提供的新一代低级别 REST 客户端,其根据 HTTP 协议与 Elasticsearch 进行通信,可以执行 Elasticsearch 集群中的所有操作。
    • 优点
      • 支持对 Elasticsearch 的完整操作,性能较好。
      • 可以与 Elasticsearch 集成并使用它所提供的读取和写入节点之间数据分布均衡负载的功能。
      • 与 Elasticsearch 版本保持同步更新。
    • 缺点
      • 客户端 API 功能相对上一个版本较少,需要自己封装和处理一些请求参数和响应结果。
      • 缺少连接池,需要手动实现重连、连接失败时的重试处理等。

  • Java High Level Rest Client

    • 介绍:
      • Java High Level Rest Client 是基于 Java Low Level Rest Client 开发的高级别 REST 客户端,其在低级 REST 客户端之上提供了更加方便的使用方式。除了基本的 Elasticsearch 操作外,还添加了索引模板、刷新、映射管理等更高级别的操作。
    • 优点
      • 提供更加简单易用的 Elasticsearch 操作API,减少了必须编写的代码量。
      • 解决了 Java Low Level Rest Client 缺少连接池、请求失败无法自动重构等问题。
      • 与 Elasticsearch 版本保持同步更新。
    • 缺点
      • 相比 TransportClient 或 Java Low Level Rest Client,Java High Level Rest Client 的性能略差,因为提供了更多的抽象层。

五、建议

  • 如果当前是:7.X 版本且不考虑升级,那就 High Level REST 客户端。
  • 如果当前是:8.X 版本,那就 Elasticsearch Java API 客户端。
  • 如果当前是:5.X、6.X 版本,推荐尽早升级集群版本。
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值