无法找到minimum_should_match文档中的默认值
minimum_should_match
https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/query-dsl- minimum-should- match.html
是0还是1,还是取决于查询是否具有正义should或filter上下文?
0
1
should
filter
默认值minimum_should_match取决于查询和上下文:
must
bool
可以在bool查询文档中找到:
如果布尔查询位于查询上下文中,并且具有must或filter子句,则文档将与布尔查询匹配,即使没有应当匹配的查询。在这种情况下,这些子句仅用于影响得分。如果布尔查询是一个过滤器上下文,或者既没有必须查询也没有过滤器,则应该查询中的至少一个必须与文档匹配才能使其与布尔查询匹配。可以通过设置minimum_should_match参数来明确控制此行为。
查询上下文,并且should是单独的:
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 } } } } }
在Elasticsearch 7.0中,过滤器上下文已被删除,这实际上意味着在过滤器上下文中其默认值现在为0。