Elasticsearch-44-基于term+bool实现的multi word搜索底层原理剖析

在我们使用match这种查询的时候,在es底层其实会自动的转换成term+bool的这种查询

示例一

原请求体:

1
2
3
{
"match": { "title": "java elasticsearch"}
}

es转换后的请求体:

1
2
3
4
5
6
7
8
{
"bool": {
"should": [
{ "term": { "title": "java" }},
{ "term": { "title": "elasticsearch" }}
]
}
}

使用诸如上面的match query进行多值搜索的时候,es会在底层自动将这个match query转换为bool的语法

示例二

原请求体:

1
2
3
4
5
6
7
8
{
"match": {
"title": {
"query": "java elasticsearch",
"operator": "and"
}
}
}

es转换后的请求体:

1
2
3
4
5
6
7
8
{
"bool": {
"must": [
{ "term": { "title": "java" }},
{ "term": { "title": "elasticsearch" }}
]
}
}

示例三

原请求体:

1
2
3
4
5
6
7
8
{
"match": {
"title": {
"query": "java elasticsearch hadoop spark",
"minimum_should_match": "75%"
}
}
}

es转换后的请求体:

1
2
3
4
5
6
7
8
9
10
11
{
"bool": {
"should": [
{ "term": { "title": "java" }},
{ "term": { "title": "elasticsearch" }},
{ "term": { "title": "hadoop" }},
{ "term": { "title": "spark" }}
],
"minimum_should_match": 3
}
}