全部产品
开放搜索

搜索相关性配置

更新时间:2017-06-20 10:06:17   分享:   

排序表达式(Ranking Formula)允许用户为应用自定义搜索结果排序方式,通过在查询请求中指定表达式来对结果排序。排序表达式支持基本运算(算术运算、关系运算、逻辑运算、位运算、条件运算)、数学函数和排序特征(feature)等。Open Search对于几种经典的应用(如论坛、资讯等)提供了表达式模板,用户可根据自己数据的特点,选择合适的表达式模板,并以此为基础进行修改,生成自己的表达式。

在进行相关性排序之前,首先要了解下系统排序策略:通过query等子句找到符合条件的文档后,会进入排序阶段(具体参见sort子句),如果未指定sort子句或者sort子句中显式指定了RANK,那么都将进入到相关性算分阶段。

搜索引擎对于检索性能要求比较高,为此,系统开放了两阶段排序过程:粗排和精排。粗排即是海选,从检索结果中快速找到质量高的文档,取出TOP N个结果再按照精排进行精细算分,最终返回最优的结果给用户。由此可见,粗排对性能影响比较大,精排对最终排序效果影响比较大。因此,粗排要求尽量简单有效,只提取精排中的关键因子即可。

如何设计粗精排公式要取决于实际搜索场景的需求,最佳实践-功能篇有个《相关性实战》的文章,较详细介绍了在几个典型场景下如何来思考和设计排序因子,大家可以参考。

注意

粗精排表达式中一律使用 数值或数值字段类型 参与基本运算操作,例如算数,关系,逻辑,条件等运算操作,大部分函数都不支持字符串类型进行运算。

基本运算

运算 运算符 说明
一元运算 - 负号,功能为对某个表达式的值取负值,如-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]间的一个随机值。

内置特征函数

OpenSearch提供了丰富的内置特征函数,如LBS类、文本类、时效类等,可以用在排序表达式中,相互组合实现强大的相关性排序效果。

流程演示

  1. 主界面:

  2. 添加新粗排表达式或编辑现有表达式

  3. 添加新精排表达式或编辑现有表达式
    编辑表达式内容

  4. 完成

本文导读目录
本文导读目录
以上内容是否对您有帮助?