Spring Data Elasticsearch中如何正确使用多Term过滤器?
正确实现方式
你的问题出在同一个term查询对象上重复设置value,循环里每次赋值都会覆盖之前的内容,最终只保留最后一个id的条件。要生成多个独立的term查询并加入bool.filter,需要为每个id创建单独的term查询。
修正后的代码
import org.springframework.data.elasticsearch.client.elc.NativeQuery val query = NativeQuery.builder().withQuery { q1 -> q1.bool { b -> // 为每个id创建独立的term查询,添加到filter列表 listOf(1L, 2L).forEach { t -> b.filter { q2 -> q2.term { tq -> tq.field("tags.id").value(t) } } } b } }.build() val searchHits = elasticsearchOperations.search(query, Book::class.java)
代码说明
- 循环遍历
id列表,每次循环都调用b.filter()创建一个新的term查询 - 每个
term查询对应一个独立的tags.id条件,最终会生成你期望的多条件filter数组
生成的REST请求会和你预期的一致:
{ "query": { "bool": { "filter": [ { "term": { "tags.id": { "value": 1 } } }, { "term": { "tags.id": { "value": 2 } } } ] } } }
内容的提问来源于stack exchange,提问作者SageJustus
相关产品推荐
相关产品推荐

