繁体   English   中英

Elasticsearch 7.0:过滤器must_not查询错误

[英]Elasticsearch 7.0: filter must_not query error

我在Windows 8计算机上使用elasticsearch-py 7.0和elasticsearch服务器7.0。

我有这个查询:

{
    'size': 10000, 
    'query': {
        'bool': {'must_not': {'filter': [{'term': {'status': 'ok'}}]}
        }
    }
}

映射是这样的:

  "mappings": {
      "properties": {
         "name": {"type": "text"},
         "status": {"type": "keyword"},
         "date": {"type":"date"}
      }
    }

它遵循docs中为布尔查询指定的规则,但由于抛出语法错误而无法使用:

RequestError:RequestError(400,“ parsing_exception”,“没有为[过滤器]注册任何[查询]”)

但是,如果删除“ must_not”元素,则它可以工作:

{
    'size': 10000, 
    'query': {
        'bool': {'filter': [{'term': {'status': 'ok'}}]}
    }
}

我在这里做错了什么?

filter

子句(查询)必须出现在匹配的文档中。 但是与查询分数不同的是,忽略该分数。 Filter子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。

must_not

子句(查询)不得出现在匹配的文档中。 子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。 由于计分被忽略,因此所有文档的分数均返回0。

filtermust_not都是bool查询的子句,并且以相同的方式工作。 要使用must_not则需要删除filter

{
  'size': 10000,
  'query': {
    'bool': {
      'must_not': {
        'term': {
          'status': 'ok'
        }
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM