Exécuter une requête avec une recherche en texte intégral

Pour définir des recherches en texte intégral, les requêtes de texte intégral de SQL Server utilisent les prédicats de texte intégral (CONTAINS et FREETEXT) et les fonctions de texte intégral (CONTAINSTABLE et FREETEXTTABLE). Ces derniers prennent en charge la syntaxe Transact-SQL enrichie qui accepte divers formulaires de termes de requête. Pour écrire des requêtes de texte intégral, vous devez apprendre quand et comment utiliser ces prédicats et ces fonctions.

Dans cette rubrique

  • Vue d'ensemble des prédicats de texte intégral (CONTAINS et FREETEXT)

  • Vue d'ensemble des fonctions de texte intégral (CONTAINSTABLE et FREETEXTTABLE)

  • Utilisation des opérateurs booléens AND, OR, AND NOT dans CONTAINS et CONTAINSTABLE

  • Considérations supplémentaires pour les requêtes de texte intégral

  • Exécution de requêtes sur des colonnes varbinary(max) et xml

  • Formulaires de termes de requête pris en charge

  • Affichage du résultat de la segmentation du texte en unités lexicales pour une combinaison d'analyseur lexical, de dictionnaire des synonymes et de liste de mots vides

Vue d'ensemble des prédicats de texte intégral (CONTAINS et FREETEXT)

Les prédicats CONTAINS et FREETEXT retournent une valeur TRUE ou FALSE. Ils peuvent être utilisés uniquement pour spécifier des critères de sélection permettant de déterminer si une ligne donnée correspond à la requête de texte intégral. Les lignes correspondantes sont retournées dans le jeu de résultats. CONTAINS et FREETEXT sont spécifiés dans la clause WHERE ou HAVING d'une instruction SELECT. Ils peuvent être associés à l'un quelconque des autres prédicats Transact-SQL tels que LIKE et BETWEEN.

[!REMARQUE]

Pour plus d'informations sur la syntaxe et les arguments de ces prédicats, consultez CONTAINS (Transact-SQL) et FREETEXT (Transact-SQL).

Lorsque vous utilisez CONTAINS ou FREETEXT, vous pouvez spécifier une colonne unique, une liste de colonnes, ou toutes les colonnes de la table sur laquelle porte la recherche. Vous pouvez éventuellement spécifier la langue dont les ressources seront utilisées par une requête de texte intégral donnée pour l'analyse lexicale et la recherche de radical, les consultations de dictionnaire des synonymes et la suppression de mots parasites.

Les prédicats CONTAINS et FREETEXT sont utiles pour différents types de correspondance, comme expliqué ci-après.

  • Utilisez CONTAINS (ou CONTAINSTABLE) pour des concordances précises ou approximatives (moins précises) avec des mots isolés ou des expressions, des répétitions ou des concordances pondérées. Lorsque vous utilisez CONTAINS, vous devez spécifier au moins une condition de recherche qui indique le texte que vous recherchez ainsi que les conditions qui déterminent les correspondances.

    Vous pouvez utiliser une opération logique entre les conditions de recherche. Pour plus d'informations, consultez la section Utilisation des opérateurs booléens AND, OR, AND NOT (dans CONTAINS et CONTAINSTABLE), présentée ultérieurement dans cette rubrique.

  • Utilisez FREETEXT (ou FREETEXTTABLE) pour rechercher des correspondances de signification, et non pas le libellé exact, des mots, expressions ou phrases spécifiés (chaîne en texte libre). Des correspondances sont générées si un terme ou une forme de quelque terme que ce soit est trouvé dans l'index de recherche en texte intégral d'une colonne spécifiée.

Vous pouvez utiliser un nom en quatre parties dans le prédicat CONTAINS ou FREETEXT pour interroger les colonnes indexées de texte intégral des tables cibles d'un serveur lié. Pour préparer un serveur distant à recevoir des requêtes de texte intégral, créez un index de recherche en texte intégral sur les tables et colonnes cibles du serveur distant, puis ajoutez le serveur distant comme serveur lié.

[!REMARQUE]

Les prédicats de texte intégral ne sont pas autorisés dans la clause OUTPUT lorsque le niveau de compatibilité de la base de données a la valeur 100.

[Haut de la page]

Exemples

A.Utilisation de CONTAINS avec <simple_term>

L'exemple ci-dessous recherche tous les produits qui contiennent le mot "Mountain" et qui coûtent $80.99.

USE AdventureWorks2012
GO

SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
   AND CONTAINS(Name, 'Mountain')
GO

B.Utilisation de FREETEXT pour rechercher des mots contenant les valeurs de caractère spécifiées

L'exemple suivant recherche tous les documents contenant les mots liés à « vital », « safety » et « components ».

USE AdventureWorks2012
GO

SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components')
GO

[Haut de la page]

Vue d'ensemble des fonctions de texte intégral (CONTAINSTABLE et FREETEXTTABLE)

Les fonctions CONTAINSTABLE et FREETEXTTABLE sont référencées comme un nom de table régulier dans la clause FROM d'une instruction SELECT. Ils retournent une table contenant aucune, une ou plusieurs ligne(s) correspondant à la requête de texte intégral. La table retournée contient uniquement les lignes de la table de base qui correspondent aux critères de sélection spécifiés dans la condition de recherche en texte intégral de la fonction.

[!REMARQUE]

Pour plus d'informations sur la syntaxe et les arguments de ces fonctions, consultez CONTAINSTABLE (Transact-SQL) et FREETEXTTABLE (Transact-SQL).

Les requêtes utilisant l'une de ces fonctions retournent une valeur de classement de pertinence (RANK) et une clé de texte intégral (KEY) pour chaque ligne, comme suit :

  • KEY (colonne)

    La colonne KEY retourne les valeurs uniques des lignes retournées. La colonne KEY peut être utilisée pour spécifier des critères de sélection.

  • RANK (colonne)

    La colonne RANK retourne une valeur de classement pour chaque ligne qui indique le degré de correspondance de cette dernière avec les critères de sélection. Plus la valeur de classement du texte ou document d'une ligne est élevée, plus celle-ci est pertinente pour la requête de texte intégral. Notez que différentes lignes peuvent avoir le même classement. Vous pouvez limiter le nombre de correspondances à retourner en spécifiant le paramètre facultatif top_n_by_rank. Pour plus d'informations, consultez Limiter les résultats de la recherche avec RANK.

Lorsque vous utilisez l'une ou l'autre de ces fonctions, vous devez spécifier la table de base sur laquelle doit porter la recherche en texte intégral. Comme avec les prédicats, vous pouvez spécifier une colonne unique, une liste de colonnes, ou toutes les colonnes de la table sur laquelle doit porter la recherche, et éventuellement, la langue dont les ressources seront utilisées par une requête de texte intégral donnée.

CONTAINSTABLE est utile pour les mêmes types de correspondance que CONTAINS, et FREETEXTTABLE est utile pour les mêmes types de correspondance que FREETEXT. Pour plus d'informations, consultez Vue d'ensemble des prédicats de texte intégral (CONTAINS et FREETEXT), plus haut dans cette rubrique. Lors de l'exécution de requêtes utilisant les fonctions CONTAINSTABLE et FREETEXTTABLE, vous devez joindre de manière explicite les lignes retournées aux lignes de la table de base SQL Server.

En général, le résultat des fonctions CONTAINSTABLE ou FREETEXTTABLE doit être joint avec la table de base. Dans ce cas-là, vous devez connaître le nom de la colonne clé unique. Cette colonne, qui est présente dans toutes les tables activées pour la recherche en texte intégral, est utilisée pour garantir l'unicité des lignes de la table (colonne clé unique). Pour plus d'informations, consultez Gérer les index de recherche en texte intégral.

[Haut de la page]

Exemples

A.Utilisation de CONTAINSTABLE

L'exemple suivant retourne l'ID de description et la description de tous les produits dont la colonne Description contient le mot « aluminum » à proximité du mot « light » ou du mot « lightweight ». Seules les lignes dont la valeur de classement est supérieure ou égale à 2 sont renvoyées.

USE AdventureWorks2012
GO

SELECT FT_TBL.ProductDescriptionID,
   FT_TBL.Description, 
   KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL INNER JOIN
   CONTAINSTABLE (Production.ProductDescription,
      Description, 
      '(light NEAR aluminum) OR
      (lightweight NEAR aluminum)'
   ) AS KEY_TBL
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEY_TBL.RANK DESC;
GO

B.Utilisation de FREETEXTTABLE

L'exemple ci-après étend une requête FREETEXTTABLE afin de retourner en premier les lignes dont le niveau de classement est le plus élevé et d'ajouter le classement de chaque ligne à la liste de sélection. Pour spécifier la requête, il faut savoir que ProductDescriptionID est la colonne clé unique de la table ProductDescription.

USE AdventureWorks2012
GO

SELECT KEY_TBL.RANK, FT_TBL.Description
FROM Production.ProductDescription AS FT_TBL 
     INNER JOIN
     FREETEXTTABLE(Production.ProductDescription, Description,
                    'perfect all-around bike') AS KEY_TBL
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO

Voici l'extension de la même requête qui renvoie uniquement les lignes avec une valeur de rang égale ou supérieure à 10 :

USE AdventureWorks2012
GO

SELECT KEY_TBL.RANK, FT_TBL.Description
FROM Production.ProductDescription AS FT_TBL 
     INNER JOIN
     FREETEXTTABLE(Production.ProductDescription, Description,
                    'perfect all-around bike') AS KEY_TBL
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK >= 10
ORDER BY KEY_TBL.RANK DESC
GO

[Haut de la page]

Utilisation des opérateurs booléens AND, OR, AND NOT dans CONTAINS et CONTAINSTABLE

Le prédicat CONTAINS et la fonction CONTAINSTABLE utilisent les mêmes conditions de recherche. Ils permettent tous les deux de combiner plusieurs termes à rechercher via les opérateurs booléens AND, OR, AND NOT, pour effectuer des opérations logiques. Par exemple, vous pouvez utiliser AND pour rechercher des lignes qui contiennent à la fois « latte » et « New York-style bagel ». Vous pouvez utiliser AND NOT pour rechercher les lignes qui contiennent « bagel » mais qui ne contiennent pas « cream cheese ».

[!REMARQUE]

En revanche, FREETEXT et FREETEXTTABLE traitent les termes booléens comme des mots à rechercher.

Pour plus d'informations sur la façon de combiner CONTAINS avec d'autres prédicats qui utilisent les opérateurs logiques AND, OR et NOT, consultez Condition de recherche (Transact-SQL).

Exemple

L'exemple suivant utilise la table ProductDescription de la base de données AdventureWorks2012 . La requête utilise le prédicat CONTAINS pour rechercher les descriptions dont l'ID de description n'est pas égal à 5 et la description contient les mots « Aluminum » et « spindle ». La condition de recherche utilise l'opérateur booléen AND.

USE AdventureWorks2012
GO

SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
   CONTAINS(Description, 'aluminum AND spindle')
GO

[Haut de la page]

Considérations supplémentaires pour les requêtes de texte intégral

Lors de l'écriture de requêtes de texte intégral, prenez également en considération les points suivants :

  • LANGUAGE (option)

    De nombreux termes de requête dépendent fortement du comportement de l'analyseur lexical. Pour être certain d'utiliser l'analyseur lexical (et le générateur de formes dérivées) et le dictionnaire des synonymes appropriés, nous vous recommandons de spécifier l'option LANGUAGE. Pour plus d'informations, consultez Choisir une langue lors de la création d'un index de recherche en texte intégral.

  • Mots vides

    Lorsqu'une requête de texte intégral est définie, le Moteur d'indexation et de recherche en texte intégral supprime les mots vides (également appelés mots parasites) des critères de recherche. Les mots vides sont des mots tels que « un », « et », « est » ou « le » dont les occurrences sont fréquentes mais qui ne sont pas utiles pour une recherche de texte spécifique. Les mots vides sont répertoriés dans une liste de mots vides. Chaque index de recherche en texte intégral est associé à une liste de mots vides spécifique, qui détermine les mots vides à omettre de la requête ou de l'index au moment de l'indexation. Pour plus d'informations, consultez Configurer et gérer les mots vides et listes de mots vides pour la recherche en texte intégral.

  • Dictionnaire des synonymes

    Les requêtes FREETEXT et FREETEXTTABLE utilisent le dictionnaire des synonymes par défaut. CONTAINS et CONTAINSTABLE prennent en charge un argument THESAURUS facultatif.

  • Respect de la casse

    Les requêtes de recherche en texte intégral ne respectent pas la casse. Néanmoins, en ce qui concerne le Japonais, il existe plusieurs orthographes phonétiques pour lesquelles le concept de normalisation orthographique est apparenté au respect de la casse (par exemple kana = non respect). Ce genre de normalisation orthographique n'est pas pris en charge.

[Haut de la page]

Exécution de requêtes sur des colonnes varbinary(max) et xml

Si une colonne varbinary(max), varbinary ou xml est indexée en texte intégral, elle peut faire l'objet d'une requête à l'aide des prédicats de texte intégral (CONTAINS et FREETEXT) et des fonctions de texte intégral (CONTAINSTABLE et FREETEXTTABLE), au même titre que n'importe quelle autre colonne indexée en texte intégral.

Important

La recherche en texte intégral fonctionne également avec des colonnes de type image. Cependant, le type de données image sera supprimé dans une version ultérieure de SQL Server. Évitez d'utiliser ce type de données dans un nouveau travail de développement et prévoyez de modifier les applications qui l'utilisent actuellement. Utilisez le type de données varbinary(max) à la place.

Données varbinary(max) ou varbinary

Une même colonne varbinary(max) ou varbinary peut stocker de nombreux types de documents. SQL Server prend en charge tout type de document pour lequel un filtre est installé et disponible dans le système d'exploitation. Le type d'un document est identifié par l'extension de fichier de celui-ci. Par exemple, pour une extension de fichier .doc, la recherche en texte intégral utilise le filtre qui prend en charge les documents Microsoft Word. Pour obtenir la liste des types de document disponibles, interrogez l'affichage catalogue sys.fulltext_document_types.

Notez que le Moteur d'indexation et de recherche en texte intégral peut bénéficier des filtres installés dans le système d'exploitation. Avant de pouvoir utiliser des filtres de système d'exploitation, des analyseurs lexicaux et des générateurs de formes dérivées, vous devez les charger dans l'instance de serveur, comme suit :

EXEC sp_fulltext_service @action='load_os_resources', @value=1

Pour créer un index de recherche en texte intégral sur une colonne varbinary(max), le Moteur d'indexation et de recherche en texte intégral a besoin d'accéder aux extensions de fichier des documents dans la colonne varbinary(max). Ces informations doivent être stockées dans une colonne de table, appelée colonne de type, qui doit être associée à la colonne varbinary(max) dans l'index de recherche en texte intégral. Lors de l'indexation d'un document, le Moteur d'indexation et de recherche en texte intégral utilise l'extension de fichier indiquée dans la colonne de type pour identifier le filtre à utiliser.

[Haut de la page]

Données xml

Une colonne de type de données xml stocke uniquement des documents et des fragments XML, et seul le filtre XML est utilisé pour les documents. Par conséquent, une colonne de type est inutile. Sur les colonnes xml, l'index de recherche en texte intégral indexe le contenu des éléments XML, sans prendre en compte les balises XML. Les valeurs d'attributs sont indexées en texte intégral, à moins qu'il ne s'agisse de valeurs numériques. Des balises d'éléments sont utilisées comme limites de jeton. Les fragments et les documents XML ou HTML correctement formés contenant plusieurs langues sont pris en charge.

Pour plus d'informations concernant l'exécution de requêtes sur une colonne xml, consultez Utiliser la recherche en texte intégral avec des colonnes XML.

[Haut de la page]

Formulaires de termes de requête pris en charge

Cette section récapitule la prise en charge fournie pour chaque formulaire de requête par les prédicats de texte intégral et les fonctions d'ensemble de lignes.

[!REMARQUE]

Pour connaître la syntaxe d'un terme de requête donné, cliquez sur les liens correspondants dans la colonne Pris en charge par du tableau suivant.

Formulaire de terme de la requête

Description

Pris en charge par

Un ou plusieurs mots ou expressions spécifiques (terme simple)

Dans une recherche en texte intégral, un mot (ou jeton) est une chaîne dont les limites sont identifiées par les analyseurs lexicaux appropriés, en suivant les règles linguistiques de la langue spécifiée. Une expression valide est constituée de plusieurs mots, avec ou sans signes de ponctuation entre eux.

Par exemple, « croissant » constitue un mot et « café au lait » une expression. De tels mots et expressions sont considérés comme des termes simples.

Pour plus d'informations, consultez Recherche d'un mot ou d'une expression spécifique (terme simple), dans la suite de cette rubrique.

CONTAINS et CONTAINSTABLE recherchent une correspondance exacte pour l'expression.

FREETEXT et FREETEXTTABLE décomposent l'expression en mots distincts.

Un mot ou une expression débutant par un texte spécifié (préfixe)

Un terme de préfixe fait référence à une chaîne apposée au devant d'un mot pour produire un mot dérivatif ou une forme fléchie.

Pour un terme de préfixe unique, tout mot qui démarre avec le terme spécifié fera partie du jeu de résultats. Par exemple, le terme « auto* » correspond à « automatique », « automobile », etc.

Dans le cas d'une expression, chaque mot faisant partie de l'expression est considéré comme un terme préfixe. Par exemple, le terme « auto tran* » correspond à « automatic transmission » et « automobile transducer » mais pas à « automatic motor transmission ».

Pour plus d'informations, consultez Recherche de préfixes (terme de préfixe), dans la suite de cette rubrique.

CONTAINS et CONTAINSTABLE

Formes fléchies d'un mot spécifique (forme canonique, forme fléchie)

Les formes fléchies correspondent aux différents temps et conjugaisons d'un verbe ou au pluriel et au singulier d'un non. Par exemple, rechercher les formes fléchies du verbe « drive ». Si plusieurs lignes de la table comportent les mots « drive », « drives », « drove », « driving » et « driven », tous ces termes apparaîtront dans le jeu de résultats, dans la mesure où chacun d'entre eux peut être généré à partir du mot « drive ».

Pour plus d'informations, consultez Recherche de formes fléchies d'un mot spécifique (forme canonique), dans la suite de cette rubrique.

FREETEXT et FREETEXTTABLE recherchent par défaut des termes fléchis de tous les mots spécifiés.

CONTAINS et CONTAINSTABLE prennent en charge un argument INFLECTIONAL facultatif.

Formes synonymes d'un mot spécifique (forme canonique, dictionnaire des synonymes)

Un dictionnaire des synonymes définit des synonymes spécifiés par l'utilisateur pour les termes. Par exemple, si une entrée « {car, automobile, truck, van} » est ajoutée à un dictionnaire des synonymes, vous pouvez rechercher la forme du dictionnaire des synonymes pour le mot « car ». Toutes les lignes de la table interrogée qui contiennent les mots « automobile », « truck », « van » ou « car » s'affichent dans le jeu de résultats, car chacun de ces mots appartient au jeu d'expansion des synonymes contenant le mot « car ».

Pour des informations sur la structure des fichiers du dictionnaire des synonymes, consultez Configurer et gérer les fichiers de dictionnaire des synonymes pour la recherche en texte intégral.

FREETEXT et FREETEXTTABLE utilisent le dictionnaire des synonymes par défaut.

CONTAINS et CONTAINSTABLE prennent en charge un argument THESAURUS facultatif.

Un mot ou une expression proches d'un autre mot ou d'une autre expression (terme de proximité)

Un terme de proximité indique des mots ou expressions qui sont proches les uns des autres. Vous pouvez également spécifier le nombre maximal de termes n'entrant pas dans le cadre de la recherche qui séparent le premier et le dernier termes de recherche. De plus, vous pouvez rechercher des mots ou des expressions dans n'importe quel ordre, ou dans l'ordre dans lequel vous les spécifiez.

Par exemple, vous pouvez rechercher les lignes dans lesquelles le mot « ice » est voisin du mot « hockey » et celles dans lesquelles l'expression « ice skating » est voisine de « ice hockey ».

Pour plus d'informations, consultez Recherche de mots dans le voisinage d'autres mots avec NEAR.

CONTAINS et CONTAINSTABLE

Mots ou expressions utilisant des valeurs pondérées (termes pondérés)

Une valeur pondérée indique le degré d'importance de chaque mot et expression au sein d'un ensemble de mots et d'expressions. L'échelle de valeurs oscille entre un minimum de 0,0 et un maximum de 1,0.

Par exemple, dans une requête de recherche de plusieurs termes, vous pouvez affecter à chaque mot de recherche une valeur de pondération indiquant son importance par rapport aux autres mots figurant dans la condition de recherche. Les résultats de ce type de requête renvoient les lignes les plus pertinentes en premier, en fonction du poids relatif affecté aux mots de recherche. Les jeux de résultats contiennent des documents ou des lignes qui contiennent chacun des termes spécifiés (ou contenu entre eux) ; toutefois, certains résultats seront considérés comme plus pertinents que d'autres à cause de la variation dans les valeurs pondérées associées aux différents termes recherchés.

Pour plus d'informations, consultez Recherche de mots et d'expressions à l'aide de valeurs pondérées (termes pondérés), dans la suite de cette rubrique.

CONTAINSTABLE

[Haut de la page]

Recherche d'un mot ou d'une expression spécifique (terme simple)

Vous pouvez utiliser CONTAINS, CONTAINSTABLE, FREETEXT ou FREETEXTTABLE pour rechercher une expression spécifique dans une table. Par exemple, si vous souhaitez effectuer une recherche dans la table ProductReview de la base de données AdventureWorks2012 afin de trouver tous les commentaires de produits contenant l'expression « learning curve », vous pouvez utiliser le prédicat CONTAINS en procédant comme suit :

USE AdventureWorks2012
GO

SELECT Comments
FROM Production.ProductReview
WHERE CONTAINS(Comments, '"learning curve"')
GO

La condition de recherche, en l'occurrence « learning curve », peut être complexe et comporter un ou plusieurs termes.

[Haut de la page]

Recherche de préfixes (terme de préfixe)

Vous pouvez utiliser CONTAINS ou CONTAINSTABLE pour rechercher des mots ou des expressions ayant un préfixe que vous spécifiez. Toutes les entrées de la colonne qui contiennent le texte commençant par le préfixe spécifié sont retournées. Par exemple, rechercher toutes les lignes qui contiennent le préfixe top-, comme dans topple, topping et top. La requête est la suivante :

USE AdventureWorks2012
GO

SELECT Description, ProductDescriptionID
FROM Production.ProductDescription
WHERE CONTAINS (Description, '"top*"' )
GO

Tout texte correspondant au texte spécifié avant l'astérisque (*) est renvoyé. Si le texte et l'astérisque ne sont pas délimités par des guillemets doubles, comme dans CONTAINS (DESCRIPTION, 'top*'), la recherche en texte intégral ne considère pas l'astérisque comme un caractère générique.

Lorsque le préfixe est une expression, chaque jeton à l'intérieur de l'expression est considéré comme un préfixe distinct. Toutes les lignes qui possèdent des mots qui commencent par les préfixes seront renvoyés. Par exemple, le préfixe « light bread* » trouve des lignes contenant le texte « light breaded », « lightly breaded » ou « light bread », mais il ne retourne pas « lightly toasted bread ».

[Haut de la page]

Recherche de formes fléchies d'un mot spécifique (forme canonique)

Vous pouvez utiliser CONTAINS, CONTAINSTABLE, FREETEXT ou FREETEXTTABLE pour rechercher tous les différents temps et conjugaisons d'un verbe, le pluriel et le singulier d'un nom (recherche des formes fléchies) ou les formes synonymes d'un mot spécifique (recherche dans le dictionnaire des synonymes).

L'exemple suivant recherche toutes les formes de « foot » (« foot », « feet », etc.) dans la colonne Comments de la table ProductReview dans la base de données AdventureWorks.

USE AdventureWorks2012
GO

SELECT Comments, ReviewerName
FROM Production.ProductReview
WHERE CONTAINS (Comments, 'FORMSOF(INFLECTIONAL, "foot")')
GO

[!REMARQUE]

La recherche en texte intégral utilise des générateurs de formes dérivées, qui vous permettent de rechercher les différents temps et conjugaisons d'un verbe, ou à la fois le pluriel et le singulier d'un nom. Pour plus d'informations sur les générateurs de formes dérivées, consultez Configurer et gérer les analyseurs lexicaux et générateurs de formes dérivées pour la recherche.

[Haut de la page]

Recherche de mots et d'expressions à l'aide de valeurs pondérées (termes pondérés)

Vous pouvez utiliser CONTAINSTABLE pour rechercher des mots ou des expressions et spécifier une valeur pondérée. La pondération d'un terme, qui est une mesure numérique comprise entre 0.0 et 1.0, indique l'importance de chaque mot et expression au sein d'un ensemble de mots et d'expressions. L'échelle de pondération oscille entre un minimum de 0.0 et un maximum de 1.0.

L'exemple suivant affiche une requête qui recherche toutes les adresses de client à l'aide de pondérations, où tout texte qui commence par la chaîne « Bay » comporte soit « Street » soit « View ». Les résultats accordent un rang plus élevé aux lignes qui contiennent le plus de mots, parmi ceux spécifiés.

USE AdventureWorks2012
GO

SELECT AddressLine1, KEY_TBL.RANK 
FROM Person.Address AS Address INNER JOIN
CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("Bay*", 
         Street WEIGHT(0.9), 
         View WEIGHT(0.1)
         ) ' ) AS KEY_TBL
ON Address.AddressID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO

Un terme pondéré peut être utilisé avec tout terme simple, terme de préfixe, terme canonique ou terme de proximité.

[Haut de la page]

Affichage du résultat de la segmentation du texte en unités lexicales pour une combinaison d'analyseur lexical, de dictionnaire des synonymes et de liste de mots vides

Après avoir appliqué une combinaison d'analyseur lexical, de dictionnaire des synonymes et de liste de mots vides à une entrée de chaîne de requête, vous pouvez afficher le résultat de la segmentation du texte en unités lexicales à l'aide de la vue de gestion dynamique sys.dm_fts_parser. Pour plus d'informations, consultez sys.dm_fts_parser (Transact-SQL).

[Haut de la page]

Voir aussi

Tâches

Créer des requêtes de recherche en texte intégral (Visual Database Tools)

Référence

CONTAINS (Transact-SQL)

CONTAINSTABLE (Transact-SQL)

FREETEXT (Transact-SQL)

FREETEXTTABLE (Transact-SQL)

Concepts

Améliorer les performances des requêtes de texte intégral