minimum_should_match的默认值?

时间:2018-02-26 09:00:40

标签: elasticsearch

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

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

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

1 个答案:

答案 0 :(得分:14)

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

  • 1query context shouldmust独显(无filter1
  • filter:在filter context中(例如在bool查询的0部分内;在ES 6.7之前为真)
  • filter:在filter context中(例如在bool查询的0部分内;自ES 7.0起为true,请参阅下面的说明)
  • must:在query context中,有shouldfilter(或shouldshould

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

  

如果bool查询在查询上下文中并且具有必需或过滤器   然后一个文件将匹配bool查询,即使没有   应该查询匹配。在这种情况下,这些条款仅用于   影响得分。如果bool查询是过滤器上下文或具有   既不必要也不过滤,那么至少有一个应该查询必须   匹配文档以匹配bool查询。这种行为可能是   通过设置显式控制minimum_should_match参数。

一些例子

查询上下文和POST _search { "query": { "bool" : { "should" : [ { "term" : { "tag" : "wow" } }, { "term" : { "tag" : "elasticsearch" } } ] # default: # "minimum_should_match" : 1 } } } 是唯一的:

must

查询上下文和should以及POST _search { "query": { "bool" : { "must" : { "term" : { "user" : "kimchy" } }, "should" : [ { "term" : { "tag" : "wow" } }, { "term" : { "tag" : "elasticsearch" } } ] # default: # "minimum_should_match" : 0 } } }

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
        }
      }
    }
  }
}

过滤器上下文:

0

更新:ES 7.0相关更改

在Elasticsearch 7.0 the filter context has been removed中,这意味着在过滤器上下文中它的默认值现在是 $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, "http://localhost/test.php/?file_contents=$file"); $result = curl_exec($ch);

感谢this answer让我发现了这一点。