业务排序表达式,主要是对基础排序后召回的结果做进一步排序算分,最终返回最优结果给用户。业务排序表达式允许用户为应用自定义搜索结果排序方式,通过在查询请求中指定表达式来对结果排序。排序表达式支持基本运算(算术运算、关系运算、逻辑运算、位运算、条件运算)、数学函数和排序特征(feature)等。OpenSearch对于几种经典的应用(如论坛、资讯等)提供了表达式模板,用户可根据自己数据的特点,选择合适的表达式模板,并以此为基础进行修改,生成自己的表达式。下文将介绍业务排序中支持的相关函数。
注意:排序表达式中一律使用数值或数值字段类型参与基本运算操作,例如算数,关系,逻辑,条件等运算操作,大部分函数都不支持字符串类型进行运算。
文本相关性
text_relevance : 关键词在字段上的文本匹配度
field_match_ratio: 获取某字段上与查询词匹配的分词词组个数与该字段总词组个数的比值
query_match_ratio :获取查询词中(在某个字段上)命中词组个数与总词组个数的比值
fieldterm_proximity : 用来表示关键词分词词组在字段上的紧密程度
field_length:获取某个字段上的分词词组个数
query_term_count : 返回查询词分词后词组个数
query_term_match_count :获取查询词中(在某个字段上)命中文档的词组个数
field_term_match_count :获取文档中某个字段与查询词匹配的词组个数
query_min_slide_window:查询词在某个字段上命中的分词词组个数与该词组在字段上最小窗口的比值
地理位置相关性
distance : 获取两个点之间的球面距离。一般用于LBS的距离计算。
gauss_decay,使用高斯函数,根据数值和给定的起始点之间的距离,计算其衰减程度
linear_decay,使用线性函数,根据数值和给定的起始点之间的距离,计算其衰减程度
exp_decay,使用指数函数,根据数值和给定的起始点之间的距离,计算其衰减程度
时效性
timeliness : 时效分,用于衡量文档的新旧程度,单位为秒
timeliness_ms : 时效分,用于衡量文档的新旧程度,单位为毫秒
算法相关性
category_score:类目预测函数,返回参数中指定的类目字段与类目预测query的类目匹配分
popularity:人气分,用于衡量物品的受欢迎程度
功能性
tag_match : 用于对查询语句和文档做标签匹配,使用匹配结果对文档进行算分加权
first_phase_score : 获取粗排表达式最终计算分值
kvpairs_value : 获取查询串中kvpairs子句中指定字段的值
normalize :归一化函数,根据不同的算分将数值归一化至[0, 1]
in/notin : 判断字段值是否(不)在指定列表中