首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Elasticsearch:应该+ minimum_should_match vs must

Elasticsearch:应该+ minimum_should_match vs must
EN

Stack Overflow用户
提问于 2017-03-16 10:07:04
回答 2查看 10.2K关注 0票数 6

我用这两个查询进行测试。

必须查询

代码语言:javascript
运行
复制
 {
  "size": 200,
  "from": 0,
  "query": {
  "bool": {
  "must": [ {
      "match": {
        "_all": "science"
      }
    },
    {
      "match": {
        "category": "fiction"
      }
    },
    {
      "match": {
        "country": "us"
      }
    }
   ]
 }
}

}

使用W应当+ minimum_should_match查询

代码语言:javascript
运行
复制
  {
   "size": 200,
   "from": 0,
   "query": {
   "bool": {
   "should": [ {
       "match": {
         "_all": "science"
       }
     },
     {
      "match": {
        "category": "fiction"
        }
      },
      {
      "match": {
        "country": "us"
        }
      }
    ],
     minimum_should_match: 3
  }
 }
}

这两个查询都给出了相同的结果,我不知道这2之间的区别,什么时候应该使用minimum_should_match?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 10:21:49

我想你是说minimum_number_should_match吧?

在这两种情况下,都是一样的,因为在should中有相同数量的子句。minimum_number_should_match通常用于当您指定的子句比指定的数字更多时使用。

例如,如果您有5个but子句,但出于某种原因,您只需要满足其中的三个,您就可以这样做:

代码语言:javascript
运行
复制
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "tag": "wow"
          }
        },
        {
          "term": {
            "tag": "elasticsearch"
          }
        },
        {
          "term": {
            "tag": "tech"
          }
        },
        {
          "term": {
            "user": "plchia"
          }
        },
        {
          "range": {
            "age": {
              "gte": 10,
              "lte": 20
            }
          }
        }
      ],
      "minimum_should_match": 3
    }
  }
}
票数 9
EN

Stack Overflow用户

发布于 2017-03-16 10:14:48

这是正确的,也是理想的行为。让我们破译一下:

  • must子句的布尔查询意味着must节下的所有子句都必须匹配。就像在英语里一样--它意味着强烈的义务。
  • should子句的布尔查询意味着需要匹配一些子句,而其他子句则不匹配(即软义务)。这里必须匹配的默认子句数仅为1。要覆盖此行为,minimum_should_match参数将起作用。如果指定minimum_should_match=3,则意味着should下的3个子句必须匹配。从实际角度来看,这与用must指定这些子句完全一样。

希望它能详细解释。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42830882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档