Elasticsearch升级到7搭配spring-data-elasticsearch4.12调用deleteAll报错如何解决
问题排查与解决建议
根本原因
该报错和插件缺失无关,核心是Spring Data Elasticsearch 4.12与你部署的Elasticsearch 7.x服务端小版本不兼容。
Spring Data Elasticsearch 4.12默认适配的是Elasticsearch 7.17.x版本,内置的客户端调用deleteAll()时会自动给_delete_by_query接口带上后续新增的批量控制参数,如果你用的是7.0~7.10之间的早期7.x服务端版本,这些参数还未被支持,就会抛出参数不识别的异常。
解决建议
- 方案一(最稳妥):将Elasticsearch服务端升级到7.17.x版本,和Spring Data Elasticsearch 4.12官方适配版本对齐,从根源解决所有兼容性问题,避免后续其他接口调用出现同类报错。
- 方案二(兼容现有服务端):降级Spring Data Elasticsearch到和你当前ES服务端小版本匹配的版本,比如ES 7.3.x对应Spring Data Elasticsearch 3.2.x、ES 7.6.x对应Spring Data Elasticsearch 4.0.x,按需选择适配的版本即可。
- 方案三(不改依赖版本临时修复):重写全量删除逻辑,不使用内置的
deleteAll()方法,手动构造删除请求时不传未支持的参数,示例代码如下:
@Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; public void deleteAllWhateverContent() { DeleteQuery deleteQuery = DeleteQuery.builder() .query(QueryBuilders.matchAllQuery()) .build(); elasticsearchRestTemplate.delete(deleteQuery, WhateverContent.class); }
你当前用的删除重建索引的方案只是临时规避了deleteAll()的调用,没有解决底层版本不兼容的问题,后续其他涉及新增参数的接口调用仍可能触发同类报错,建议优先选择前两个方案处理。
内容的提问来源于stack exchange,提问作者A_G
相关产品推荐
相关产品推荐

