【问题标题】:Using `not` filter in Elasticsearch在 Elasticsearch 中使用 `not` 过滤器
【发布时间】:2015-02-03 21:37:16
【问题描述】:

我在 ElasticSearch 中有以下查询。我正在尝试过滤掉字段 message_class 等于“SE”的文档。

我提到了this SO Q&A 等,但下面的查询仍然返回字段message_class 等于“SE”的文档。

not 过滤器的正确使用方法是什么?

POST _search
{  
   "query":{  
      "filtered":{  
         "filter":{  
            "not":{  
               "term":{  
                  "message_class":"SE"
               }
            }
         }
      }
   }
}

message_class 字段的 _mapping 显示:

    "message_class" : {
      "full_name" : "message_class", "mapping" : {"message_class":{"type":"string"}}
    }

【问题讨论】:

  • message_class 字段的映射是什么?要使用term 过滤器,您通常需要一个非分析字段。
  • @mguillermin 我已将信息添加到问题中,谢谢。不知道如何解释它。非常感谢您的帮助。我还可以使用什么其他过滤器?
  • 请注意:一般情况下,您应该避免使用not 过滤器 - 使用bool 过滤器和must_not 子句代替elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets

标签: elasticsearch


【解决方案1】:

当您使用术语查询时,分析器不会应用于您的查询。假设应用了小写过滤器,以下应该可以正常工作 -

POST _search
{  
   "query":{  
      "filtered":{  
         "filter":{  
            "not":{  
               "term":{  
                  "message_class":"se"
               }
            }
         }
      }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多