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. La table ne prend pas en charge les requêtes de texte intégral pendant que l'index est désactivé.

    La désactivation d'un index de recherche en texte intégral vous permet de désactiver le suivi des modifications tout en conservant l'index de recherche en texte intégral, que vous pouvez réactiver n'importe quand à l'aide de l'option ENABLE. 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.

  • 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 texte intégral et ne sont pas prises en compte par le suivi des modifications.

    Notes

    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 (remplissage manuel). Vous pouvez utiliser l'Agent SQL Server 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 (remplissage 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 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 texte intégral de la table doit être à nouveau alimenté pour que les requêtes de texte intégral fonctionnent dans la colonne en question.

    Notes

    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.

    Notes

    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 lexical de texte intégral. 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 lexicaux 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 renvoie 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, l'encodage 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 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 renvoie 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.

    Notes

    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 texte intégral de table_name. Si une alimentation de l'index de texte intégral est déjà en cours, SQL Server renvoie un avertissement et ne démarre pas une nouvelle alimentation.

    • FULL
      Spécifie que chaque ligne de la table est extraite 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 extraites 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 suspendu.

    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 associée à l'index, le cas échéant.

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

    Pour plus d'informations, consultez Mots vides et listes de mots vides.

Notes

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.

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 varie selon que WITH NO POPULATION est spécifié ou non 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é

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

Notes

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

Exemples

A. Définition du suivi des modifications manuel

L'exemple ci-après définit le suivi des modifications manuel sur l'index de recherche en texte intégral sur la table JobCandidate de la base de données AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

B. Démarrage d'un remplissage complet

L'exemple ci-après démarre un remplissage complet sur l'index de recherche en texte intégral sur la table JobCandidate de la base de données AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate 
   START FULL POPULATION;
GO