순위 결과 집합 제한(전체 텍스트 검색)
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는 일치하는 항목을 순위별로 정렬하고 지정한 개수만 반환합니다. 이 방법을 사용하면 성능이 크게 향상됩니다. 예를 들어 1,000,000개의 행이 있는 테이블에서 100,000개의 행을 반환하는 쿼리에 대해 상위 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 함수 결과의 순위 등을 포함하여 전체 텍스트 검색에서 쿼리가 반환하는 순위 값을 생성하는 방법에 대해 설명합니다.