如何在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
相关产品推荐
相关产品推荐

