全部产品

搜索相关性配置

更新时间:2020-08-20 18:12:56

搜索排序相关性概述

搜索引擎对于检索性能要求比较高,为此,系统开放了两阶段排序过程:基础排序和业务排序,即粗排和精排。基础排序即是海选,从检索结果中快速找到质量高的文档,取出TOP N个结果再按照精排进行精细算分,最终返回最优的结果给用户。由此可见,基础排序对性能影响比较大,业务排序对最终排序效果影响比较大。因此,基础排序要求尽量简单有效,只提取业务排序中的关键因子即可。其中,基础排序与业务排序目前均通过排序表达式的方式进行配置。
排序表达式(Ranking Formula)允许用户为应用自定义搜索结果排序方式,通过在查询请求中指定表达式来对结果排序。排序表达式支持基本运算(算术运算、关系运算、逻辑运算、位运算、条件运算)、数学函数和排序特征(feature)等。Open Search对于几种经典的应用(如论坛、资讯等)提供了表达式模板,用户可根据自己数据的特点,选择合适的表达式模板,并以此为基础进行修改,生成自己的表达式。
在进行相关性排序(业务排序)之前,首先要了解下系统排序策略:通过query等子句找到符合条件的文档后,会进入排序阶段(具体参见sort子句),如果未指定sort子句或者sort子句中显式指定了RANK,那么都将进入到相关性算分阶段。
如何设计基础排序和业务排序的表达式要取决于实际搜索场景的需求,最佳实践-功能篇有个《相关性实战》的文章,较详细介绍了在几个典型场景下如何来思考和设计排序因子,大家可以参考。

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

基本运算

运算 运算符 说明
一元运算 - 负号,功能为对某个表达式的值取负值,如-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类、文本类、时效类等,可以用在排序表达式中,相互组合实现强大的相关性排序效果。请在左侧排序配置——>基础排序排序配置——>业务排序导航栏下查看内置特征函数的说明和使用文档。

Cava插件

Cava是OpenSearch引擎团队基于llvm实现的一门高效的编程语言,它的语法和java类似,性能与c++相当。Cava是一门面向对象的编程语言,支持即时编译(jit),支持各种安全检查保证程序更加健壮。
使用cava和OpenSearch提供的cava库,在OpenSearch中可以定制自己的排序插件,相比于OpenSearch支持的表达式,使用cava实现排序插件具有以下优点:

  • 更强的定制能力:cava提供了较表达式更加丰富的语法功能,比如for循环,函数定义,类定义等,用户可以实现自己的业务需求。
  • 更易于维护:cava实现的排序插件比表达式更具有可读性,更易于维护。
  • 更易于接受:cava的语法和java类似,熟悉java的同学很容易使用cava进行开发,学习成本较低。

Cava插件仅支持独享型应用配置。

流程演示

进入策略管理流程

为应用创建排序有两种途径
1.通过主导航栏直接进入,此时需要选择排序创建的应用名及生效的线上/线下版本:
1

2.从应用管理页的“详情”按钮中,进入应用后,再通过左侧导航,直接进入该应用的策略管理配置页:

2
3

创建排序流程

第一步:基本信息。创建排序基本信息,必须设置策略的名称、选择应用范围(基础排序、业务排序)以及类型(非独享型仅支持表达式;独享型还支持Cava插件)
4
第二步:排序配置。选择需要的内置函数,等等。
5
第三步:完成。
6