You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:52:09