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.