共用方式為


限制等級排序結果集 (全文檢索搜尋)

CONTAINSTABLEFREETEXTTABLE 函數會傳回名為 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

本節內容