自定义rank得益于function score的灵活性,function score 是ES中处理自定义rank的一把利器,它可以为每一份满足query/filter的文档适配一个自定义的function
function score type:
weight,为当前满足文档提供一个简单的翻倍提升,如 score*weight
factor,可以结合文档中的某个字段对score进行提升,如评论数、点击量
decay ,目前支持 linear、exp、gauss,如结合factor 的提升此函数可以结合发布时间和location进行衰减
random ,干扰得分相同的文档,如相同广告位得分的文档在不同用户ui前段展示位置可以不同
script,脚本函数虽然灵活,但不便于管理和维护,这里不建议使用
结论:综上,得出rank提升方案,可调整系数与修正因子控制曲线平滑度
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "汪峰北京演唱会",
"fields": [
"title",
"content"
]
}
},
"field_value_factor": {
"field": "comment_count",
"modifier": "log1p",
"factor": 0.1
},
"functions": [
{
"gauss": {
"pub_time": {
"origin": "2015-12-27",
"scale": "10d",
"offset": "5d",
"decay": 0.5
}
}
},
{
"random_score": {
"seed": "1029"
}
}
],
"boost_mode": "sum",
"max_boost": 1
}
}
}