排序表达式(Ranking Formula)允许用户为应用自定义搜索结果排序方式,通过在查询请求中指定表达式来对结果排序。排序表达式支持基本运算(算术运算、关系运算、逻辑运算、位运算、条件运算)、数学函数和排序特征(feature)等。Open Search对于几种经典的应用(如论坛、资讯等)提供了表达式模板,用户可根据自己数据的特点,选择合适的表达式模板,并以此为基础进行修改,生成自己的表达式。
在进行相关性排序之前,首先要了解下系统排序策略:通过query等子句找到符合条件的文档后,会进入排序阶段(具体参见sort子句),如果未指定sort子句或者sort子句中显式指定了RANK,那么都将进入到相关性算分阶段。
搜索引擎对于检索性能要求比较高,为此,系统开放了两阶段排序过程:粗排和精排。粗排即是海选,从检索结果中快速找到质量高的文档,取出TOP N个结果再按照精排进行精细算分,最终返回最优的结果给用户。由此可见,粗排对性能影响比较大,精排对最终排序效果影响比较大。因此,粗排要求尽量简单有效,只提取精排中的关键因子即可。
如何设计粗精排公式要取决于实际搜索场景的需求,最佳实践-功能篇有个《相关性实战》的文章,较详细介绍了在几个典型场景下如何来思考和设计排序因子,大家可以参考。
注意
[font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]粗精排表达式中一律使用 数值或数值字段类型 参与基本运算操作,例如算数,关系,逻辑,条件等运算操作,大部分函数都不支持字符串类型进行运算。
[font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]
基本运算
运算 | 运算符 | 说明 |
一元运算 | - | 负号,功能为对某个表达式的值取负值,如-1, -max(width)。 |
算数运算 | +, -, *, / | 如width / 10 |
关系运算 | ==,!= ,>, <, >=, <= | 如width>=400 |
逻辑运算 | and ,or,! | 如width>=400 and height >= 300, !(a > 1 and b < 2) |
位运算 | &, |,^ | 如 3 & (price ^ pubtime) + (price | pubtime) |
条件运算 | if(cond, thenValue, elseValue) | 如果cond的值非0,则该if表达式的实际值为thenValue,否则为elseValue。如if(2, 3, 5)的值为3,if(0, 3, 5)的值为5。(注意:不支持字符串字段类型,如literal或text类型都不支持) |
in 运算 | i in [value1, value2, …, valuen] | 如果i的值在集合[value1, value2, …, valuen]中出现,则该表达式值为1,否则为0。例如: 2 in [2, 4, 6]的值为1,3 in [2, 4, 6]的值为0。 |
函数 | 说明 |
max(a, b) | 取a和b的最大值。 |
min(a, b) | 取a和b的最小值。 |
ln(a) | 对a取自然对数。 |
log2(a) | 对a取以2为底的对数。 |
log10(a) | 对a取以10为底的对数。 |
sin(a) | 正弦函数。 |
cos(a) | 余弦函数。 |
tan(a) | 正切函数。 |
asin(a) | 反正弦函数 |
acos(a) | 反余弦函数 |
atan(a) | 反正切函数。 |
ceil(a) | 对a向上取整,如ceil(4.2)为5。 |
floor(a) | 对a向下取整,如floor(4.6)为4。 |
sqrt(a) | 对a开方,如sqrt(4)为2。 |
pow(a,b) | 返回a的b次幂,如pow(2, 3)为8。 |
now() | 返回当前时间,自Epoch (00:00:00 UTC, January 1, 1970)开始计算,单位是秒。 |
random() | 返回[0, 1]间的一个随机值。 |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。