順位付け結果セットの制限 (フルテキスト検索)
CONTAINSTABLE 関数と FREETEXTTABLE 関数は、0 ~ 1000 の序数値 (順位値) を含む "RANK" 列を返します。これらの値を使用すれば、選択基準への適合度合いに応じて、返された行に順位を付けることができます。この順位値が示しているのは、結果セット内の各行の単なる相対順位であり、値が小さいほど関連性は低くなります。実際の値は重要ではなく、通常はクエリが実行されるたびに変わります。
注意 |
---|
CONTAINS 述語と FREETEXT 述語は順位値を返しません。 |
検索条件と一致するアイテムの数が膨大になることがよくあります。CONTAINSTABLE クエリまたは FREETEXTTABLE クエリから多数の一致結果が返されないようにするには、行のサブセットのみを返す省略可能なパラメータ top_n_by_rank を使用します。top_n_by_rank は整数値です。n は、降順で上位 n 件の一致結果のみを返すことを示します。top_n_by_rank を他のパラメータと組み合わせた場合、クエリから返される行数は、実際にすべての述語に一致する行数より少なくなります。
SQL Server は、一致結果を順位で並べ替え、指定された数の行のみを返します。このオプションを使用すると、パフォーマンスが大幅に向上します。たとえば、通常ならば 100 万行のテーブルから 10 万行を返すクエリに対して、上位 100 行だけを返すように要求すれば、そのクエリの処理が速くなります。
注意 |
---|
フルテキスト検索で順位値を生成する方法については、「検索クエリの結果が順位付けされる方法 (フルテキスト検索)」を参照してください。 |
例
例 A: 上位 3 件の一致結果のみを検索する
次の例では、CONTAINSTABLE を使用して上位 3 件の一致結果のみを返します。
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: 上位 10 件の一致結果を検索する
次の例では、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 関数の結果の順位付けを取り上げます。