ALTER FULLTEXT INDEX (Transact-SQL)

Modifie les propriétés d'un index de recherche en texte intégral.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

ALTER FULLTEXT INDEX ON table_name
   { ENABLE 
   | DISABLE
   | SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
   | ADD ( column_name 
     [ TYPE COLUMN type_column_name ] 
     [ LANGUAGE language_term ] [,...n] )
     [ WITH NO POPULATION ]
   | DROP ( column_name [,...n] )
     [WITH NO POPULATION ] 
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | {STOP | PAUSE | RESUME } POPULATION 
   | SET STOPLIST { OFF| SYSTEM | stoplist_name }
     [WITH NO POPULATION] 
   }
[;]

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. La spécification des noms de la base de données et du propriétaire de la table est facultative.

  • ENABLE | DISABLE
    Indique à SQL Server de collecter des données d'index de recherche en texte intégral pour table_name. ENABLE active l'index de recherche en texte intégral et DISABLE le désactive.

    Lorsque l'index de recherche en texte intégral est désactivé, ses métadonnées restent dans les tables système. Si CHANGE_TRACKING est à l'état activé (mise à jour manuelle ou automatique) quand l'index de recherche en texte intégral est désactivé, l'état de l'index est figé ; toute analyse en cours est arrêtée et les nouvelles modifications apportées aux données de la table ne sont pas suivies ni propagées dans l'index. L'index de recherche en texte intégral de table_name peut être réactivé avec ENABLE.

  • SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
    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.

    [!REMARQUE]

    Pour plus d'informations sur l'interaction entre le suivi des modifications et WITH NO POPULATION, consultez la section « Remarques », plus loin dans cette rubrique.

  • MANUAL
    Indique que les modifications suivies seront 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
    Spécifie que SQL Server ne conservera pas de liste des modifications apportées aux données indexées.

  • ADD | DROP column_name
    Spécifie les colonnes à ajouter ou à supprimer de l'index de recherche en texte intégral. Les colonnes doivent être de type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary ou varbinary(max).

    Utilisez la clause DROP uniquement sur les colonnes pour lesquelles l'indexation de texte intégral a été activée.

    Utilisez TYPE COLUMN et LANGUAGE avec la clause ADD pour définir ces propriétés sur column_name. Lorsqu'une colonne est ajoutée, l'index de recherche en texte intégral de la table doit être réalimenté pour que les requêtes de texte intégral fonctionnent dans la colonne en question.

    [!REMARQUE]

    L'alimentation de l'index de recherche en texte intégral après l'ajout ou la suppression d'une colonne dans un index de recherche en texte intégral dépend de l'activation du suivi des modifications et si WITH NO POPULATION est spécifié. Pour plus d'informations, consultez la section « Remarques » plus loin dans cette rubrique.

  • 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 l'argument language_term est spécifié, la langue qu'il représente est appliquée à tous les éléments de la condition de recherche. Si vous ne spécifiez aucune valeur, le système utilise la langue de texte intégral par défaut de l'instance SQL Server.

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

    Lorsqu'il est spécifié comme 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.

    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, utilisez la ressource de langue neutre (0x0). Pour les documents stockés dans des colonnes de type XML ou BLOB, le codage linguistique du document est utilisé lors de l'indexation. Par exemple, dans les colonnes de type 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.

  • [ ,...n]
    Indique que plusieurs colonnes peuvent être spécifiées pour les clauses ADD ou DROP. Si vous spécifiez plusieurs colonnes, séparez-les par des virgules.

  • WITH NO POPULATION
    Indique que l'index de recherche en texte intégral ne sera pas alimenté après une opération d'ajout (ADD) ou de suppression (DROP) de colonne ni après une opération SET STOPLIST. L'index ne sera alimenté que si l'utilisateur exécute une commande START...POPULATION.

    Lorsque NO POPULATION est spécifié, SQL Server n'alimente pas l'index. L'index est alimenté uniquement lorsque l'utilisateur lance une commande ALTER FULLTEXT INDEX...START POPULATION. Lorsque NO POPULATION n'est pas spécifié, SQL Server alimente l'index.

    Si vous spécifiez WITH NO POPULATION alors que CHANGE_TRACKING est activé, SQL Server retourne une erreur. Si vous ne spécifiez pas WITH NO POPULATION et que CHANGE_TRACKING est activé, SQL Server procède à une alimentation complète de l'index.

    [!REMARQUE]

    Pour plus d'informations sur l'interaction entre le suivi des modifications et WITH NO POPULATION, consultez la section « Remarques », plus loin dans cette rubrique.

  • START {FULL|INCREMENTAL|UPDATE} POPULATION
    Indique à SQL Server de démarrer l'alimentation de l'index de recherche en texte intégral de table_name. Si une alimentation de l'index de recherche en texte intégral est déjà en cours, SQL Server retourne un avertissement et ne démarre pas de nouvelle alimentation.

    • FULL
      Spécifie que chaque ligne de la table est récupérée pour l'indexation de texte intégral même si ces lignes ont déjà été indexées.

    • INCREMENTAL
      Spécifie que seules les lignes modifiées depuis la dernière alimentation sont récupérées pour l'indexation de texte intégral. INCREMENTAL peut être appliqué seulement si la table contient une colonne de type timestamp. Si une table du catalogue de texte intégral ne contient pas de colonne de type timestamp, elle fait l'objet d'une alimentation complète (FULL).

    • UPDATE
      Spécifie le traitement de toutes les insertions, mises à jour ou suppressions depuis la dernière mise à jour de l'index de suivi des modifications. L'alimentation du suivi des modifications doit être activée sur une table, mais l'index de mise à jour en arrière-plan ou le suivi automatique des modifications doivent être désactivés.

  • {STOP | PAUSE | RESUME } POPULATION
    Arrête ou suspend toute alimentation en cours ; ou arrête ou reprend toute alimentation suspendue.

    STOP POPULATION n'arrête pas le suivi automatique des modifications ni l'index de mise à jour en arrière-plan. Pour arrêter le suivi des modifications, utilisez SET CHANGE_TRACKING OFF.

    Il est possible d'utiliser PAUSE POPULATION et RESUME POPULATION uniquement pour les alimentations complètes ; en effet, les autres types d'alimentations reprennent les analyses au point où l'analyse a été arrêtée.

  • SET STOPLIST { OFF| SYSTEM | stoplist_name }
    Modifie la liste de mots vides de texte intégral à associer à l'index.

    • OFF
      Indique qu'aucune liste de mots vides ne peut ê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.

    [!REMARQUE]

    Pour plus d'informations sur l'interaction entre le suivi des modifications et WITH NO POPULATION, consultez la section « Remarques », plus loin dans cette rubrique.

Notes

Sur 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.

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ée

Spécifié

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

Activée

Non spécifié

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

Autorisations

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

Si SET STOPLIST est spécifié, l'utilisateur doit disposer de l'autorisation REFERENCES sur la liste de mots vides. Le propriétaire de la liste de mots vides peut accorder cette autorisation. De plus, pour accorder l'autorisation REFERENCES, il convient de disposer des autorisations ALTER FULLTEXT CATALOG.

[!REMARQUE]

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

Exemples

L'exemple ci-dessous modifie l'index de recherche en texte intégral dans la table JobCandidate de la base de données AdventureWorks.

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate ENABLE;
GO

Historique des modifications

Mise à jour du contenu

Mise à jour de la section « Interactions entre le suivi des modifications et le paramètre NO POPULATION » : correction des valeurs dans la colonne WITH NO POPULATION lorsque le suivi des modifications est activé.