Elasticsearch 对结果 function score 排序,为什么很多案例的 modifier 都用 log1p?

2018-08-27 08:47:17 +08:00
 alwayshere

对商品搜索结果进行排序,想让销量高的产品尽量靠前,对 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 到底是哪种最好?

2694 次点击
所在节点    程序员
3 条回复
owenliang
2018-08-27 09:18:16 +08:00
得用 multiple 吧,和相关性做 sum 有啥用,量级都不同。
alwayshere
2018-08-27 09:20:04 +08:00
@owenliang 你指的 multiple 是“ log1p ”还是“ none ”
owenliang
2018-08-27 09:21:29 +08:00
@alwayshere boost mode 呀,不做乘法怎么打压,1 加 0.1 才 1.1,1*0.1 是 0.1。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/483478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX