1、Elasticsearch java 客户端为什么要选型?Elasticsearch 官方提供了很多版本的 Java 客户端,包含但不限于:
非官方的 Java 客户端,包含但不限于:
写出来的就接近十款客户端! Elasticsearch 2、Elasticsearch 官方 Java 客户端演进史2.1 Elasticsearch Transport 客户端Elasticsearch
Elasticsearch 传输协议也就是大家熟知的 9300 端口通信的那个协议,该协议负责节点之间互相通信的。如果客户端的版本与集群版本不一致可能出现兼容性问题。 本文介绍的所有客户端中,仅 更加通俗一点说:仅有 Transport 客户端缺点:
https://www./guide/en/elasticsearch/client/java-api/0.90/java-api.html https://www./cn/blog/the-elasticsearch-java-high-level-rest-client-is-out 2.2 Elasticsearch Java REST 客户端
官方对 官方醒目的标记了“deprecated”已弃用。 较
在 Elasticsearch 5.6 版本(2017年9月12日)的时候,REST 客户端衍生为两种:
https://www./guide/en/elasticsearch/client/java-rest/5.0/index.html 2.2.1 Java Low Level REST 客户端
Elasticsearch 官方“低级”客户端,官方强调的一个特点:它与所有 Elasticsearch 版本兼容。 注意:下文提到的 https:///questions/62340904/elasticsearch-rest-high-level-client-vs-elasticsearch-rest-client 2.2.2 Java High Level REST 客户端
Elasticsearch 官方“高级“客户端 基于
举个例子:发送请求的代码,看如下两种客户端不同写法。
可以看出, 使用
帮助开发人员像使用 Kibana 一样关联 ES API 使用。
举个通俗的例子,直接看图。 VS 两个图一对比就更明显了, https://www./guide/en/elasticsearch/client/java-rest/5.6/java-rest-high.html 2.3 Elasticsearch Java API Client7.16 版本(2021年12月8日)推出 Elasticsearch 值得注意的是:7.17 版本的 High Level REST 客户端可以与 8.X 版本以兼容模式运行。 其实大家可能和我一样都有疑问: 概括如下:
相关依赖超过 30 MB,且很多都是非必要相关的。 api 暴露了很多服务器内部接口。
仍需要大量的维护工作。
仍需要自己借助字节缓存区实现。 https://github.com/elastic/elasticsearch-java Elasticsearch Java API 客户端官方定义如下: Elasticsearch Java API 客户端为所有的 Elasticsearch API 提供请求和响应处理。 它将请求处理转给 Elasticsearch Low Level REST 客户端,这也是 High Level 被废弃而 Low Level REST 客户端依然健在的原因,Low Level REST 客户端负责处理 Http 连接建立和池化、重试机制等所有传输级别的问题。
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。该模式增强了客户端代码的可用性和可读性。 举例如下:
分层 DSL 接近 elasticsearch 的 json 格式。
https://github.com/elastic/elasticsearch-java 3、Elasticsearch 非官方客户端3.1 JEST 客户端
但,最新一次更新是 2 年前,所以已不推荐使用。 原因:Elasticsearch 版本更迭太快,不做新版本适配,很多功能都可用或至少不好用。 https://github.com/searchbox-io/Jest 3.2 BBoss 客户端https://esdoc./#/ 国产的能适应 1.X——8.X 所有版本的 java rest 客户端。 3.3 Spring data Elasticsearch 客户端最新版本为:Spring Data Elasticsearch 4.4,支持 Elasticsearch 7.17.3 版本。 8.X 尚不支持,之前的观察看,更新较慢。 使用 Spring Data,High Level REST Client 是默认客户端,且仍然支持 Java Transport 客户端,目 前尚不支持 Elasticsearch Java API 客户端。 Spring data Elasticsearch 官方文档如下: https://docs./spring-data/elasticsearch/docs/current/reference/html/ 实现推荐参考: https://developer./blog/2022/02/16/spring-data-elasticsearch 4、Elasticsearch java 客户端如何选型?选型关注要点:
如果当前是:7.X 版本且不考虑升级,那就 如果当前是:8.X 版本,那就 Elasticsearch 如果当前是:5.X、6.X 版本,推荐尽早升级集群版本。
Spring 框架的 Web 项目,可以使用 Spring Data Elasticsearch,但关注它的更新版本,截止:2022-06-17,支持到:7.17.3 版本。 5、小结随着 Elasticsearch 的版本快速更迭,Elasticsearch java 客户端也在随之变化。 本文以时间为主线梳理了 Elasticsearch 官方 java 客户端的演进历史,并列举常见的非 Elasticsearch 客户端。 Elasticsearch java 客户端琳琅满目、“乱花渐欲迷人眼”,但我们需要结合集群版本、集群的过去和将来,以发展的眼光选型适合自己的 Elasticsearch 客户端。 你的 Elasticsearch 集群开发使用的什么 java 客户端?有没有坑?欢迎留言交流。 |
|