minimum_should_match

1/bool查询中使用 minimum_should_match

bool查询也可以用 minimum_should_match, 如果配置成数字 3, 则表示 查询关键词被分词器分成 3 个及其以下的term 时,  they are all required(条件都需要满足才能符合查询要求)

elasticsearch query中的minimum_should_match ,字面意思就很清晰了,就是最小匹配度,但是它却有很多种配置方式。

正向匹配度比如 "minimum_should_match":3 官方原文解释是:Indicates a fixed value regardless of the number of optional clauses.

这里要说明一下为什么是optional clauses(翻译为可选的子句),因为对于被analyzer分解出来的每一个term都会构造成一个should的bool query的查询,每个term变成一个term query子句。

例如"query": "how not to be",被解析成:

{

  "bool": {

    "should": [

      { "term": { "body": "how"}},

      { "term": { "body": "not"}},

      { "term": { "body": "to"}},

      { "term": { "body": "be"}}

    ],

    "minimum_should_match": 3

  }

}


(注:在bool query中minimum_should_match只能紧跟在should的后面,放其他地方会出异常)

在bool中这样使用也可以:

{"bool": {

                  "should": [

                          {"match": { "flow_title": "我的查询关键字" }},

                          {"match": { "title": "我的查询关键字" }},

                          {"match": { "content": "我的查询关键字" }}           

                          ],

                  "minimum_should_match":"3<90%"          

   }}

比如下面的搜索,should中有4个条件,默认情况下,只要满足其中一个条件,就可以匹配作为结果返回

但是可以精准控制,should的4个条件中,至少匹配几个才能作为结果返回(下面的3 表示三个)

GET/forum/article/_search

{

"query": {

"bool": {

"should": [

{"match": {"title":"java"}},

{"match": {"title":"elasticsearch"}},

{"match": {"title":"hadoop"}},

{"match": {"title":"spark"}}

      ],

"minimum_should_match":3

    }

  }

}


 "minimum_should_match":"3<90%"表示如果可选子句的数量等于(或小于)设置的值,则它们都是必需的,但如果它大于设置的值,则适用规范。在这个例子中:如果有1到3个子句,则它们都是必需的,但是对于4个或更多子句,只需要90%的匹配度. 

参考链接地址:https://blog.csdn.net/qq_22985751/article/details/90704189。 

2/minimum_should_match 使用场景2

GET /_search

{"from": 0,

"size": 20,

  "query":{

    "match": {

      "NAME.raw":{

        "query":  "hetong",

      "minimum_should_match":"3<90%"

      }

    }

  }

}

minimum_should_match

minimum_should_match:当operator参数设置为or时,该参数用来控制应该匹配的分词的最少数量;

{"query":{  

      "match":{  

         "字段名":{  

            "query":"查询内容",

            "operator":"or", // match查询接受一个'operator'参数,默认值为or。如果要求所有查询关键字都匹配,可以更改参数值为and

            "minimum_should_match":"70%"

         }

      }

   }

}


原文链接:https://blog.csdn.net/qq_26915707/article/details/85784734

3、multi_match 中使用:

GET/forum/article/_search

{

"query": {

"multi_match": {

"query":"java solution",

"type":"best_fields",

"fields":              ["title^2","content"],

"tie_breaker":0.3,

"minimum_should_match":"50%"

    }

  }

}

你可能感兴趣的:(minimum_should_match)