Limitation des jeux de résultats classés (recherche en texte intégral)

Les fonctions CONTAINSTABLE et FREETEXTTABLE retournent une colonne appelée RANK qui contient des valeurs ordinales comprises entre 0 et 1 000 (valeurs de classement). Ces valeurs servent à établir le rang des lignes retournées en fonction de leur correspondance par rapport aux critères de sélection. Les valeurs de classement indiquent uniquement un ordre relatif de pertinence pour les lignes du jeu de résultats. Une valeur inférieure indique une pertinence plus faible. Les valeurs réelles sont sans importance et sont généralement différentes d'une exécution de requête à une autre.

[!REMARQUE]

Les prédicats CONTAINS et FREETEXT ne retournent aucune valeur de rang.

Le nombre d'éléments répondant à une condition de recherche est souvent très élevé. Pour empêcher les requêtes CONTAINSTABLE ou FREETEXTTABLE de retourner un nombre trop élevé de correspondances, utilisez le paramètre facultatif top_n_by_rank, qui retourne uniquement un sous-ensemble de lignes. top_n_by_rank est une valeur entière, n, qui spécifie que seules les n correspondances de classement le plus élevé doivent être retournées, en ordre décroissant. Si top_n_by_rank est associé à d'autres paramètres, la requête peut renvoyer moins de lignes que le nombre de lignes correspondant effectivement à tous les prédicats.

SQL Server classe les correspondances par rang et ne retourne au maximum que le nombre de lignes spécifié. Ce choix peut considérablement améliorer les performances. Par exemple, une requête qui doit normalement retourner 100 000 lignes d'une table en comprenant 1 million est traitée plus rapidement si seules les 100 premières lignes sont demandées.

[!REMARQUE]

Pour plus d'informations sur la façon dont la recherche en texte intégral génère les valeurs de classement, consultez Classement des résultats d'une requête de recherche (Recherche en texte intégral).

Exemple

Exemple A : recherche des trois premières correspondances uniquement

L'exemple suivant utilise CONTAINSTABLE pour retourner uniquement les trois premières correspondances.

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

Voici l'ensemble des résultats.

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     

Exemple B : recherche des dix premières correspondances

L'exemple suivant utilise CONTAINSTABLE pour retourner la description et le nom de catégorie des 10 premières catégories de produits alimentaires dont la colonne Description contient les mots « sweet and savory » à proximité du mot « 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

Dans cette section

  • Classement des résultats d'une requête de recherche (Recherche en texte intégral)
    Décrit comment la recherche en texte intégral génère les valeurs de classement retournées par une requête, y compris des termes et des valeurs statistiques fréquemment utilisés qui sont d'une grande importance dans le calcul du classement, pour les problèmes de calcul de classement et pour le classement des résultats des fonctions CONTAINSTABLE et FREETEXTTABLE.