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> )
強制型轉值是整數值。
下表描述可用的強制型轉作業設定。
強制型轉作業 | 描述 | 數值範圍 |
---|---|---|
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 )