对商品搜索结果进行排序,想让销量高的产品尽量靠前,对 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 到底是哪种最好?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.