美文网首页
ElasticSearch 自定义排序之 field_value

ElasticSearch 自定义排序之 field_value

作者: 我一直都在 | 来源:发表于2022-01-05 13:58 被阅读0次
先上示例
POST /s_person/_search
{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "QQ", 
                    "type": "best_fields", 
                    "fields": ["person_name^3"]
                }
            },
            //  new_score = old_score + log(1 + 1.2 * weight值)
            "field_value_factor": {
                "field": "weight",
                "modifier": "log1p",
                "factor": 1.2, 
                "missing": 1    // 若 weight 字段不存在,则默认为1
            },
            "boost_mode": "sum"
        }
    }
}

1、modifier参数支持的值:

  • none : new_score = old_score * weight值
  • log1p : new_score = old_score * log(1 + weight值)
  • log2p : new_score = old_score * log(2 + weight值)
  • ln : new_score = old_score * ln(weight值)
  • ln1p : new_score = old_score * ln(1 + weight值)
  • ln2p : new_score = old_score * ln(2 + weight值)
  • square : 计算平方
  • sqrt : 计算平方根
  • reciprocal : 计算倒数
    \color{#FF0000}{注意:这里的*是由boost\_mode参数决定的,若是sum,则这里就是+}

2、factor参数

  • factor作为一个调节用的参数,没有modifier那麽强大会改变整个曲线,他仅改变一些常量值,设置factor>1会提昇效果,factor<1会降低效果
  • 假设modifier是log1p,那麽加入了factor的公式就是new_score = old_score * log(1 + factor * weight值)

3、missing参数

  • 当weight字段不存在时,使用配置的默认值,本例子中的 "missing": 1, 表示weight默认值为1

4、boost_mode参数

  • 就算加上了modifier,但是 "全文评分 与 field_value_factor函数值乘积" 的效果可能还是太大,我们可以通过参数boost_mode来决定 old_score 和 加强score 合并的方法
  • 如果将boost_mode改成sum,可以大幅弱化最终效果,特别是使用一个较小的factor时
  • 加入了boost_mode=sum、且factor=0.1的公式变为new_score = old_score + log(1 + 0.1 * weight值)
  • 可选参数有:

multiply:_score乘以函数结果(默认情况)
sum:_score加上函数结果
min:_score和函数结果的较小值
max:_score和函数结果的较大值
replace:将_score替换成函数结果

相关文章

网友评论

      本文标题:ElasticSearch 自定义排序之 field_value

      本文链接:https://www.haomeiwen.com/subject/cabhcrtx.html