다음을 통해 공유


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

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

섹션 내용