RANK BY 子句
如果 SELECT 子句中包含排名列,则查询的结果包括查询返回的行和每行的排名值。 排名值由搜索引擎计算,并在 0 到 1000 范围内以整数的形式返回。 为了使排名结果更有意义,查询可以控制如何在 RANK BY 子句中计算原始排名值。
本主题的组织方式如下:
RANK BY 子句
RANK BY 子句的语法如下所示:
WHERE ( <search_condition> )
RANK BY [ ( ] <rank_specification> [ ) ]
RANK BY 子句应用于紧靠其前面的search_condition,从而有效地指定该搜索条件返回的行的级别低于或高于另一个搜索条件返回的行。 需要search_condition周围的括号。 排名规范周围的括号是可选的。
可以将多个 RANK BY 子句应用于单个条件。 可以使用括号逐个包含其他 RANK BY 子句。
注意
全文谓词返回 0 到 1000 范围内的排名值。 非全文谓词匹配的所有文档的排名值为 1000。 对排名值的修改应考虑到此信息。
RANKBY 子句的rank_specification部分标识要应用于排名值的一个或多个函数。 WEIGHT 函数将乘数应用于返回行的原始排名值。 乘数越小,生成的排名值越低。 COERCION 函数可用于为返回的行相乘、加法或设置特定的排名值。 每个排名规范可以包括零或一个 WEIGHT 函数以及零个或多个 COERCION 函数。 如果 RANK BY 子句中同时包含 WEIGHT 和 COERCION 函数,则 WEIGHT 函数必须排在第一位。
WEIGHT 函数
WEIGHT 函数的语法为:
WEIGHT ( <weight_multipler> )
乘数必须是 0.001 到 1.000 之间的小数。 搜索条件谓词返回的原始排名值乘以权重乘数,以设置新的排名值。
在以下示例中,WEIGHT 函数为 System.Document.LastAuthor 字段中带有“Theresa”一词的文档提供 System.Author 字段中带有“Theresa”的文档的排名值的一半:
WHERE CONTAINS ( System.Author,'"Theresa"' )
RANK BY WEIGHT ( 1.000 )
OR
CONTAINS ( System.Document.LastAuthor,'"Theresa"' )
RANK BY WEIGHT ( 0.500 )
注意
CONTAINS 和 FREETEXT 谓词列权重功能支持在搜索词和乘数 (“software”:0.25) 之间使用冒号的速记格式。 RANK BY 子句不支持缩短格式。
使用 RANK BY WEIGHT 时有一个限制:它不适用于使用布尔条件的 CONTAINS 子句;例如,不允许使用以下示例:
CONTAINS ( System.Author,'"Theresa" OR "Teresa"' ) RANK BY WEIGHT ( 0.400 )
COERCION 函数
秩强制函数可用于通过加法或乘法或通过为其分配特定值来更改返回的排名值。
COERCION 函数的语法为:
COERCION ( <coercion_operation> , <coercion_value> )
强制值为整数值。
下表描述了可用的强制操作设置。
强制操作 | 说明 | 取值范围 |
---|---|---|
ABSOLUTE | 返回的排名值是在强制值中指定的值。 | 0 到 1000 |
ADD | 返回的排名值是原始排名值和指定强制值的总和。 | 0.001 到 1.0 |
MULTIPLY | 返回的排名值是原始排名值和指定强制值的乘积。 | 0.001 到 1.0 |
重要
搜索只能返回 0 到 1000 范围内的排名值。
以下示例使用 COERCION 函数将标题中包含“computer”的所有文档设置为 1000,同时将标题中包含“computer”和“software”的文档的排名减少四分之一。
WHERE CONTAINS ( System.Title, 'computer' )
RANK BY COERCION ( ABSOLUTE , 1000 )
OR
CONTAINS ( System.Title, '"computer" AND "software"' )
RANK BY COERCION ( MULTIPLY, 0.750 )