# 多关键词底层原理 term + bool
普通 match 如何转换为 term + should?
{
"match": { "title": "java elasticsearch"}
}
1
2
3
2
3
使用诸如上面的 match query 进行多值搜索的时候,es 会在底层自动将这个 match query 转换为 bool 的语法 bool should,指定多个搜索词,同时使用 term query
{
"bool": {
"should": [
{ "term": { "title": "java" }},
{ "term": { "title": "elasticsearch"}}
]
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
and match 如何转换为 term + must?
{
"match": {
"title": {
"query": "java elasticsearch",
"operator": "and"
}
}
}
转换为
{
"bool": {
"must": [
{ "term": { "title": "java" }},
{ "term": { "title": "elasticsearch" }}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
minimum_should_match 如何转换
{
"match": {
"title": {
"query": "java elasticsearch hadoop spark",
"minimum_should_match": "75%"
}
}
}
转换为
{
"bool": {
"should": [
{ "term": { "title": "java" }},
{ "term": { "title": "elasticsearch" }},
{ "term": { "title": "hadoop" }},
{ "term": { "title": "spark" }}
],
"minimum_should_match": 3
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上一讲,为啥要讲解两种实现 multi-value 搜索的方式呢?实际上,就是给这一讲进行铺垫的。match query --> bool + term。