对商品搜索结果进行排序,想让销量高的产品尽量靠前,对 ES 的结果进行 function score 排序,很多类似的案例采用的 modifier 都是 log1p,比如: https://www.v2ex.com/t/464592#reply4, 或者: https://www.scienjus.com/elasticsearch-function-score-query/#field-value-factor 这篇文章的描述:
{
"query": {
"function_score": {
"query": {
"match": {
"title": "雨伞"
}
},
"field_value_factor": {
"field": "sales",
"modifier": "log1p",
"factor": 0.1
},
"boost_mode": "sum"
}
}
}
我理解的可能是对数函数随着值增大曲线逐渐变得平缓,这样逐渐让热门商品不再靠前,尽量给有潜力的产品一些靠前的机会吧?对吗?
但是我在实际部署中,log1p 对搜索结果排序没有影响,一种类型的商品,销量最大为 5000 件,最小为 0 件,设置"modifier": "log1p","factor": 0.1,"boost_mode": "sum",几乎不影响原来的排序,把 factor 设置为 10,100,1000 都是一样的排序,这是怎么回事?
所以我最后设置"modifier": "none",factor 逐渐微调出一个兼顾销量和相关度的值,感觉还挺合适的,搜索任何商品都能兼顾销量和相关度,所以就纳闷了,这个 modifier 到底是哪种最好?
1
owenliang 2018-08-27 09:18:16 +08:00 via Android
得用 multiple 吧,和相关性做 sum 有啥用,量级都不同。
|
2
alwayshere OP @owenliang 你指的 multiple 是“ log1p ”还是“ none ”
|
3
owenliang 2018-08-27 09:21:29 +08:00 via Android
@alwayshere boost mode 呀,不做乘法怎么打压,1 加 0.1 才 1.1,1*0.1 是 0.1。
|