干货 | Elasticsearch Java 客户端演进历史和选型指南

这篇具有很好参考价值的文章主要介绍了干货 | Elasticsearch Java 客户端演进历史和选型指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Elasticsearch java 客户端为什么要选型?

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

  • Transport 客户端

  • Java REST 客户端

  • Low Level REST 客户端

  • High Level REST 客户端

  • Java API 客户端

非官方的 Java 客户端,包含但不限于:

  • Jest 客户端

  • BBoss 客户端

  • Spring Data Elasticsearch 客户端 ......

写出来的就接近十款客户端!

Elasticsearch  java 客户端各个版本的发展演进历史、选择哪个、如何选择是本篇文章要解决的问题。

2、Elasticsearch 官方 Java 客户端演进史

干货 | Elasticsearch Java 客户端演进历史和选型指南

2.1 Elasticsearch Transport 客户端

Elasticsearch Transport 客户端生命周期:Elasticsearch 0.9 版本(2010年7月27日)生,Elasticsearch 7.0.0版本(2019年04月10日)弃用,Elasticsearch 8.0 版本(2022年02月11日)彻底移除(removed)。

Transport 客户端使用 Elasticsearch 传输协议(transport protocol of Elasticsearch)和 Elasticsearch 通信。

Elasticsearch 传输协议也就是大家熟知的 9300 端口通信的那个协议,该协议负责节点之间互相通信的。如果客户端的版本与集群版本不一致可能出现兼容性问题。

本文介绍的所有客户端中,仅 Transport 客户端使用的是 Elasticsearch 传输协议,其他客户端都是 Http 协议。

更加通俗一点说:仅有 Transport 客户端使用 9300 端口(默认),其他都是 9200 端口(默认)。

Transport 客户端缺点:

  • 和JVM、集群版本紧密耦合。

  • 安全性差。

https://www.elastic.co/guide/en/elasticsearch/client/java-api/0.90/java-api.html

https://www.elastic.co/cn/blog/the-elasticsearch-java-high-level-rest-client-is-out

2.2 Elasticsearch Java REST 客户端

Java REST Client 发布版本:5.0 版本(2016年10月26日)。

官方对 Java REST Client 的解读为:Elasticsearch 的官方“低级“客户端。允许通过 http 协议与 Elasticsearch 集群通信。与所有 Elasticsearch 版本兼容。

官方醒目的标记了“deprecated”已弃用。

干货 | Elasticsearch Java 客户端演进历史和选型指南

Transport 客户端,Java REST 客户端特点如下:

  • 耦合性低;

  • 具有更少的依赖项;

  • 应用程序更加轻量级。

在 Elasticsearch 5.6 版本(2017年9月12日)的时候,REST 客户端衍生为两种:

  • Java Low Level REST 客户端

  • Java High Level REST 客户端

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.0/index.html

2.2.1 Java Low Level REST 客户端

Low Level Rest 5.6 版本(2017年9月11日)单独分割出来,之前统一叫:Java REST 客户端。

Elasticsearch 官方“低级”客户端,官方强调的一个特点:它与所有 Elasticsearch 版本兼容。

注意:下文提到的 High Level REST 客户端已被废弃,但是:Low Level REST 客户端到 8.X 版本依然健在。

https://stackoverflow.com/questions/62340904/elasticsearch-rest-high-level-client-vs-elasticsearch-rest-client

2.2.2  Java High Level REST 客户端

High Level REST 客户端 5.6.0 版本(2017年9月11日)推出,已于 7.15.0 版本(2021年09月22日)废弃。

Elasticsearch 官方“高级“客户端 基于 Low Level REST 客户端,并扩展了 Low Level REST 客户端 的类和接口。

Java High Level REST 客户端较 Low Level REST 客户端的优势如下:

  • 优势1:代码的可维护性和可读性强。

举个例子:发送请求的代码,看如下两种客户端不同写法。

Low Level REST 客户端写法如下:

Request request = new Request("GET", "/posts/_search");

High Level Rest 客户端写法如下:

SearchRequest searchRequest = new SearchRequest("posts");

可以看出,Low Level REST 方式相对“原始”、“笨拙”。

使用 High Level Rest 客户端上工作就像在 Elasticsearch 的 API 层(通过 HTTP 包间接工作),而Low Level REST 客户端纯粹是在 HTTP 上工作,什么都得自己构造。

  • 优势2:更加便捷。

帮助开发人员像使用 Kibana 一样关联 ES API 使用。

  • 优势3:XPack 高阶功能 High Level 自动包含,无需使用 Low Level 自己重写。

举个通俗的例子,直接看图。

干货 | Elasticsearch Java 客户端演进历史和选型指南

VS

干货 | Elasticsearch Java 客户端演进历史和选型指南

两个图一对比就更明显了,Low Level REST 客户端 什么都得自己来,High Level REST 客户端都封装好了,我们吃“现成”的。

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.6/java-rest-high.html

2.3 Elasticsearch Java API Client

7.16 版本(2021年12月8日)推出 Elasticsearch Java API Client

值得注意的是:7.17 版本的 High Level REST 客户端可以与 8.X 版本以兼容模式运行。

其实大家可能和我一样都有疑问:High Level 不香吗?为啥还要换?

其实官方在“ElasticCC: The new Elasticsearch Java Client: getting started and behind the scenes”给出了详尽的解读。

干货 | Elasticsearch Java 客户端演进历史和选型指南

概括如下:

  • 1、High Level REST 客户端“太重”。

相关依赖超过 30 MB,且很多都是非必要相关的。

api 暴露了很多服务器内部接口。

  • 2、High Level REST 一致性差。

仍需要大量的维护工作。

  • 3、High Level REST 客户端没有集成 json/object 类型映射。

仍需要自己借助字节缓存区实现。

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 连接建立和池化、重试机制等所有传输级别的问题。

Elasticsearch Java API Client 三个典型特点:

干货 | Elasticsearch Java 客户端演进历史和选型指南

  • 特点1:对象构造基于构建者模式( builder pattern.)。

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。该模式增强了客户端代码的可用性和可读性。

举例如下:

干货 | Elasticsearch Java 客户端演进历史和选型指南

  • 特点2:使用 lambda 构建嵌套对象,从而编写干净、富有表现力的 DSL 变得容易。

分层 DSL 接近 elasticsearch 的 json 格式。

干货 | Elasticsearch Java 客户端演进历史和选型指南

干货 | Elasticsearch Java 客户端演进历史和选型指南

  • 特点3:应用程序类能自动映射为 Mapping。

干货 | Elasticsearch Java 客户端演进历史和选型指南

https://github.com/elastic/elasticsearch-java

3、Elasticsearch 非官方客户端

3.1 JEST 客户端

Http REST 客户端,2017年左右还比较新颖,我还做过推荐。

但,最新一次更新是 2 年前,所以已不推荐使用。

干货 | Elasticsearch Java 客户端演进历史和选型指南

原因:Elasticsearch 版本更迭太快,不做新版本适配,很多功能都可用或至少不好用。

https://github.com/searchbox-io/Jest

3.2 BBoss 客户端

https://esdoc.bbossgroups.com/#/

干货 | Elasticsearch Java 客户端演进历史和选型指南

国产的能适应 1.X——8.X 所有版本的 java rest 客户端。

3.3 Spring data Elasticsearch 客户端

最新版本为:Spring Data Elasticsearch 4.4,支持 Elasticsearch 7.17.3 版本。

干货 | Elasticsearch Java 客户端演进历史和选型指南

8.X 尚不支持,之前的观察看,更新较慢。

使用 Spring Data,High Level REST Client 是默认客户端,且仍然支持 Java Transport 客户端,目 前尚不支持 Elasticsearch Java API 客户端。

Spring data Elasticsearch 官方文档如下:

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/

实现推荐参考:

https://developer.okta.com/blog/2022/02/16/spring-data-elasticsearch

4、Elasticsearch java 客户端如何选型?

选型关注要点:

  • Elasticsearch 集群的版本。

  • 历史版本的兼容性问题。

  • 未来升级版本、扩展性问题。

  • 所选型的客户端是否更新及时,能适配将来的版本。

如果当前是:7.X 版本且不考虑升级,那就 High Level REST 客户端。

如果当前是:8.X 版本,那就 Elasticsearch Java API 客户端。

如果当前是:5.X、6.X 版本,推荐尽早升级集群版本。

JEST 已不更新和维护,不推荐使用。

BBoss 客户端,根据自己业务需要做选型。

Spring 框架的 Web 项目,可以使用 Spring Data Elasticsearch,但关注它的更新版本,截止:2022-06-17,支持到:7.17.3 版本。

5、小结

随着 Elasticsearch 的版本快速更迭,Elasticsearch java 客户端也在随之变化。

本文以时间为主线梳理了 Elasticsearch 官方 java 客户端的演进历史,并列举常见的非 Elasticsearch 客户端。

Elasticsearch java 客户端琳琅满目、“乱花渐欲迷人眼”,但我们需要结合集群版本、集群的过去和将来,以发展的眼光选型适合自己的 Elasticsearch 客户端。

你的 Elasticsearch 集群开发使用的什么 java 客户端?有没有坑?欢迎留言交流。

推荐阅读

  1. 如何从0到1打磨一门 Elasticsearch 线上直播课?

  2. 重磅 | 死磕 Elasticsearch 方法论认知清单(2021年国庆更新版)

  3. 如何系统的学习 Elasticsearch ?

更短时间更快习得更多干货!

和全球 1600+ Elastic 爱好者一起精进!

干货 | Elasticsearch Java 客户端演进历史和选型指南

比同事抢先一步学习进阶干货!文章来源地址https://www.toymoban.com/news/detail-410828.html

到了这里,关于干货 | Elasticsearch Java 客户端演进历史和选型指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch-学习笔记04【Java客户端操作索引库】

    Java后端-学习路线-笔记汇总表【黑马程序员】 ElasticSearch-学习笔记01【ElasticSearch基本介绍】 【day01】 ElasticSearch-学习笔记02【ElasticSearch索引库维护】 ElasticSearch-学习笔记03【ElasticSearch集群】 ElasticSearch-学习笔记04【Java客户端操作索引库】 【day02】 ElasticSearch-学习笔记05【Spri

    2023年04月09日
    浏览(33)
  • Elasticsearch Java客户端和Spring data elasticsearch-Elasticsearch文章三

    https://www.elastic.co/cn/ 整合springboot看上一篇文章 一定要对应好版本,Elasticsearch 的不同版本变化是真大, https://docs.spring.io/spring-data/elasticsearch/docs/4.4.10/reference/html/ Springboot: 2.7.10 spring-data-elasticsearch: 4.4.10 spring-boot-starter-data-elasticsearch: 2.7.10 elasticsearch-java: 7.17.9 https://github.com/

    2024年02月14日
    浏览(30)
  • Navicat客户端历史版本下载地址

    为了方便mysql等数据库的用户使用,特整理一些现有版本和历史版本的下载地址,如有问题请在评论区联系!后续会更新mysql免安装版的部署方法。 历史版本客户端下载地址(下载地址.../navicat后面的三位数字,前两位是大版本,后面是小版本,以下地址支持windows 64(x64)位

    2024年02月11日
    浏览(38)
  • windows环境安装elasticsearch+kibana并完成JAVA客户端查询

    elasticsearch 官网下载比较慢,有时还打不开,可以通过https://elasticsearch.cn/download/下载,先找到对应的版本,最好使用迅雷下载,秒下的,我的下载速度可以达到40M/S 解压后点击 elasticsearch-7.10.0binelasticsearch.bat 运行成功后,输入http://120.0.0.1:9200,可以访问说明ES启动成功 点击

    2024年02月14日
    浏览(38)
  • Elasticsearch8.x版本Java客户端Elasticsearch Java API Client中常用API练习

    在Es7.15版本之后,es官方将它的高级客户端RestHighLevelClient标记为弃用状态。同时推出了全新的java API客户端Elasticsearch Java API Client,该客户端也将在Elasticsearch8.0及以后版本中成为官方推荐使用的客户端。 Elasticsearch Java API Client支持除Vector title search API和Find structure API之外的所有

    2024年04月11日
    浏览(35)
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档

    为了方便演示,我关闭了elasticsearch的安全验证,带安全验证的初始化方式将在最后专门介绍 其中,HotelDoc是一个实体类 带安全验证的连接有点复杂,将下列代码中CA证书的位置改为实际所在的位置就行了。 password为elastic的密码,可以在我的另一篇文章中查看密码的重置方式

    2024年04月11日
    浏览(38)
  • Elasticsearch:在 Java 客户端应用中管理索引 - Elastic Stack 8.x

    管理索引是客户端应用常用的一些动作,比如我们创建,删除,打开 及关闭索引等操作。在今天的文章中,我将描述如何在 Java 客户端应用中对索引进行管理。 我们需要阅读之前的文章 “Elasticsearch:在 Java 客户端中使用 truststore 来创建 HTTPS 连接”。在那篇文章中,我们详

    2023年04月09日
    浏览(29)
  • Java客户端调用elasticsearch进行深度分页查询 (search_after)

    前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 具体的Search_after解释,可以看我这篇文章 elasticsearch 深度分页查询 Search_after(图文教程) 参考:https://blog.csdn.net/qq_44056652/article/details/126341810 作者:神的孩子

    2024年03月22日
    浏览(39)
  • 【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入

    ElasticSearch 官方提供了各种不同语言的客户端,用来操作 ES。这些客户端的本质就是组装 DSL 语句,通过 HTTP 请求发送给 ES 服务器。 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html。 在本文中,我们将着重介绍 ElasticSearch Java 客户端中的 RestClient,并演示如何

    2024年02月08日
    浏览(40)
  • 【ElasticSearch】使用 Java 客户端 RestClient 实现对文档的查询操作,以及对搜索结果的排序、分页、高亮处理

    在 Elasticsearch 中,通过 RestAPI 进行 DSL 查询语句的构建通常是通过 HighLevelRestClient 中的 resource() 方法来实现的。该方法包含了查询、排序、分页、高亮等所有功能,为构建复杂的查询提供了便捷的接口。 RestAPI 中构建查询条件的核心部分是由一个名为 QueryBuilders 的工具类提供

    2024年01月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包