Spring Data Elasticsearch 自定义 @Query 超过 10 个参数

use*_*337 2 elasticsearch spring-data spring-boot spring-data-elasticsearch

我正在使用 spring-boot-starter-data-elasticsearch 2.1.0.RC1。

我有一个自定义查询(通过 @Query 注释),我想在其中传递 11 个参数。查询如下所示:

{
      "bool" : {
        "must" : [
          {
            "range" : {
              "attribute0" : { "gte" : ?0, "lte" : ?1 }
            }
          },
          {
            "range" : {
              "attribute1" : { "gte" : ?2, "lte" : ?3 }
            }
          },
          {
            "term": { "attribute2": "?4" }
          },
          {
            "term": { "attribute3": "?5" }
          },
          {
            "term": { "attribute4": "?6" }
          },
          {
            "term": { "attribute5": "?7" }
          },
          {
            "term": { "attribute6": "?8" }
          },
          {
            "term": { "attribute7": "?9" }
          },
          {
            "term": { "attribute8": "?10" }
          }
        ]
      }
    }
Run Code Online (Sandbox Code Playgroud)

在我的存储库中,它看起来像这样:

@Query("{\"bool\":{\"must\":[{\"range\":{\"attribute0\":{\"gte\":?0,\"lte\":?1}}},{\"range\":{\"attribute1\":{\"gte\":?2,\"lte\":?3}}},{\"term\":{\"attribute2\":\"?4\"}},{\"term\":{\"attribute3\":\"?5\"}},{\"term\":{\"attribute4\":\"?6\"}},{\"term\":{\"attribute5\":\"?7\"}},{\"term\":{\"attribute6\":\"?8\"}},{\"term\":{\"attribute7\":\"?9\"}},{\"term\":{\"attribute8\":\"?10\"}}]}}")
Page<Entity> findAllByAttributes(
          Integer param0, Integer param1, 
          Integer param2, Integer param3, 
          String param4, String param5,
          String param6, String param7,
          String param8, String param9,
          String param10, Pageable pageable);
Run Code Online (Sandbox Code Playgroud)

问题是,我不能使用超过 10 个参数(单位数字索引 ?0 到 ?9)。占位符 ?10 解析为占位符 1 并附加零

我在 Spring Data Elasticsearch 参考文档中找不到有关参数数量限制的任何内容。

如何将 10 个以上的参数传递给 @Query?

Abh*_*hah 5

Spring Data 是一个玩弄数据世界的非常大的项目

据我所知,我们可以有另一种方法以不同的方式做同样的事情。

Spring data 还有一个注释,有助于将方法参数视为查询参数。

注释:@Param

该注释可以与方法参数本身一起使用。请查找以下格式,它可以帮助扩展方法参数计数以与 Spring 数据一起使用。

说明:您可以包括 N 个号码。带注释的方法参数@Param。请找到下面的有效表达式来编写注释。

@Param("param0")
Run Code Online (Sandbox Code Playgroud)

现在,当你为方法参数添加这个@Param注解时,你必须需要指定带有@Query前缀的 参数colon (:)。像下面查询中的param0一样,

@Query("{"query": {"bool": {"must": [{ "match": {"userId": " :param0 " }}]}}}")

完整示例:您可以看到 org_id 是查询参数。

@Query("{"query": {"bool": {"must": [{ "match": {"userId": ":org_Id"}}]}}}")
List<User> getByOrgId(@Param("org_Id") String orgId)
Run Code Online (Sandbox Code Playgroud)