【问题标题】:How to write a Query annotation with collection parameter in Spring Data Elasticsearch repository如何在 Spring Data Elasticsearch 存储库中编写带有集合参数的查询注释
【发布时间】:2021-10-19 23:28:21
【问题描述】:

ProductRepository extends ElasticsearchRepository<Product, String> 中,我有一个有效的查询,例如:

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

我需要将terms 值不硬编码在注释中,而是作为方法的List&lt;String&gt; 参数。我找不到正确的方法来编写 Query 注释来查询名称集合,例如:

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

这编译和运行没有错误,但不起作用。
查看Spring Data Elasticsearch documentation 我找不到如何执行此操作的示例。

Spring Data Elasticsearch 版本:4.0.4

【问题讨论】:

  • 我认为您可以使用 org.elasticsearch.index.query.BoolQueryBuilder 并尝试代替注释,但需要自定义实现

标签: java spring-data spring-data-elasticsearch


【解决方案1】:

2021 年 7 月 3 日,PR #1856 为分支 4.3 到 4.1 添加了对集合参数的支持。 4.0分支有OSS支持until May 2021,所以不再更新了。

【讨论】:

  • 我暂时停留在 Fuse 版本上。现在,我只需要使用模板样式。谢谢。
猜你喜欢
  • 2020-04-16
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多