使用 function score query,可以修改文档的相关性算分 (query score),根据新得到的算分排序。
目录
Function Score Query
案例
Function Score Query
几种默认的计算分值的函数:
- Weight:为每一个文档设置一个简单而不被规范化的权重
- Field Value Factor:使用该数值来修改_socre,例如将"热度"和"点赞数"作为算分的参考因素
- Random Score:为每一个用户使用一个不同的,随机算分结果
- 衰减函数:以某个字段的值为标准,距离某个值越近,得分越高
- Script Score:自定义脚本完全控制所需逻辑
GET /hotel/_search
{
"query":{
"function_score": {
"query": { "match": { "al":"外滩" } }, //原始查询条件,搜索文档并根据相关性打分(query score)
"functions":[
{
"filter": { "term" : { "id":"1" }}, //过滤条件,符合条件的文档才会被重新算分"weight":10 // 算分函数,算分函数的结果称为function score,将来会与queryscore运算,得到新算分,常见的算分函数有:
weight:给一个常量值,作为函数结果 (function score);
field_value_factor:用文档中的某个字段值作为函数结果;
random_score:随机生成一个值,作为函数结果;
script_score:自定义计算公式,公式结果作为函数结果;
}
],
"boost_mode": "multiply" //加权模式,定义function score与query score的运算方式,包括:multiply:两者相乘。默认。
replace:用function store 春换query score
其它:sum、avg、max、min
}
}
}
案例
题目1:给“如家”这个品牌的酒店排名靠前一些 ?
分析如下
- 哪些文档需要算分加权?
品牌为如家的酒店
- 算分函数是什么?
weight就可以
- 加权模式是什么?
求和
代码示例
GET /hotel/_search
{
"query":{
"function_score": {
"query":{ //... },
"functions" : [ // 算分函数
{"filter": { // 满足的条件,品牌必须是如家
"term": {
"brand":"如家"
}
},
"weight" : 2 // 算分权重为2
}
],
"boost_mode":"sum" // 求和}
}
}