minimum_should_match的默认值?

lap*_*ira 11 elasticsearch

无法找到minimum_should_match文档中的默认值

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html

0或者1,或者取决于查询是否只是shouldfilter上下文?

Nik*_*iev 24

默认值minimum_should_match取决于查询和上下文:

可以在should查询的文档中找到:

如果bool查询在查询上下文中并且具有must或filter子句,则文档将匹配bool查询,即使这些查询都不匹配.在这种情况下,这些条款仅用于影响分数.如果bool查询是过滤器上下文或既没有必须或过滤,那么至少有一个should查询必须匹配文档才能匹配bool查询.可以通过设置minimum_should_match参数显式控制此行为.

几个例子

查询上下文并且filter是孤立的:

POST _search
{
  "query": {
    "bool" : {
      "should" : [
        { "term" : { "tag" : "wow" } },
        { "term" : { "tag" : "elasticsearch" } }
      ]
      # default:
      # "minimum_should_match" : 1
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

查询上下文并shouldbool:

POST _search
{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "user" : "kimchy" }
      },
      "should" : [
        { "term" : { "tag" : "wow" } },
        { "term" : { "tag" : "elasticsearch" } }
      ]
      # default:
      # "minimum_should_match" : 0
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

过滤上下文:

POST _search
{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": {
            "term" : { "user" : "kimchy" }
          },
          "should": [
            { "term" : { "tag" : "wow" } },
            { "term" : { "tag" : "elasticsearch" } }
          ]
          # default (until ES 6.7):
          # "minimum_should_match" : 1
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)