我希望实现以下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
.
您正在使用
forEach
与标签 id 来设置同一术语查询的 id,这就是为什么您只看到设置的最后一个值。您必须使用循环来创建单独的过滤器查询:使用范围而不是 listOf 的替代版本: