【发布时间】:2019-04-01 20:03:38
【问题描述】:
我正在使用 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" }
}
]
}
}
在我的存储库中,它看起来像这样:
@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);
问题是,我不能使用超过 10 个参数(个位索引 ?0 到 ?9)。 占位符 ?10 被解析为附加零的占位符 1。
我在 Spring Data Elasticsearch 参考文档中找不到任何关于参数数量限制的内容。
如何将超过 10 个参数传递到 @Query?
【问题讨论】:
-
嗯很奇怪,因为用于计算参数的模式是
"\?(\d+)"(可以看到here) -
我添加了存储库方法定义。也许它与查询的转义/预处理有关?
标签: spring-boot elasticsearch spring-data spring-data-elasticsearch