阅读本文需要先了解function_score的相关知识,请看 ElasticSearch - function_score 简介
如果我们只是使用一个 filter 排除所有市中心方圆 100 米以外的酒店,再用一个filter排除每晚价格超过100元的酒店,这种作法太过强硬,可能有一间房在 500米,但是超级便宜一晚只要10元,用户可能会因此愿意妥协住这间房
为了解决这个问题,因此function_score查询提供了一组 衰减函数 (decay functions), 让我们有能力在两个滑动标准(如地点和价格)之间权衡
function_score支持的衰减函数有三种,分别是 linear、exp 和 gauss
linear、exp、gauss三种衰减函数的差别只在于衰减曲线的形状,在DSL的语法上的用法完全一样
linear : 线性函数是条直线,一旦直线与横轴0香蕉,所有其他值的评分都是0
exp : 指数函数是先剧烈衰减然后变缓
guass(最常用) : 高斯函数则是钟形的,他的衰减速率是先缓慢,然后变快,最后又放缓
衰减函数们 (linear、exp、gauss) 支持的参数
origin
: 中心点,或是字段可能的最佳值,落在原点(origin)上的文档评分_score
为满分1.0,支持数值、时间 以及 "经纬度地理座标点"(最常用) 的字段offset
: 从 origin 为中心,为他设置一个偏移量offset覆盖一个范围,在此范围内所有的评分_score
也都是和origin一样满分1.0