我希望实现以下rest API:
POST /t_source_item/_search?typed_keys=true&search_type=query_then_fetch
{
"query": {
"bool": {
"filter": [
{
"term": {
"tags.id": {
"value": "1"
}
}
},
{
"term": {
"tags.id": {
"value": "2"
}
}
}
]
}
}
}
下面是我写的代码:
import org.springframework.data.elasticsearch.client.elc.NativeQuery
val query = NativeQuery.builder().withQuery { q1 ->
q1.bool { b ->
b.filter { q2 ->
q2.term { tq ->
listOf(1L, 2L).forEach { t ->
tq.field("tags.id").value(t)
}
tq
}
}
}
}.build()
val searchHits = elasticsearchOperations.search(query, Book::class.java)
但是我总是只得到最后一个term
而不是多个term
,其余的API结果如下:
{
"query": {
"bool": {
"filter": [
{
"term": {
"tags.id": {
"value": 2
}
}
}
]
}
}
}
正确的做法应该是什么?我用的是spring-data-elasticsearch:5.0.3
1条答案
按热度按时间aor9mmx11#
您正在使用
forEach
和标签id来设置同一项查询的id,这就是为什么您只看到最后一个设置的值。必须使用循环创建单独的筛选查询:使用范围而不是listOf的替代版本: