CREATE FULLTEXT INDEX (Transact-SQL)

Crée un index de recherche en texte intégral sur une table ou une vue indexée dans une base de données. Un seul index de recherche en texte intégral est autorisé par table ou vue indexée et chaque index de recherche en texte intégral s'applique à une seule table ou vue indexée.

Un index de recherche en texte intégral peut contenir jusqu'à 1 024 colonnes.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

CREATE FULLTEXT INDEX ON table_name
      [ ( { column_name 
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ] 
        } [ ,...n] 
            ) ]
    KEY INDEX index_name 
        [ ON <catalog_filegroup_option> ]
        [ WITH [ ( ] <with_option> [ ,...n] [ ) ] ]
[;]

<catalog_filegroup_option>::=
  {
        fulltext_catalog_name 
  | ( fulltext_catalog_name, FILEGROUP filegroup_name )
  | ( FILEGROUP filegroup_name, fulltext_catalog_name )
  | ( FILEGROUP filegroup_name )
  }

<with_option>::=
  {
   CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [, NO POPULATION ] } 
  | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
  }

Arguments

  • table_name
    Nom de la table ou de la vue indexée qui contient la ou les colonnes incluses dans l'index de recherche en texte intégral.

  • column_name
    Nom de la colonne incluse dans l'index de recherche en texte intégral. Seules les colonnes de type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary et varbinary(max) peuvent être indexées pour une recherche en texte intégral. Pour spécifier plusieurs colonnes, répétez la clause column_name comme suit :

    CREATE FULLTEXT INDEX ON table_name (column_name1 […], column_name2 […]) …

  • TYPE COLUMN type_column_name
    Spécifie le nom d'une colonne de table, type_column_name, utilisé pour contenir le type de document d'un document varbinary, varbinary(max) ou image. Cette colonne, appelée colonne de type, contient une extension de fichier fourni par l'utilisateur (.doc, .pdf, .xls, et ainsi de suite). La colonne doit être de type char, nchar, varchar ou nvarchar.

    Spécifiez TYPE COLUMN type_column_name uniquement si column_name spécifie une colonne varbinary, varbinary(max) ou image, dans laquelle les données sont stockées sous forme binaire ; dans le cas contraire, SQL Server retourne une erreur.

    [!REMARQUE]

    Au moment de l'indexation, le Moteur d'indexation et de recherche en texte intégral utilise l'abréviation dans la colonne de type de chaque ligne de table pour identifier le filtre de recherche en texte intégral à utiliser pour le document dans column_name. Le filtre charge le document en tant que flux binaire, supprime les informations de mise en forme et envoie le texte du document vers le composant d'analyseur de texte. Pour plus d'informations, consultez Filtres de recherche en texte intégral.

  • LANGUAGE language_term
    Langue des données stockées dans column_name.

    language_term est facultatif et peut être défini comme une chaîne, un entier ou une valeur hexadécimale correspondant à l'identificateur de paramètres régionaux (LCID) d'une langue. Si vous ne spécifiez aucune valeur, la langue par défaut de l'instance SQL Server est utilisée.

    Si language_term est spécifié, la langue représentée sera utilisée pour indexer les données stockées dans les colonnes de type char, nchar, varchar, nvarchar, text et ntext. Cette langue est la langue utilisée par défaut lors d'une requête si language_term n'est pas spécifié en tant qu'élément d'un prédicat de texte intégral avec la colonne.

    Lorsqu'il est spécifié sous forme de chaîne, l'argument language_term correspond à la valeur de la colonne alias dans la table système syslanguages. La chaîne doit être placée entre guillemets simples, comme dans la chaîne 'language_term'. Lorsqu'il est spécifié comme entier, l'argument language_term est alors le LCID actif identifiant la langue. Quand il est spécifié comme valeur hexadécimale, l'argument language_term est 0x suivi de la valeur hexadécimale du LCID. La valeur hexadécimale peut comporter un maximum de huit chiffres, zéros non significatifs inclus.

    Si la valeur est au format DBCS (jeu de caractères codés sur deux octets), SQL Server la convertit en Unicode.

    Les ressources telles que les analyseurs de texte et les générateurs de formes dérivées doivent être activées pour la langue spécifiée en tant que language_term. Si ces ressources ne prennent pas en charge la langue spécifiée, SQL Server retourne une erreur.

    Utilisez la procédure stockée sp_configure pour accéder aux informations concernant la langue de texte intégral par défaut de l'instance MicrosoftSQL Server. Pour plus d'informations, consultez sp_configure (Transact-SQL) et Option default full-text language.

    Pour les colonnes de type non-BLOB et non-XML contenant des données texte dans plusieurs langues, ou lorsque la langue du texte stocké dans la colonne est inconnue, vous pouvez envisager d'utiliser la ressource de langue neutre (0x0). Toutefois, vous devez d'abord comprendre les conséquences possibles de l'utilisation de la ressource de la langue neutre (0x0). Pour obtenir des informations sur les solutions et conséquences possibles de l'utilisation de la ressource de langue neutre (0x0), consultez Méthodes conseillées pour le choix d'une langue lors de la création d'un index de recherche en texte intégral.

    Pour les documents stockés dans des colonnes de type XML ou BLOB, le codage de la langue du document sera utilisé lors de l'indexation. Par exemple, dans les colonnes XML, l'attribut xml:lang des documents XML identifie la langue. Lors d'une requête, la valeur précédemment spécifiée dans language_term devient la langue par défaut utilisée pour les requêtes de texte intégral, sauf si language_term est spécifié dans le cadre d'une requête de texte intégral.

  • KEY INDEX index_name
    Nom de l'index de clé unique dans table_name. KEY INDEX doit être une colonne unique, de clé unique et ne pas accepter les valeurs NULL. Sélectionnez le plus petit index de clé unique comme clé unique de texte intégral. Pour obtenir les meilleures performances, nous recommandons un type de données Integer pour la clé de texte intégral.

  • fulltext_catalog_name
    Catalogue de texte intégral utilisé pour l'index de recherche en texte intégral. Le catalogue doit déjà exister dans la base de données. Cette clause est facultative. En l'absence de toute spécification, le catalogue par défaut est utilisé. S'il n'existe aucun catalogue par défaut, SQL Server retourne une erreur.

  • FILEGROUP filegroup_name
    Crée l'index de recherche en texte intégral spécifié dans le groupe de fichiers spécifié. Le groupe de fichiers doit déjà exister. Si la clause FILEGROUP n'est pas spécifiée, l'index de recherche en texte intégral est placé dans le même groupe de fichiers comme table ou vue de base pour une table non partitionnée ou dans le groupe de fichiers principal pour une table partitionnée.

  • CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
    Spécifie si les modifications (mises à jour, suppressions ou insertions) apportées aux colonnes de table couvertes par l'index de recherche en texte intégral seront propagées par SQL Server à l'index de recherche en texte intégral. Les modifications apportées aux données via WRITETEXT et UPDATETEXT ne sont pas répercutées dans l'index de recherche en texte intégral et ne sont pas prises en compte par le suivi des modifications.

    • MANUAL
      Indique que les modifications suivies doivent être propagées manuellement en appelant l'instruction ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL (alimentation manuelle). Vous pouvez utiliser SQL Server Agent pour appeler régulièrement cette instruction Transact-SQL.

    • AUTO
      Indique que les modifications suivies seront propagées automatiquement à mesure que les données seront modifiées dans la table de base (alimentation automatique). Même si les modifications sont propagées automatiquement, elles n'apparaissent pas nécessairement immédiatement dans l'index de recherche en texte intégral. AUTO est la valeur par défaut.

    • OFF [ , NO POPULATION]
      Spécifie que SQL Server ne conserve aucune liste des modifications apportées aux données indexées. Si l'option NO POPULATION est spécifiée, SQL Server alimente l'index une fois qu'il est créé.

      L'option NO POPULATION peut être utilisée uniquement lorsque la valeur de CHANGE_TRACKING est OFF. Si l'option NO POPULATION est spécifiée, SQL Server n'alimente pas l'index une fois qu'il est créé. L'index n'est alimenté qu'une fois que l'utilisateur a exécuté la commande ALTER FULLTEXT INDEX avec la clause START FULL POPULATION ou START INCREMENTAL POPULATION.

  • STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
    Associe une liste de mots vides de texte intégral à l'index. L'index ne contient aucun jeton répertorié dans la liste de mots vides spécifiée. Si STOPLIST n'est pas spécifié, SQL Server associe la liste de mots vides de texte intégral système à l'index.

    • OFF
      Indique qu'aucune liste de mots vides ne doit être associée à l'index de recherche en texte intégral.

    • SYSTEM
      Indique que la liste de mots vides de texte intégral système par défaut doit être utilisée pour cet index de recherche en texte intégral.

    • stoplist_name
      Spécifie le nom de la liste de mots vides à associer à l'index de recherche en texte intégral.

Notes

Pour plus d'informations sur les index de recherche en texte intégral, consultez Configuration de catalogues de texte intégral et d'index de recherche en texte intégral pour une base de données.

Pour les colonnes xml, vous pouvez créer un index de recherche en texte intégral de façon à indexer le contenu des éléments XML tout en ignorant le balisage 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, consultez Index de texte intégral sur une colonne XML.

Nous recommandons que la colonne de clé d'index soit un type de données integer. Cela permet d'optimiser au moment de l'exécution de la requête.

Interactions entre le suivi des modifications et le paramètre NO POPULATION

L'alimentation de l'index de recherche en texte intégral dépend de l'activation du suivi des modifications et si WITH NO POPULATION est spécifié dans l'instruction ALTER FULLTEXT INDEX. Le tableau suivant résume le résultat de leur interaction.

Suivi des modifications

WITH NO POPULATION

Résultat

Non activé

Non spécifié

Une alimentation complète est effectuée sur l'index.

Non activé

Spécifié

L'alimentation de l'index n'a pas lieu tant qu'une instruction ALTER FULLTEXT INDEX...START POPULATION n'a pas été émise.

Activé

Spécifié

Une erreur est levée et l'index n'est pas modifié.

Activé

Non spécifié

Une alimentation complète est effectuée sur l'index.

Pour plus d'informations sur l'alimentation des index de recherche en texte intégral, consultez Alimentation d'un index de recherche en texte intégral.

Autorisations

L'utilisateur doit disposer de l'autorisation REFERENCES sur le catalogue de texte intégral et de l'autorisation ALTER sur la table ou la vue indexée, ou il doit être membre du rôle serveur fixe sysadmin ou membre du rôle de base de données fixe db_owner ou db_ddladmin.

Si SET STOPLIST est spécifié, l'utilisateur doit disposer de l'autorisation REFERENCES sur la liste de mots vides spécifiée. Le propriétaire de la liste de mots vides peut accorder cette autorisation.

[!REMARQUE]

L'autorisation REFERENCE est accordée au public sur la liste de mots vides par défaut qui accompagne SQL Server.

Exemples

A. Création d'un index unique, d'un catalogue de texte intégral et d'un index de recherche en texte intégral

L'exemple ci-après crée un index unique sur la colonne JobCandidateID de la table HumanResources.JobCandidate de l'exemple de base de données AdventureWorks. L'exemple crée ensuite un catalogue de texte intégral par défaut, ft. Enfin, l'exemple crée un index de recherche en texte intégral sur la colonne Resume, à l'aide du catalogue ft et de la liste de mots vides système.

USE AdventureWorks;
GO
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume) 
   KEY INDEX ui_ukJobCand 
   WITH STOPLIST = SYSTEM;
GO

B. Création d'un index de recherche en texte intégral sur plusieurs colonnes de table

L'exemple ci-après crée un index de recherche en texte intégral sur les colonnes ReviewerName, EmailAddress et Comments de la table Production.ProductReview de l'exemple de base de données AdventureWorks. Pour chaque colonne, l'exemple spécifie le LCID de l'anglais, 1033, qui est la langue des données dans les colonnes. Cet index de recherche en texte intégral utilise le catalogue de texte intégral par défaut et un index de clé unique existant, PK_ProductReview_ProductReviewID. Comme recommandé, cette clé d'index est sur une colonne d'entiers, ProductReviewID.

USE AdventureWorks;
GO
CREATE FULLTEXT INDEX ON Production.ProductReview
( 
  ReviewerName
     Language 1033,
  EmailAddress
     Language 1033,
  Comments 
     Language 1033     
 ) 
KEY INDEX PK_ProductReview_ProductReviewID ; 
GO

C. Création d'un index de recherche en texte intégral sans le remplir

L'exemple suivant crée un catalogue de texte intégral, documents_catalog, dans l'exemple de base de données AdventureWorks. L'exemple crée ensuite un index de recherche en texte intégral qui utilise ce nouveau catalogue. L'index de recherche en texte intégral est sur la colonne Document de la table Production.Document. L'exemple spécifie le LCID de l'anglais, 1033, qui est la langue des données dans la colonne. Cet index de recherche en texte intégral utilise le catalogue de texte intégral par défaut et un index de clé unique existant, PK_Document_DocumentID. Comme recommandé, cette clé d'index est sur une colonne d'entiers, DocumentID. L'exemple spécifie que le suivi des modifications est désactivé sans alimentation. Plus tard, durant les heures creuses, cet exemple utilise une instruction ALTER FULLTEXT INDEX pour démarrer une alimentation complète sur le nouvel index et activer le suivi des modifications automatique.

USE AdventureWorks;
GO
CREATE FULLTEXT CATALOG documents_catalog;
GO
CREATE FULLTEXT INDEX ON Production.Document
( Document 
    TYPE COLUMN FileExtension
    Language 1033 )
   KEY INDEX PK_Document_DocumentID
      ON documents_catalog
      WITH CHANGE_TRACKING OFF, NO POPULATION;
   GO

-- Plus tard, pendant une heure creuse, remplir l'index :

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO

Historique des modifications

Mise à jour du contenu

Ajout d'exemples supplémentaires à la section « Exemples ».

Ajout de la section « Interactions entre le suivi des modifications et le paramètre NO POPULATION ».