如何在elasticsearch DSL查询中过滤不

How to filter not in elasticsearch DSL query

DSL查询如下

 {'from': 0, 'size': 10, 'aggs': 
     {'products': {'terms': {'field': 'softwares.name.keyword', 'order': {'_key': 'desc'}}}, 
      'color': {'terms': {'field': 'white.name.keyword', 'order': {'_key': 'desc'}}},
      'types': {'terms': {'field': 'mercedez.name.keyword', 'order': {'_key': 'desc'}}}},
     'query': {'bool': {'must': {'match_all': {}}, 
     'filter': [{'term': {'name.keyword': 'Germany'}}]}}}

我的问题?

您可以使用 must_not 查询和 bool 查询。

选项 1:使用过滤器

{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "bool": {
            "must_not": [
              {
                "term": {
                  "name.keyword": {
                    "value": "Germany"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

选项 2:不带过滤器(但此处德国查询也会被考虑用于分数计算)

{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "must_not": [
        {
          "term": {
            "name.keyword": {
              "value": "Germany"
            }
          }
        }
      ]
    }
  }
}