先上示例
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 : 计算倒数
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替换成函数结果