写在前面
在这篇文章 我们看了使用dis_max
查询来进行单值多字段场景下的查询,如下:
POST /blogs/_search
{
"query": {
"dis_max": {
"queries": [
{
"match": {
"title": "Brown fox"
}
},
{
"match": {
"body": "Brown fox"
}
}
]
}
}
}
这里不知道你注意到没有,Brown fox
我们重复写了N遍,即要查询的字段越多则重复写的次数也越多,想要解决这个问题,就可以使用本文要学习的multi_match了。
1:multi_match的三种方式
1.1:best_field
这种方式使用每个文档中字段的最高得分作为最终得分进行匹配,这和dis max query 是一样的效果,如下的查询:
DELETE blogs
PUT /blogs/_doc/1
{
"title": "Quick brown rabbits",
"body": "Brown rabbits are commonly seen."
}
PUT /blogs/_doc/2
{
"title": "Keeping pets healthy",
"body": "My quick brown fox eats rabbits on a regular basis"
}
POST /blogs/_search
{
"query": {
"dis_max": {
"tie_breaker": 0,
"queries": [
{
"match": {
"title": "Brown fox"
}
},