Share via


순위 결과 집합 제한(전체 텍스트 검색)

CONTAINSTABLEFREETEXTTABLE 함수는 0부터 1000까지의 서수 값(순위 값)이 포함된 RANK라는 열을 반환합니다. 이러한 값은 반환된 행이 선택 조건에 얼마나 일치하는지에 따라 순위를 매기는 데 사용됩니다. 순위 값은 결과 집합에 포함된 행의 관련성을 나타내는 상대적 순서일 뿐이며 값이 작을수록 관련이 없는 것입니다. 실제 값은 중요하지 않으며 일반적으로 쿼리가 실행될 때마다 달라집니다.

[!참고]

CONTAINS 및 FREETEXT 조건자는 순위 값을 반환하지 않습니다.

검색 조건과 일치하는 항목 수는 종종 매우 많습니다. CONTAINSTABLE 또는 FREETEXTTABLE 쿼리가 반환하는 일치하는 항목 수를 줄이려면 행의 하위 집합만 반환하는 선택적 top_n_by_rank 매개 변수를 사용합니다. top_n_by_rank는 내림차순으로 상위 n개의 일치하는 항목만 반환되도록 지정하는 정수 값 n입니다. top_n_by_rank를 다른 매개 변수와 함께 사용하면 실제로 모든 조건자와 일치하는 행 수보다 적은 수의 행이 반환될 수 있습니다.

SQL Server는 일치하는 항목을 순위별로 정렬하고 지정한 개수만 반환합니다. 이 방법을 사용하면 성능이 크게 향상됩니다. 예를 들어 1,000,000개의 행이 있는 테이블에서 100,000개의 행을 반환하는 쿼리에 대해 상위 100개의 행만 요청하면 쿼리가 훨씬 빨리 처리됩니다.

[!참고]

전체 텍스트 검색에서 순위 값을 생성하는 방법은 검색 쿼리 결과의 순위를 지정하는 방법(전체 텍스트 검색)을 참조하십시오.

예 1: 상위 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     

예 2: 상위 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

섹션 내용