V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alwayshere
V2EX  ›  程序员

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

  •  
  •   alwayshere · 2018-08-27 08:47:17 +08:00 · 2693 次点击
    这是一个创建于 2291 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    3 条回复    2018-08-27 09:21:29 +08:00
    owenliang
        1
    owenliang  
       2018-08-27 09:18:16 +08:00 via Android
    得用 multiple 吧,和相关性做 sum 有啥用,量级都不同。
    alwayshere
        2
    alwayshere  
    OP
       2018-08-27 09:20:04 +08:00
    @owenliang 你指的 multiple 是“ log1p ”还是“ none ”
    owenliang
        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。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3524 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:08 · PVG 19:08 · LAX 03:08 · JFK 06:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.