首页 > 解决方案 > ElasticSearch 在过滤器中组合了 OR 和 AND 子句

问题描述

我有一个带有多个过滤器的 ElasticSearch 7.7 查询(我不想计入分数的标准),看起来像这样:

{
  "from": 0,
  "size": 100,
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": [
        {
          "term": {
            "type": 4
          }
        },
        {
          "term": {
            "gender": "female"
          }
        }
      ]
    }
  }
}

我想在两个性别过滤器中添加一个 OR 子句,以便过滤所有带有type=4AND ( gender=femaleOR gender=unisex) 的文档。这可能吗?

标签: elasticsearch

解决方案


您可以使用should子句

{
  "from": 0,
  "size": 100,
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": [
        {
          "term": {
            "type": 4
          }
        },
        {
          "bool": {
            "should": [
              {
                "term": {
                  "gender": "female"
                }
              },
              {
                "term": {
                  "gender": "unisex"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

推荐阅读