Compartilhar via


Limitando conjuntos de resultados classificados (Pesquisa de Texto Completo)

As funções CONTAINSTABLE e FREETEXTTABLE retornam uma coluna chamada RANK que contém valores ordinais de 0 a 1000 (valores de classificação). Esses valores são usados para classificar as linhas retornadas de acordo com o grau de correspondência com os critérios de seleção. Os valores de classificação indicam apenas uma ordem relativa de relevância das linhas no conjunto de resultados, sendo que um valor inferior indica menor relevância. Os valores reais não são importantes e geralmente são diferentes em cada execução da consulta.

ObservaçãoObservação

Os predicados CONTAINS e FREETEXT não retornam valores de classificação.

O número de itens que correspondem a uma condição de pesquisa geralmente é muito grande. Para impedir que consultas CONTAINSTABLE ou FREETEXTTABLE retornem um número excessivo de correspondências, use o parâmetro top_n_by_rank opcional, que retorna apenas um subconjunto de linhas. top_n_by_rank é um valor inteiro, n, que especifica que somente as n correspondências mais bem classificadas serão retornadas, em ordem decrescente. Se top_n_by_rank for combinado com outros parâmetros, a consulta retornará menos linhas do que o número de linhas que corresponde de fato a todos os predicados.

O SQL Server ordena as correspondências por classificação e retorna somente o número especificado de linhas. Essa opção pode resultar em um aumento significativo no desempenho. Por exemplo, uma consulta que normalmente retornaria 100.000 linhas de uma tabela de um milhão de linhas será processada muito mais rapidamente se apenas as 100 principais linhas forem solicitadas.

ObservaçãoObservação

Para obter informações sobre como a pesquisa de texto completo gera os valores de classificação, consulte Como os resultados de consultas de pesquisa são classificados (Pesquisa de Texto Completo).

Exemplo

Exemplo A: Pesquisando apenas as três correspondências principais

O exemplo a seguir usa CONTAINSTABLE para retornar apenas as três correspondências principais.

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

Conjunto de resultados.

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     

Exemplo B: Pesquisando apenas as dez correspondências principais

O exemplo a seguir retorna usa CONTAINSTABLE para retornar a descrição e o nome das 10 principais categorias de alimentos cuja coluna Description contém as palavras "sweet e savory" próximo à palavra "sauces" ou "candies".

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

Nesta seção