ES入门五:组合查询-function_score Query

时间:2024-03-05 15:27:57

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。

看看下面这个示例:我想让书本的价格增加,相关性算法相应的降低:
image.png

返回结果:
image.png

算分过程

  1. 价格 x factor(1.2)
  2. 使用reciprocal,类似于 1/x,这里就是 1/(价格 x factor(1.2))
  3. 再使用boost_mode:也就是新分 = 旧分 * 1/(价格 x factor(1.2))

对于boost_mode,它有以下几种:

  • multiply: 算分与函数值的积
  • replace:使用函数值作为最终的结果
  • sum:算分与函数值的和
  • avg:算分与函数值的评分值
  • min:算分与函数值的最小值
  • max:算分与函数值的最大值
random_score