function_score Query允许你在查询结束以后去修改每一个匹配文档的相关性算法,所以使用算分函数可以改变或者替换原来的相关性算分结果
function_score Query提供一下几个算分函数:
- script_score:利用自定义的脚本完全控制算分逻辑
- weight:为每一个文档设置一个简单并且不会被规范化的权重
- random_score: 为每个用户提供一个不同的随机算分,对结果进行排序
- field_value_factor:使用文档字段的值来影响算分,例如将好评数量作为这个字段考虑因素
- decay functions: 衰减函数,以某个字段的值为标准,距离指定值越近,算分越高。例如我想要让书本价格越接近10元,算分越高排序越靠前
field_value_factor
field_value_factor的作用是用文档某个字段的值来影响相关性算分,其可以解决这样的需求:价格优惠的优先推荐,点赞数多的优点推荐、购买量多的优先推荐等
field_value_factor提供了以下几个参数选项:
- field:文档的字段
- factor:指定文档的值会乘以这个因子,默认为1
- modifier:修改最终值的函数,其值可以为:none、log、log1p、log2p、ln、ln1p、ln2p、square、 sqrt、reciprocal,默认为 none。
看看下面这个示例:我想让书本的价格增加,相关性算法相应的降低:
返回结果:
算分过程
- 价格 x factor(1.2)
- 使用reciprocal,类似于 1/x,这里就是 1/(价格 x factor(1.2))
- 再使用boost_mode:也就是新分 = 旧分 * 1/(价格 x factor(1.2))
对于boost_mode,它有以下几种:
- multiply: 算分与函数值的积
- replace:使用函数值作为最终的结果
- sum:算分与函数值的和
- avg:算分与函数值的评分值
- min:算分与函数值的最小值
- max:算分与函数值的最大值