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:当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%"
}
}
}