Elasticsearch-48-multi_match语法

minimum_should_match作用

我们先来看一个查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
GET forum/article/_search
{
"query": {
"dis_max": {
"queries": [
{
"match": {
"title": {
"query": "java beginner",
"minimum_should_match":"50%",
"boost":2
}
}
},
{
"match": {
"content": {
"query": "java beginner",
"minimum_should_match":"30%"
}
}
}
],
"tie_breaker": 0.3
}
}
}

上面这个查询就是查询了title或者content中包含java beginner的内容,用了dis_max+tie_breaker查询,而且查询title的权重是2,还有一个搜索参数是 “minimum_should_match”,那么这个关键字是做什么用的呢

minimum_should_match: 去长尾,比如你搜素5个关键词,但是很多结果是只匹配一个关键词的,其实跟你想要的结果相差甚远,这些结果就是长尾
minimum_should_match,可以控制搜索结果的精准度,只有匹配一定数量的关键词数据,才能返回

multi_match语法

1
2
3
4
5
6
7
8
9
10
11
12
GET /forum/article/_search
{
"query": {
"multi_match": {
"query": "java beginner",
"type": "best_fields",
"fields": ["title^2","content"],
"tie_breaker": 0.3,
"minimum_should_match":"50%"
}
}
}

type: 默认就是best_fields查询
title^2: 代表title的权重是2, 相当于上面的”boost”:2