排序定制允许用户自定义搜索结果排序方式,通过设置初排字段和精细排序表达式,干预最终展示结果的排序。
初级排序定制
- 效果: 配置该字段,即可在用户检索前,预先把数据按照该字段值的优劣进行排序。因此请选择最能代表一条数据优劣的数值字段。
- 作用:因为用户搜索时,对搜索结果进行倒排索引和求交以及相关性计算是一个比较耗时的过程,特别是遇到数据规模很巨大的业务。配置该字段后,可以保证在一定的时间内,尽量召回优质的文档展现给用户。
- 限制:初排字段只能设置为数值类型的字段,不支持其他类型的字段。
- 配置过程:请按照下图进行配置:
【初排字段】可选择一个能代表文档质量的数值字段,用于初排,然后单击【提交】,系统会提示重建索引。若需要关闭初排,可直接选择【关闭】。
索引重建完成后,初级排序立即生效。
说明:如果您有多个配置要修改,建议选择稍后重建,等全部修改完成后,再手动在“数据处理”处单击重建索引,节约费用。
精细排序定制
精细排序是直接影响文档展示顺序的最后一级排序,允许开发者自主对搜索结果进行更个性化整合和混合排序。当前主要考虑了几个维度的混排因子,例如,距离因子、精确匹配因子、城市因子、相关性因子、权威度因子以及各数值域字段因子。
精细排序是二维排序方式,首先根据业务情况把文档界定出几个档位(即优先级,如下图优先级1、2、3),优先级高的数据整体排在优先级低的数据前面,以此类推。
每个优先级都对应一个数据范围表达式,该表达式最终结果为一个 bool 类型的值,计算结果为 true 或者 > 0的结果的所有文档都属于该优先级。
在同一个优先级范围内,通过指定排序因子(可以有多个因子,用下划线_隔开)的方式,决定内部的排序。排序方式为先按照第一个因子大小排序,前一个因子相等的情况下,再通过后一个因子进行排序,以此类推,默认是按照降序排序,如果要按照升序排序,则直接在因子前加一个减号。
例如:
- 最优文档为优先级1的文档,我认为符合精确匹配结果的文档为最优质的文档,则该优先级对应的数据范围表达式为 exactmatch > 0,所有符合该条件的文档都一定会优先于不符合该条件的其他文档,这是一个维度的排序。
- 对于以上符合精确匹配结果的文档,指定按照权威度优先,再按照距离优先进行排序,则排序因子为:
- 【优先级】优先级越靠前,数据越优质,排序越靠前
- 【数据范围】编辑表达式圈出属于该优先级的数据
- 【排序因子】对于同一优先级数据,指定排序因子
排序运算表
数据范围和排序因子支持以下四则运算规则:
分类 | 字段名 | 描述 |
---|---|---|
内置特征字段 | docWeight | 文本相关性分数,用于衡量 query 与文档的匹配度和质量 |
exactmatch | 是否精确匹配,query 和文档是否完全匹配,0或者1 | |
authority | 权威度,业务制定的权威度值 | |
textRelLevel | 文本相关性分档:1:bad、2:normal、3:good、4:perfect | |
业务特征字段 | 所有数值类型字段名 | 所有数值类型字段名 |
内置函数 | distance(xxx,yyy,longitude,latitude) | 计算两点之间的位置距离,xxx、yyy 为文档经纬度值,longitude 和 latitude 为检索 query 的经纬度值 |
max(NA,NB,query_a,…) | 计算最大值 | |
min(NA,NB,query_a,…) | 计算最小值 | |
avg(NA,NB,query_a,…) | 计算平均值 | |
sum(NA,NB,query_a,…) | 计算总和 | |
abs(NA): | 计算绝对值 | |
内置函数 | + - * / | 四则运算 |
==(等于) !=(不等于) >(大于) <(小于) >=(大于等于) <=(小于等于) | 关系运算符 |