当前位置: 首页 > 知识库问答 >
问题:

elasticsearch中must_not与filter的区别

封瑞
2023-03-14

有人能给我解释一下在ElasticSearch中must_not和filter有什么区别吗?

例如。这里(摘自elasticsearch权威指南),为什么must_not不也用于范围?

{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "range": { "date": { "gte": "2014-01-01" }} 
        }
    }
}

具体看一下这篇文档,我觉得它们是完全一样的:

筛选器:子句(查询)必须出现在匹配的文档中。但是,与must不同的是,查询的分数将被忽略。筛选子句在筛选上下文中执行,这意味着计分被忽略,子句被考虑用于缓存。

must_not:子句(query)不能出现在匹配的文档中。子句在筛选上下文中执行,这意味着计分被忽略,子句被考虑缓存。由于忽略计分,因此将返回所有文档的0分。

共有1个答案

隆安然
2023-03-14

当匹配的文档需要显示在结果中时使用过滤器,而当匹配的文档不显示在结果中时使用must_not。为了进一步分析:

过滤器:

  1. 它是在筛选器上下文中编写的。
  2. 不影响结果的得分。
  3. 匹配的查询结果将显示在结果中。
  4. 完全匹配,而不是部分匹配。

must_not:

  1. 在相同的筛选器上下文中再次写入。
  2. 表示不会影响结果的得分。
  3. 与此条件匹配的文档不会出现在结果中。
  4. 完全匹配。
 类似资料:
  • 问题内容: 我目前正在使用ElastSearch查询,该查询当前看起来如下所示: 因此,现在当条件1或条件2匹配时,将忽略文档。查询的外观如何,以便仅忽略符合条件1和条件2的文档? 问题答案: 由于不可能更新elasticsearch版本,因此我不得不找到另一个解决方案。这对我有用:

  • 问题内容: 我的Elasticsearch DB中有一个像这样的文档: 我希望能够使用此条件过滤我的文档:Documents标签数组必须具有标签1,标签3和标签2,但不能具有标签A。 我尝试使用布尔过滤器,但无法使其正常工作! 问题答案: 这是一种似乎可以完成您想要的方法:http : //sense.qbox.io/gist/4dd806936f12a9668d61ce63f39cb2c2845

  • 问题内容: 我是elasticsearch的新手,在must和filter之间感到困惑。我想在条款之间执行and操作,所以我这样做了 开机自检/ xyz / _search 这给了我所需的结果,既匹配了术语,又使用了像这样的过滤器 开机自检/ xyz / _search 我得到相同的结果,所以什么时候应该使用must以及什么时候应该使用filter?有什么区别? 问题答案: 有助于得分。在中,查询

  • 发布/xyz/_search 我得到了相同的结果,那么什么时候应该使用must和什么时候应该使用filter呢?有什么区别?

  • 根据文献记载 must_not子句(query)不能出现在匹配的文档中。 我有如下查询: 在我的elasticsearch存储库中有两个URI 1) 编辑这里是我的映射

  • 应查找下列文件: 我尝试了以下方法: 它应该(但不是)这样工作: bool通过或和部分组合 第一个按查询选择 筛选器使用bool组合by或must_not` 但其行为类似于与via AND子句组合。例如。当我删除“must”或“must_not”时,查询工作。 如何通过OR子句更改查询以将“must”与“must_not”组合? Elasticsearch版本为