无法在文档中找到minimum_should_match
的默认值
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html
是0
还是1
,还是取决于查询是否只有should
或filter
上下文?
答案 0 :(得分:14)
minimum_should_match
的默认值取决于查询和上下文:
1
:query context should
和must
独显(无filter
或1
)filter
:在filter context中(例如在bool
查询的0
部分内;在ES 6.7之前为真)filter
:在filter context中(例如在bool
查询的0
部分内;自ES 7.0起为true,请参阅下面的说明)must
:在query context中,有should
和filter
(或should
和should
)可以在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
在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让我发现了这一点。