Créer et gérer des index de recherche en texte intégral

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Cet article décrit comment créer, remplir et gérer des index en texte intégral dans le Moteur de base de données SQL Server. Un index en texte intégral prend en charge la recherche par mots-clés et linguistiques plutôt que par des colonnes basées sur des caractères dans un tableau.

Création d'un catalogue de texte intégral

Avant de pouvoir créer un index en texte intégral, il vous faut un catalogue en texte intégral. Le catalogue est un conteneur virtuel pour un ou plusieurs index de recherche en texte intégral. Pour plus d’informations, voir Créer et gérer des catalogues de texte intégral.

Créer, modifier ou supprimer un index de recherche en texte intégral

Remplir un index de texte intégral

Le processus de création et de gestion d’un index de recherche en texte intégral est appelé alimentation (également appelé analyse). Il existe trois types de peuplement d’index de texte intégral :

  • Population complète
  • Population fondée sur le suivi des modifications
  • Alimentation incrémentielle basée sur un horodatage

Pour plus d’informations, consultez Alimenter des index de recherche en texte intégral.

Afficher les propriétés d’un index de recherche en texte intégral

Afficher les propriétés d’un index de recherche en texte intégral avec Transact-SQL

Vue catalogue ou vue de gestion dynamique Description
sys.fulltext_index_catalog_usages Retourne une ligne pour chaque catalogue de texte intégral vers une référence d'index de recherche en texte intégral.
sys.fulltext_index_columns Contient une ligne pour chaque colonne appartenant à un index de texte intégral.
sys.fulltext_index_fragments Un index en texte intégral utilise des tables internes appelées fragments d’index en texte intégral pour stocker les données d’index inversées. Vous pouvez utiliser cette vue pour interroger les métadonnées concernant ces fragments. Cette vue contient une ligne pour chaque fragment d’index en texte intégral de chaque table qui contient un index en texte intégral.
sys.fulltext_indexes Contient une ligne pour chaque index de texte intégral d’un objet tabulaire.
sys.dm_fts_index_keywords Retourne des informations sur le contenu d'un index de recherche en texte intégral pour la table spécifiée.
sys.dm_fts_index_keywords_by_document Retourne des informations sur le contenu de niveau document d'un index de recherche en texte intégral pour la table spécifiée. Un mot clé donné peut apparaître dans plusieurs documents.
sys.dm_fts_index_population Retourne des informations sur les remplissages d'index de texte intégral actuellement en cours.

Afficher les propriétés d’un index de recherche en texte intégral avec SQL Server Management Studio

Remarque

Pour afficher les propriétés des index de recherche en texte intégral pour les bases de données Azure SQL, utilisez Transact-SQL.

  1. Dans SQL Server Management Studio, dans l’Explorateur d’objets, développez le serveur.

  2. Développez Bases de données, puis développez la base de données qui contient l’index de texte intégral.

  3. Développez Tables.

  4. Cliquez avec le bouton droit sur la table sur laquelle l’index de recherche en texte intégral est défini, sélectionnez Index de recherche en texte intégral et, dans le menu contextuel Index de recherche en texte intégral, sélectionnez Propriétés. Cette action ouvre la boîte de dialogue Propriétés de l’index en texte intégral.

  5. Dans le volet Sélectionner une page , sélectionnez l’une des pages suivantes :

    Page Description
    Général Affiche les propriétés de base de l'index de recherche en texte intégral. Ces propriétés incluent plusieurs propriétés modifiables ainsi que de nombreuses propriétés immuables telles que le nom de la base de données, le nom de la table et le nom de la colonne de clé en texte intégral. Les propriétés modifiables sont les suivantes :

    Liste de mots vides de l’index de recherche en texte intégral

    Indexation de texte intégral activée

    Suivi des modifications

    Liste de propriétés de recherche
    Colonnes Affiche les colonnes de table qui sont disponibles pour l'indexation de texte intégral. La ou les colonnes sélectionnées sont indexées en texte intégral. Vous pouvez sélectionner autant de colonnes disponibles que vous souhaitez inclure dans l'index de recherche en texte intégral. Pour plus d’informations, consultez Alimenter des index de recherche en texte intégral.
    Planifications Utilisez cette page afin de créer ou gérer des planifications pour un travail de l'Agent SQL Server qui démarre un remplissage incrémentiel de la table pour remplir l'index de recherche en texte intégral. Pour plus d’informations, consultez Alimenter des index de recherche en texte intégral.

    Remarque : Après avoir fermé la boîte de dialogue Propriétés de l’index de texte intégral, toute nouvelle planification créée est associée à un travail SQL Server Agent (Démarrer le remplissage incrémentiel de la table sur database_name.table_name).
  6. Sélectionnez OK pour enregistrer vos modifications et fermer la boîte de dialogue Propriétés d’index de recherche en texte intégral.

Afficher les propriétés des colonnes et tables indexées

Vous pouvez utiliser plusieurs fonctions Transact-SQL, comme OBJECTPROPERTYEX, pour obtenir la valeur de différentes propriétés d’indexation en texte complet. Ces informations sont utiles pour administrer la recherche en texte intégral et résoudre les problèmes qui la concernent.

Le tableau ci-après recense les propriétés en texte intégral liées aux colonnes et tables indexées, ainsi que les fonctions Transact-SQL qui leur sont associées.

Propriété Description Fonction
FullTextTypeColumn TYPE COLUMN dans le tableau qui stocke les informations sur le type de document de la colonne. COLUMNPROPERTY
IsFulltextIndexed Précise si une colonne est activée pour l’indexation en texte intégral. COLUMNPROPERTY
IsFulltextKey Indique si l'index représente la clé de texte intégral d'une table. INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn Indique si une table dispose d’une indexation des mises à jour en arrière-plan en texte intégral. OBJECTPROPERTYEX
TableFulltextCatalogId ID du catalogue de texte intégral dans lequel se trouvent les données de l’index de texte intégral de la table. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Indique si le suivi des modifications en texte intégral est activé sur la table. OBJECTPROPERTYEX
TableFulltextDocsProcessed Nombre de lignes traitées depuis le démarrage de l'indexation de texte intégral. OBJECTPROPERTYEX
TableFulltextFailCount Nombre de lignes que la recherche en texte intégral n'a pas indexées. OBJECTPROPERTYEX
TableFulltextItemCount Nombre de lignes qui ont été indexées en texte intégral avec succès. OBJECTPROPERTYEX
TableFulltextKeyColumn ID de la colonne clé unique de texte intégral. OBJECTPROPERTYEX
TableFullTextMergeStatus Si une table dotée d’un index de texte intégral est actuellement en cours de fusion. OBJECTPROPERTYEX
TableFulltextPendingChanges Nombre d'entrées de suivi des modifications en attente de traitement. OBJECTPROPERTYEX
TableFulltextPopulateStatus État de population d’une table de texte intégral. OBJECTPROPERTYEX
TableHasActiveFulltextIndex Indique si une table possède un index de recherche en texte intégral actif. OBJECTPROPERTYEX

Obtenir des informations sur la colonne clé de recherche en texte intégral

En général, vous joignez le résultat des fonctions CONTAINSTABLE ou FREETEXTTABLE à valeurs d’ensemble de lignes à la table de base. Dans ce cas-là, vous devez connaître le nom de la colonne clé unique. Vous pouvez vérifier si un index unique donné est utilisé comme clé en texte intégral, et vous pouvez obtenir l’identifiant de la colonne de clé en texte intégral.

Déterminer si un index unique donné est utilisé comme colonne de clés de texte intégral

Utilisez une instruction SELECT pour appeler la fonction INDEXPROPERTY. Dans l’appel de la fonction, utilisez la OBJECT_ID fonction pour convertir le nom de la table (table_name) en identifiant de table, spécifiez le nom d’un index unique pour la table, puis spécifiez la propriété d’index IsFulltextKey , comme suit :

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');

Cette instruction renvoie 1 si l’index impose l’unicité pour la colonne de clé de recherche en texte intégral et 0 dans le cas contraire.

Exemple

L’exemple suivant vérifie si l’index PK_Document_DocumentNode applique l’unicité de la colonne clé en texte intégral :

USE AdventureWorks2025;
GO

SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');

Cet exemple retourne 1 si l’index PK_Document_DocumentNode impose l’unicité pour la colonne clé du texte intégral. Sinon, il retourne 0 ou NULL. NULL Cela signifie que vous utilisez un nom d’index invalide, que le nom d’index ne correspond pas à la table, que la table n’existe pas, etc.

Trouver l’identificateur de la colonne clé de recherche en texte intégral

Chaque table activée en texte intégral possède une colonne qui impose des lignes uniques pour le tableau (la colonne clé unique ). La TableFulltextKeyColumn propriété, obtenue à partir de la OBJECTPROPERTYEX fonction, contient l’ID de colonne de la colonne clé unique.

Pour obtenir cet identifiant, utilisez une SELECT instruction qui appelle la OBJECTPROPERTYEX fonction. Utilisez la OBJECT_ID fonction pour convertir le nom de la table (table_name) en identifiant de table et spécifiez la TableFulltextKeyColumn propriété, comme suit :

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn') AS 'Column Identifier';

Exemples

L'exemple ci-après retourne l'identificateur de la colonne clé de texte intégral ou une valeur NULL. NULL Cela implique que vous utilisez un nom d’index invalide, que le nom d’index ne correspond pas à la table, que la table n’existe pas, etc.

USE AdventureWorks2025;
GO

SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

L’exemple suivant montre comment utiliser l’identifiant de la colonne à clé unique pour obtenir le nom de la colonne.

USE AdventureWorks2025;
GO

DECLARE @key_column AS SYSNAME;

SET @key_column = COL_NAME(
    OBJECT_ID('Production.Document'),
    OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn')
);

SELECT @key_column AS 'Unique Key Column';
GO

Cet exemple retourne une colonne de jeu de résultats appelée Unique Key Column, qui contient une seule ligne indiquant le nom de la colonne clé unique de la table Document, DocumentNode. Si cette requête contenait un nom d’index invalide, que le nom d’index ne correspondait pas à la table, que la table n’existait pas, etc., elle retourne NULL.

Indexer les colonnes varbinary(max) et XML

Si vous indexez en texte intégral une colonne varbinary(max), varbinary ou xml , vous pouvez l’interroger en utilisant les prédicats en texte intégral (CONTAINS et FREETEXT) et les fonctions (CONTAINSTABLE et FREETEXTTABLE), comme toute autre colonne indexée en texte intégral.

Données varbinary(max) ou varbinary d’index

Une seule colonne varbinary(max) ou varbinary peut stocker de nombreux types de documents. Le Moteur de base de données 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 .doc extension de fichier, la recherche en texte intégral utilise le filtre qui prend en charge les documents Microsoft Word. Pour obtenir la liste des types de documents disponibles, interrogez l’affichage catalogue sys.fulltext_document_types .

Le Moteur d'indexation et de recherche en texte intégral peut utiliser 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 :

EXECUTE 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) . Vous devez stocker ces informations dans une colonne de tableau, appelée colonne type, que vous associez à la colonne varbinary(max) dans l’index du 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.

Données d’index 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 sur l’indexation et l’interrogation sur une colonne xml , voir Utiliser la recherche en texte intégral avec colonnes XML.

Désactiver ou réactiver l’indexation de texte intégral pour une table

Dans le Moteur de base de données, toutes les bases de données créées par les utilisateurs sont activées en texte intégral par défaut. De plus, une table individuelle est automatiquement activée pour l'indexation de texte intégral dès qu'un index de recherche en texte intégral est créé sur cette table et qu'une colonne est ajoutée à l'index. Une table est automatiquement désactivée pour l'indexation de recherche en texte intégral lorsque la dernière colonne est supprimée de son index de texte intégral.

Sur une table qui possède un index en texte intégral, vous pouvez désactiver ou réactiver manuellement une table pour l’indexation en texte intégral en utilisant SQL Server Management Studio.

  1. Développez le groupe de serveurs, développez Bases de données, puis développez la base de données qui contient la table sur laquelle vous souhaitez activer l’indexation en texte intégral.

  2. Développez Tables et cliquez avec le bouton droit sur la table pour laquelle vous souhaitez désactiver ou réactiver l’indexation de texte intégral.

  3. Sélectionnez Index de recherche en texte intégral, puis cliquez sur Disable Full-Text index (Désactiver l’index de recherche en texte intégral) ou Enable Full-Text index(Activer l’index de recherche en texte intégral).

Supprimer un index de texte intégral d’une table

  1. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur la table dotée de l'index de recherche en texte intégral à supprimer.

  2. Sélectionnez Supprimer l’index de recherche en texte intégral.

  3. Quand le système vous y invite, cliquez sur OK pour confirmer la suppression de l’index de recherche en texte intégral.