4

我想更多地了解 minimum_should_match 在elasticsearch中如何用于查询搜索

GET /customers/_search
{
  "query": {
     "bool": {
        "must":[
           {
           "query_string":{
              "query": "大月亮",
              "default_field":"fullName",
              "minimum_should_match": "70%" ------> experimented with this value
           }
        }
      ]
    }
  }
}

我尝试了查询中的百分比,我可以看到我得到了不同的中文结果?

我尝试阅读文档,但没有清楚地理解这个选项是如何工作的?

4

1 回答 1

7

minimum_should_match 参数适用于“bool”查询中的“should”子句。使用此参数,您可以指定文档必须匹配多少个 should 子句才能匹配查询。

考虑以下查询:

{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "user" : "kimchy" }
      },
      "filter": {
        "term" : { "tag" : "tech" }
      },
      "must_not" : {
        "range" : {
          "age" : { "gte" : 10, "lte" : 20 }
        }
      },
      "should" : [
        { "term" : { "tag" : "wow" } },
        { "term" : { "tag" : "elasticsearch" } },
        { "term" : { "tag" : "stackoverflow" } }
      ],
      "minimum_should_match" : 2,
      "boost" : 1.0
    }
  }
}

这里只有至少 2 个 should 子句匹配时,文档才会匹配。这意味着如果在“tags”字段中同时包含“stackoverflow”和“wow”的文档将匹配,但在 tags 字段中只有“elasticsearch”的文档将不会被视为匹配。

使用百分比时,您指定应该匹配的 should 子句的百分比。因此,如果您有 4 个 should 子句并将 minimum_should_match 设置为 50%,那么如果其中至少 2 个 should 子句匹配,则文档将被视为匹配。

可以在文档中找到有关 minimum_should_match 的更多信息。在那里,您可以阅读“可选子句”,即“布尔”查询中的“应该”。

于 2019-08-23T12:23:04.503 回答