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çã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çã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
Aqui está o 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
- Como os resultados de consultas de pesquisa são classificados (Pesquisa de Texto Completo)
Descreve como a pesquisa de texto completo gera os valores de classificação retornados por uma consulta, incluindo termos normalmente usados e valores estatísticos que são importantes para calcular a classificação, problemas de cálculo de classificação e a classificação de resultados das funções CONTAINSTABLE e FREETEXTTABLE.