Spring Boot 3.0.5升级后Elasticsearch QueryBuilder缺失及兼容问题咨询
1. 旧QueryBuilder类的处理
是的,Spring Boot 3.x(对应Spring Data Elasticsearch 5.x)已经彻底移除了对旧Elasticsearch High Level Rest Client(HLRC)的依赖,转而采用Elasticsearch官方新Java Client(co.elastic.clients.elasticsearch包下的API)。你提到的org.apache.lucene.search.join.ScoreMode、org.elasticsearch.index.query.*这类类都属于旧HLRC的API,在新依赖中已不存在,必须修改所有使用这些类的业务代码。
替换参考方向:
- 用新客户端的
co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders替换旧的org.elasticsearch.index.query.QueryBuilders - 旧
BoolQueryBuilder对应新的BoolQuery,通过QueryBuilders.bool()构建 ScoreMode可替换为新客户端的JoinScoreMode枚举
2. 响应式模式支持情况
你说的5.0.5应该对应Spring Data Elasticsearch 5.0.x(匹配Spring Boot 3.0.5),这个版本支持响应式模式,但需要改用新的响应式客户端API:
- 旧的
ReactiveElasticsearchClient已被替换为co.elastic.clients.elasticsearch.ElasticsearchAsyncClient,也可以结合Spring Data Elasticsearch的ReactiveElasticsearchOperations使用 - 若之前使用旧响应式HLRC相关API,同样需要迁移到新的响应式接口
3. Elasticsearch 7.10.1与Spring Boot版本的兼容性
根据Spring Data Elasticsearch的版本兼容规则:
- Spring Boot 3.0.x(对应Spring Data Elasticsearch 5.x)要求Elasticsearch服务器版本为8.0.x-8.6.x,完全不兼容7.10.1这类7.x版本
- 你只能选择升级到Spring Boot 2.7.x(对应Spring Data Elasticsearch 4.4.x),该版本支持的Elasticsearch服务器版本范围是7.17.x-8.5.x。不过7.10.1比最低支持的7.17.x更旧,存在兼容性风险,建议先把Elasticsearch服务器升级到7.17.x(LTS版本),再升级Spring Boot到2.7.x,之后再考虑Spring Boot 3.x+ES 8.x的组合
测试案例补充说明
你遇到的包缺失问题本质是Spring Boot 3.x的starter依赖直接引入了Spring Data Elasticsearch 5.x,而该版本彻底抛弃了旧HLRC API,所以相关类无法找到。案例2能运行是因为Spring Boot 2.4.2的父依赖限制了部分底层依赖版本,虽然指定了3.0.5的data-elasticsearch starter,但实际未完全切换到新客户端,不过这种混合版本的方式存在潜在风险,不建议用于生产环境。
内容的提问来源于stack exchange,提问作者Carlyle CHAN

