限制等級排序結果集 (全文檢索搜尋)
CONTAINSTABLE 和 FREETEXTTABLE 函數會傳回名為 RANK 的資料行,其中包含 0 到 1000 (等級值) 的序數值。這些值的用途,在根據資料列符合選取準則的程度予以分級。等級值僅表示結果集中資料列相關性的相對順序,其值越低表示相關性越低。實際的值並不重要,而且每次執行查詢後該值通常會不一樣。
[!附註]
CONTAINS 與 FREETEXT 述詞不會傳回任何等級值。
符合搜尋條件的項目數通常會非常龐大。若要防止 CONTAINSTABLE 或 FREETEXTTABLE 查詢傳回太多相符項目,請使用選擇性 top_n_by_rank 參數,以便僅傳回資料列的子集。top_n_by_rank 是整數值 n,其中指定依遞減順序傳回 n 個最高等級的相符項目。如果結合 top_n_by_rank 與其他參數,則查詢所傳回的資料列數會少於實際相符所有述詞的資料列數。
SQL Server 將依照等級來排序相符項目,並且最多只傳回指定的資料列數。此選項可能大幅地增加效能。例如,通常從一百萬個資料列中傳回 100,000 列的查詢,如果只要求前 100 個資料列的話,就會處理得更為快速。
[!附註]
如需有關全文檢索搜尋如何產生次序值的詳細資訊,請參閱<搜尋查詢結果如何排序等級 (全文檢索搜尋)>。
範例
範例 A:只搜尋前三個相符項目
下列範例會使用 CONTAINSTABLE,以便只傳回前三個相符項目。
USE Northwind;
GO
SELECT K.RANK, CompanyName, ContactName, Address
FROM Customers AS C
INNER JOIN
CONTAINSTABLE(Customers,Address, 'ISABOUT ("des*",
Rue WEIGHT(0.5),
Bouchers WEIGHT(0.9))', 3) AS K
ON C.CustomerID = K.[KEY];
GO
以下為結果集:
RANK CompanyName ContactName address
---- ------------ ----------- -------
123 Bon app' Laurence Lebihan 12, rue des Bouchers
65 Du monde entier Janine Labrune 67, rue des Cinquante Otages
15 France restauration Carine Schmitt 54, rue Royale
範例 B:搜尋前十個相符項目
下列範例會使用 CONTAINSTABLE 傳回 Description 資料行在 "sauces" 或 "candies" 字附近包含 "sweet and savory" 等字的前 10 個食物類別目錄的描述和類別目錄名稱。
SELECT FT_TBL.Description,
FT_TBL.CategoryName,
KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
CONTAINSTABLE (Categories, Description,
'("sweet and savory" NEAR sauces) OR
("sweet and savory" NEAR candies)'
, 10
) AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
本節內容
- 搜尋查詢結果如何排序等級 (全文檢索搜尋)
描述全文檢索搜尋如何產生查詢所傳回的等級值,包括計算等級時常用的重要詞彙與統計資料值、等級計算問題,以及 CONTAINSTABLE 與 FREETEXTTABLE 函數結果的等級。