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

Elasticsearch 7.13:用must_not实现OR逻辑的查询需求

Elasticsearch 查询实现方案

需求回顾

  • 强制过滤条件:district_id = 123456
  • 筛选规则:保留不满足条件A(district_name不匹配"Mydist")或不满足条件B(state_id不等于123)的记录,即排除同时满足A和B的记录。

问题分析

你最初的查询中,must_not 数组内的多个条件是AND逻辑,即要求记录同时不满足A和B才会被保留,这和需求的OR逻辑不符。要实现需求,需要将A和B用bool.must组合后放入must_not,这样就能排除那些同时满足A和B的记录,剩下的就是符合要求的结果。

正确查询代码

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "district_id": {
              "value": 123456
            }
          }
        }
      ],
      "must_not": [
        {
          "bool": {
            "must": [
              {
                "match": {
                  "district_name": {
                    "query": "Mydist"
                  }
                }
              },
              {
                "term": {
                  "state_id": {
                    "value": 123
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

逻辑说明

  • filter 部分:确保所有返回记录都满足district_id=123456,这部分不参与评分,仅做数据过滤。
  • must_not 部分:内部嵌套的bool.must要求记录同时满足A和B,而must_not会排除这类记录,最终保留的就是:
    • 满足A但不满足B的记录
    • 满足B但不满足A的记录
    • 既不满足A也不满足B的记录
      完全符合你需求中的“不满足A或不满足B”的筛选规则。

内容的提问来源于stack exchange,提问作者Irfan Ulla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:38:11