Elasticsearch 7.0:过滤 must_not 查询错误

Posted

技术标签:

【中文标题】Elasticsearch 7.0:过滤 must_not 查询错误【英文标题】:Elasticsearch 7.0: filter must_not query error 【发布时间】:2019-04-26 14:31:35 【问题描述】:

我在 Windows 8 机器上使用 elasticsearch-py 7.0 和 elasticsearch server 7.0。

我有这个问题:


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

映射是这样的:

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

它遵循docs for boolean query 中指定的规则,但它不起作用,因为它会引发语法错误:

RequestError: RequestError(400, 'parsing_exception', '没有为 [filter] 注册 [query]')

但是,如果我删除“must_not”元素,它会起作用:


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

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

filter

子句(查询)必须出现在匹配的文档中。然而不像 必须忽略查询的分数。过滤子句是 在过滤器上下文中执行,这意味着评分被忽略并且 子句被考虑用于缓存。

must_not

子句(查询)不得出现在匹配的文档中。条款 在过滤器上下文中执行,这意味着评分被忽略并且 子句被考虑用于缓存。因为得分被忽略了,一个 返回所有文档的 0 分。

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


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

【讨论】:

以上是关于Elasticsearch 7.0:过滤 must_not 查询错误的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch Bool Query JAVA API

elasticsearch关键词查询不分词

Elasticsearch (DSL 布尔查询 过滤器 排序 高亮显示

elasticsearch must和should的区别

使用 Must 和 Must not 的 Elasticsearch 查询

java使用elasticsearch进行模糊查询之must使用