RANK BY 子句
如果 SELECT 子句中包含排名數據行,則查詢的結果包括查詢所傳回的數據列,以及每個數據列的排名值。 排名值是由搜尋引擎計算,並以零到 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> )
強制值是整數值。
下表描述可用的強制作業設定。
強制作業 | 描述 | 值範圍 |
---|---|---|
絕對 | 傳回的順位值是強制值中指定的值。 | 0 到 1000 |
加 | 傳回的順位值是原始排名值和指定強制值的總和。 | 0.001 至 1.0 |
乘 | 傳回的順位值是原始排名值和指定強制值的乘積。 | 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 )