我用这两个查询进行测试
用 must 查询
{
"size": 200,
"from": 0,
"query": {
"bool": {
"must": [ {
"match": {
"_all": "science"
}
},
{
"match": {
"category": "fiction"
}
},
{
"match": {
"country": "us"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
}
使用 should + minimum_should_match 查询
{
"size": 200,
"from": 0,
"query": {
"bool": {
"should": [ {
"match": {
"_all": "science"
}
},
{
"match": {
"category": "fiction"
}
},
{
"match": {
"country": "us"
}
}
],
minimum_should_match: 3
}
}
}
Run Code Online (Sandbox Code Playgroud)
两个查询都给我相同的结果,我不知道这两个之间的区别,我们什么时候应该使用 minimum_should_match?
我猜你的意思是minimum_number_should_match,对吧?
在这两种情况下,它是相同的,因为您在should. minimum_number_should_match通常在您的子句数量多于您在那里指定的数量时使用。
例如,如果您有 5 个 should 子句,但出于某种原因,您只需要满足其中的三个,您将执行以下操作:
{
"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
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
这是正确且理想的行为。我们来稍微解读一下:
must意味着must要求section下的所有子句都匹配。就像英语一样——它意味着强烈的义务。should意味着某些子句需要匹配,而其他子句则不需要(即软义务)。此处必须匹配的默认子句数量仅为 1。为了覆盖此行为,minimum_should_match参数将发挥作用。如果指定,minimum_should_match=3则意味着下面的 3 个子句should必须匹配。从实际角度来看,它与用 指定这些子句完全相同must。希望能详细解释一下。
| 归档时间: |
|
| 查看次数: |
7285 次 |
| 最近记录: |