Limitar conjuntos de resultados clasificados (búsqueda de texto completo)
Las funciones FREETEXTTABLE y CONTAINSTABLE devuelven una columna denominada RANK que contiene valores ordinales de 0 a 1.000 (valores de clasificación). Estos valores se utilizan para clasificar las filas devueltas en función del grado de coincidencia con los criterios de selección. Los valores de clasificación sólo indican un orden relativo de relevancia de las filas en el conjunto de resultados, con un valor inferior que indica la relevancia menor. Los valores reales carecen de relevancia y normalmente difieren cada vez que se ejecuta la consulta.
Nota
Los predicados CONTAINS y FREETEXT no devuelven ningún valor de clasificación.
El número de elementos que coincide con una condición de búsqueda suele ser muy grande. Para evitar que las consultas CONTAINSTABLE o FREETEXTTABLE devuelvan demasiadas coincidencias, utilice el parámetro top_n_by_rank opcional, que devuelve sólo un subconjunto de filas. top_n_by_rank es un valor entero, n, que especifica que sólo se devuelvan las n coincidencias con la clasificación más alta, en orden descendente. Si se combina top_n_by_rank con otros parámetros, es posible que la consulta devuelva menos filas de las que en realidad coinciden con todos los predicados.
SQL Server ordena las coincidencias por orden de clasificación y devuelve sólo hasta el número especificado de filas. Esta opción puede aumentar significativamente el rendimiento. Por ejemplo, una consulta que por lo general devolvería 100.000 filas de una tabla de 1 millón se procesará de forma más rápida si sólo se solicitan las 100 primeras filas.
Nota
Para obtener información sobre cómo la búsqueda de texto completo genera los valores de clasificación, vea Cómo se clasifican los resultados de la consulta de búsqueda (búsqueda de texto completo).
Ejemplo
Ejemplo A: buscar sólo las tres primeras coincidencias
En el ejemplo siguiente se utiliza CONTAINSTABLE para devolver las tres primeras coincidencias.
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
El conjunto de resultados es el siguiente.
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
Ejemplo B: buscar las diez primeras coincidencias
En este ejemplo se usa CONSTAINSTABLE para devolver la descripción y el nombre de categoría de las 10 categorías superiores de alimentos donde la columna Description contenga las palabras "sweet and savory" cerca de la palabra "sauces" o de la palabra "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
En esta sección
- Cómo se clasifican los resultados de la consulta de búsqueda (búsqueda de texto completo)
Describe el modo en que la búsqueda de texto completo genera los valores de clasificación devueltos por una consulta, incluidos los términos utilizados normalmente y los valores estadísticos que son importantes para realizar la clasificación, los problemas relacionados con el cálculo de la clasificación y la clasificación de los resultados de las funciones FREETEXTTABLE y CONTAINSTABLE.