我有两个参数可以根据评分来完成, 1.距离因子,从用户的位置到目的地的位置 2.评级因子,每个目的地都有评级 如果距离系数低于要求的半径(比如5 km),则给予更多的重量。并且评级因子应该与距离得分相乘并且应该计算新的得分。如何在弹性搜索中进行这种评分。
答案 0 :(得分:0)
使用elasticsearch的function_score.Basically函数得分是每种查询/衰变/脚本的单个助推器数组。对于距离你可以使用衰减函数,elasticsearch附带三种类型的衰减线性,指数和高斯衰减与偏移,比例和衰减参数。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
对于评级助推器编写脚本以从doc_values返回评级。 要汇总函数查询中各个助推器的分数,请使用score_mode和boost_mode。
{
"query": {
"function_score": {
"functions": [{
"linear": {
"FIELD": {
"origin": "",
"scale": "",
"offset": ""
}
}
}, {
"script_score": {
"script": "doc['ratinf_field'].value"
}
]
},
"boost_mode": "max",
"score_mode": "multiply"
}
}
希望这适合你。