1531 字
约 5 分钟
0
ES 高级客户端(RestHighLevelClient)入门

ES 高级客户端(RestHighLevelClient)入门

1. 一句话简介

Elasticsearch Rest High Level Client 是 Elastic 官方提供的 Java 高级 REST 客户端,基于 HTTP 协议与 Elasticsearch 集群通信,为索引、文档、搜索等操作提供强类型、面向对象的 API。它封装了底层 RestClient(低级客户端)的 JSON 拼接细节,让开发者用 IndexRequestSearchRequestUpdateRequest 等请求对象即可完成增删改查,是 ES 7.x 时代官方推荐的 Java 接入方式。

本 demo 模块(demo-elasticsearch-rest-high-level-client)演示了如何在 Spring Boot 中手动装配该客户端:通过 @ConfigurationProperties 绑定集群地址、超时、连接池等配置,用 @Bean 注册 RestHighLevelClient,并封装出创建/删除索引、插入/更新/删除/查询文档的完整 CRUD 能力(对应 BaseElasticsearchServicePersonServiceImpl)。

2. 什么时候使用

✅ 适用场景

  • 需要强类型、可读性好的 ES 操作代码:相比低级客户端手写 JSON,IndexRequestSearchSourceBuilder 等对象化 API 更易读、易维护,编译期即可发现拼写错误。
  • 需要精细控制连接与集群行为:可通过 RestClientBuilder 的回调设置连接超时、Socket 超时、连接池上限(maxConnectTotal/maxConnectPerRoute),并支持配置多个集群节点实现负载均衡与故障转移。
  • 需要覆盖索引管理 + 文档 CRUD + 查询的完整能力:本 demo 即演示了从建索引(可配分片/副本数)到增删改查文档的完整链路,适合作为业务接入 ES 的基础封装。
  • 需要支持 ES 安全认证:客户端内置 CredentialsProvider,可配置用户名密码(X-Pack Security),满足带认证的集群接入。
  • 需要与 Spring Boot 深度集成:客户端作为普通 Bean 注入,配合 @ConfigurationProperties 实现配置外部化,符合 Spring 生态的开发习惯。

❌ 不适用/需谨慎

  • 追求极致的底层控制或自定义协议细节:高级客户端隐藏了底层 HTTP 细节,若需要直接操作原始响应、自定义序列化或精细控制请求头,低级客户端(RestClient)更合适。
  • 需要对象与文档自动映射、声明式仓储:高级客户端不提供类似 Spring Data 的 Repository 抽象,实体与文档的转换(如本 demo 用 Hutool BeanUtil 手动转换)需自行实现。
  • 版本兼容性敏感的场景:客户端版本必须与 ES 服务端版本保持兼容(本 demo 固定为 7.3.0),跨大版本升级(如 7.x 到 8.x)时 API 有较大变动,需谨慎评估。
  • ES 7.x 之前的旧集群:TransportClient 在 7.x 已废弃,若仍维护 6.x 及以下集群,需评估升级成本或改用兼容方案。
  • 超大规模、超高吞吐的写入场景:高级客户端本身不提供批量写入的自动分片/重试策略,大批量写入需自行结合 Bulk API 与连接池调优。

3. 常见业务场景

全文检索与站内搜索:对商品、文章、日志等文本数据建立索引,利用 ES 的倒排索引实现毫秒级全文检索。本 demo 的 searchList 通过 SearchSourceBuilder + QueryBuilders 构建查询,可在此基础上扩展 match、term、range 等复杂查询,适合电商、内容平台等搜索需求。

索引生命周期管理:业务中常需按时间或业务维度动态创建/删除索引(如按月分索引的日志库)。本 demo 的 createIndexRequest/deleteIndexRequest 演示了通过 CreateIndexRequest 配置分片与副本数、按需删除索引的能力,可直接复用于索引的自动化管理。

文档级 CRUD 的数据同步:将关系型数据库或业务系统的数据同步到 ES 作为查询副本。本 demo 的 insert/update/delete 分别对应 IndexRequestUpdateRequestDeleteRequest,覆盖了文档的增、改、删,适合构建数据同步管道或缓存层。

带认证的集群接入:当 ES 集群开启 X-Pack Security 时,客户端通过 CredentialsProvider 配置用户名密码完成认证。本 demo 的 ElasticsearchAutoConfiguration 已预留 Account 配置,适合需要安全访问的生产环境。

连接池与超时调优的稳定接入:对高并发访问场景,通过 setRequestConfigCallbacksetHttpClientConfigCallback 精细配置连接超时、Socket 超时与连接池上限,避免连接耗尽或请求长时间阻塞。本 demo 的自动配置类完整演示了这套调优入口。

4. 同类技术对比

技术 通信协议 易用性 版本耦合 学习成本 适用规模/场景
Rest High Level Client HTTP (9200) 高,强类型对象化 API 需与 ES 版本匹配 中小型到大型,官方推荐,功能全面
Rest Low Level Client HTTP (9200) 低,需手写 JSON 低,协议稳定 需要底层控制、自定义请求的场景
Spring Data Elasticsearch HTTP (9200) 高,声明式 Repository 高,版本耦合严重、支持滞后 快速 CRUD、与 Spring Data 生态统一
TransportClient(已废弃) TCP (9300) 极高,7.x 已移除 仅存量 6.x 及以下项目,新项目禁用

选型建议:新项目接入 ES 7.x 且需要完整、可控的索引与查询能力时,优先选 Rest High Level Client——它兼顾了易用性与灵活性,是官方推荐的主流方案。若团队已深度使用 Spring Data 生态、需求以简单 CRUD 为主且能接受版本升级滞后,可选 Spring Data Elasticsearch 以换取更低的开发成本。需要精细控制底层 HTTP 行为或自定义序列化时,退而使用 Rest Low Level ClientTransportClient 已废弃,任何新项目都不应选用,存量项目应尽快迁移到 HTTP 客户端。

ES 高级客户端(RestHighLevelClient)入门
http://www.clxhxhhr.top/posts/481/
作者
clxstart
发布于
2026-09-07
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。