
对商品搜索结果进行排序,想让销量高的产品尽量靠前,对 ES 的结果进行 function score 排序,很多类似的案例采用的 modifier 都是 log1p,比如: 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 年 8 月 27 日 via Android 得用 multiple 吧,和相关性做 sum 有啥用,量级都不同。 |
2 alwayshere OP @owenliang 你指的 multiple 是“ log1p ”还是“ none ” |
3 owenliang 2018 年 8 月 27 日 via Adroid @alwayshere boost mode 呀,不做乘法怎么打压,1 加 0.1 才 1.1,1*0.1 是 0.1。 |