Share via


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.