spring-data-elasticsearch能否跨多个索引调用Multi get接口
spring-data-elasticsearch MultiGet跨多索引问题解答
结论
ElasticsearchOperations#multiGet 本身支持跨多个索引调用Multi Get接口,你遇到的仅使用列表中第一个索引的问题,通常是旧版本bug或者参数使用不规范导致的。
具体说明
- 版本问题:4.2.x及更早的spring-data-elasticsearch版本中存在已知bug,传入多索引列表时框架会仅读取第一个索引生成请求,该问题在4.3.0及之后的正式版本已完成修复,你可以先核对当前使用的版本是否符合要求。
- 参数使用规范:如果需要从不同索引查询对应文档,更稳妥的方式是为每个查询单独指定目标索引,无需依赖全局传入的索引列表参数,调用示例如下:
// 构造每个id对应的查询,单独指定所属索引 List<MultiGetQuery> queryList = Arrays.asList( MultiGetQuery.builder().id("doc_id_1").index("index_a").build(), MultiGetQuery.builder().id("doc_id_2").index("index_b").build(), MultiGetQuery.builder().id("doc_id_3").index("index_c").build() ); // 执行multiGet查询 List<DocumentEntity> resultList = elasticsearchOperations.multiGet(queryList, DocumentEntity.class);
- 问题排查方式:你可以通过配置日志打印框架实际发出的ES请求,确认索引参数是否符合预期,配置项为
logging.level.org.springframework.data.elasticsearch.client.WIRE = TRACE,开启后会在日志中输出完整的请求地址和请求体内容。
内容的提问来源于stack exchange,提问作者Bogdan
相关产品推荐
相关产品推荐

