一、题目
索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数
二、思考
通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。其中multi match可以通过参数控制分数。查看官网API 包括五中参数。
其中
-
best_fields:默认,多个字段中,返回评分最高的。
-
most_fields:匹配多个字段,返回的综合评分(非最高分)
-
cross_fields:待查询内容在多个字段中都显示,注意只能用在同种分析器类型字段
三、解题
Step 1、初始化数据
POST task/_bulk
{"create":{"_id":1}}
{"a":"key","b":"mom","c":"mom"}
{"create":{"_id":2}}
{"a":"key","b":"cake mix","c":"mom"}
{"create":{"_id":3}}
{"a":"key","b":"mom","c":"cake mix"}
{"create":{"_id":4}}
{"a":"cake mix","b":"mom","c":"mom"}
Step 2、查询多个字段
multi filed查询参数
-
type:为multi field对匹配评分五种参数
-
fileds:可以使用插入符号(^)增强单个字段
-
tie_breaker:范围为0 ~ 1,如果有值则计算评分为
tie_breaker * _score -
operator:操作符包括and、or,
POST task/_search
{
"query": {
"multi_match": {
"query": "mom",
"fields": ["a","b^2","c"],
"type": "most_fields"
}
}
}
四、总结
- 重点弄清type每种评分类型对应含义
- fileds中若想增强评分使用符合为^
参考资料
- Multi-match query | Elasticsearch Guide [8.1] | Elastic
送一波福利:
福利一
有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!
有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!
有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!
福利二
福利三