You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Data Elasticsearch的@Query注解中使用集合参数

问题原因

你原有写法的核心问题是:["?1"]的格式会强制将List<String>类型的入参作为单个字符串序列化,最终生成的查询DSL中Name.keyword对应的取值会变成类似["[\"Name_A\",\"Name_B\",\"Name_C\"]"]的错误结构,无法匹配到符合条件的文档。

正确写法

无需手动给List类型的参数加引号和外层方括号,Spring Data Elasticsearch会自动将集合类型的入参序列化为标准JSON数组,正确代码如下:

@Query("{\"bool\": {"
        + "    \"filter\": ["
        + "        {\"term\": {\"CategoryID.keyword\": {\"value\": \"?0\"}}},"
        + "        {\"terms\": {\"Name.keyword\": ?1}}"
        + "     ]"
        + "   }"
        + "}")
Stream<Product> findByCategoryIDAndNames(String categoryId, List<String> names, PageRequest pageRequest);

验证建议

如果需要确认生成的查询是否符合预期,可以在配置文件中添加日志配置,打印完整的Elasticsearch请求报文:

logging.level.org.springframework.data.elasticsearch.client.WIRE=TRACE

内容的提问来源于stack exchange,提问作者JStefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:57:04