ALTER FULLTEXT INDEX (Transact-SQL)

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

Icône Lien de rubrique Conventions de la 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 ]
     [ STATISTICAL_SEMANTICS ]
 [,...n] )
     [ WITH NO POPULATION ]
   | ALTER COLUMN column_name
     { ADD | DROP } STATISTICAL_SEMANTICS
     [ 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 ] 
   | SET SEARCH PROPERTY LIST [ = ] { OFF | property_list_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 ; DISABLE désactive l'index de recherche en texte intégral. La table ne prend pas en charge les requêtes de texte intégral tant 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.

    [!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 (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 rempli pour que les requêtes de texte intégral fonctionnent dans la colonne en question.

    [!REMARQUE]

    Le remplissage 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 lexical de texte intégral. Pour plus d'informations, consultez Configurer et gérer des filtres pour la recherche.

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

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

  • STATISTICAL_SEMANTICS
    Crée les index de ressemblance de documents et d'expressions clés supplémentaires qui font partie de l'indexation sémantique statistique. Pour plus d'informations, consultez Recherche sémantique (SQL Server).

  • [ ,...n]
    Indique que plusieurs colonnes peuvent être spécifiées pour les clauses ADD, ALTER 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 rempli 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 rempli que si l'utilisateur exécute une commande START...POPULATION.

    Lorsque NO POPULATION est spécifié, SQL Server ne remplit pas l'index. L'index est rempli uniquement lorsque l'utilisateur lance une commande ALTER FULLTEXT INDEX...START POPULATION. Lorsque NO POPULATION n'est pas spécifié, SQL Server remplit 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 à un remplissage complet 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.

  • {ADD | DROP } STATISTICAL_SEMANTICS
    Active ou désactive l'indexation sémantique statistique pour les colonnes spécifiées. Pour plus d'informations, consultez Recherche sémantique (SQL Server).

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

    • 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 le dernier remplissage 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'un remplissage complet (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. Le remplissage du suivi des modifications doit être activé 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 tout remplissage en cours ; ou arrête ou reprend tout remplissage 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 remplissages complets ; en effet, les autres types de remplissage 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 Configurer et gérer les mots vides et listes de mots vides pour la recherche en texte intégral.

  • SET SEARCH PROPERTY LIST { OFF | property_list_name } [ WITH NO POPULATION ]
    Modifie la liste de propriétés de recherche associée à l'index, le cas échéant.

    • OFF
      Indique qu'aucune liste de propriétés ne doit être associée à l'index de recherche en texte intégral. Lorsque vous désactivez la liste des propriétés de recherche d'un index de recherche en texte intégral (ALTER FULLTEXT INDEX … SET SEARCH PROPERTY LIST OFF), la recherche de propriétés sur la table de base n'est plus possible.

      Par défaut, lorsque vous désactivez une liste des propriétés de recherche existante, l'index de recherche en texte intégral est rempli à nouveau automatiquement. Si vous spécifiez WITH NO POPULATION lorsque vous désactivez la liste des propriétés de recherche, le remplissage automatique n'a pas lieu. Toutefois, nous vous recommandons d'exécuter finalement un remplissage complet sur cet index de recherche en texte intégral à votre propre convenance. Le remplissage de l'index de recherche en texte intégral supprime les métadonnées spécifiques à la propriété de chaque propriété de recherche supprimée, en rendant l'index de recherche en texte intégral plus petit et plus efficace.

    • property_list_name
      Spécifie le nom de la liste de propriétés de recherche à associer à l'index de recherche en texte intégral.

      L'ajout d'une liste de propriétés de recherche à un index de recherche en texte intégral nécessite le remplissage de l'index pour indexer les propriétés de recherche inscrites pour la liste de propriétés de recherche associée. Si vous spécifiez WITH NO POPULATION lorsque vous ajoutez la liste des propriétés de recherche, vous devrez effectuer un remplissage sur l'index, à un moment approprié.

      Important

      Si l'index de recherche en texte intégral était associé précédemment à une recherche différente, il doit être reconstruit suite au changement de la liste de propriétés pour remettre l'index dans un état cohérent. L'index est tronqué immédiatement et reste vide jusqu'à ce que le remplissage complet s'exécute. Pour plus d'informations sur les circonstances dans lesquelles la modification de la liste des propriétés de recherche provoque une reconstruction, consultez la section « Notes » dans la suite de cette rubrique.

      [!REMARQUE]

      Vous pouvez associer une liste de propriétés de recherche donnée à plusieurs index de recherche en texte intégral dans la même base de données.

      Trouver les listes de propriétés de recherche sur la base de données actuelle

      Pour plus d'informations sur les listes de propriétés de recherche, consultez Rechercher les propriétés du document à l'aide des listes de propriétés de recherche.

Notes

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

Le remplissage 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é

Un remplissage complet est effectué sur l'index.

Non activé

Spécifié

Le remplissage 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é

Un remplissage complet est effectué sur l'index.

Pour plus d'informations sur le remplissage des index de recherche en texte intégral, consultez Alimenter des index de recherche en texte intégral.

La modification de la liste des propriétés de recherche provoque la reconstruction de l'index

La première fois qu'un index de recherche en texte intégral est associé à une liste de propriétés de recherche, l'index doit faire l'objet d'un nouveau remplissage afin d'indexer des termes de recherche spécifiques aux propriétés. Les données d'index existantes ne sont pas tronquées.

Toutefois, si vous associez l'index de recherche en texte intégral à une liste de propriétés différente, l'index est reconstruit. La reconstruction tronque immédiatement l'index de recherche en texte intégral, en supprimant toutes les données existantes, et l'index doit être de nouveau rempli. Pendant le remplissage, les requêtes de texte intégral sur la table de base recherchent uniquement les lignes de table qui ont déjà été indexées par le remplissage. Les données d'index remplies incluront des métadonnées des propriétés inscrites de la liste de propriétés de recherche récemment ajoutée.

Scénarios à l'origine d'une reconstruction :

  • Basculement direct vers une liste de propriétés de recherche différente (consultez le « Scénario A », dans la suite de cette section).

  • Désactivation de la liste de propriétés de recherche et association ultérieure de l'index à toute liste de propriétés de recherche (consulter le « Scénario B » dans la suite de cette section)

[!REMARQUE]

Pour plus d'informations sur fonctionnement de la recherche en texte intégral avec les listes de propriétés de recherche, consultez Rechercher les propriétés du document à l'aide des listes de propriétés de recherche. Pour plus d'informations sur les remplissages complets, consultez Alimenter des index de recherche en texte intégral.

Scénario A : basculement direct vers une liste de propriétés de recherche différente

  1. Un index de recherche en texte intégral est créé sur table_1 avec une liste de propriétés de recherche spl_1 :

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index 
       WITH SEARCH PROPERTY LIST=spl_1, 
       CHANGE_TRACKING OFF, NO POPULATION; 
    
  2. Un remplissage complet est exécuté sur l'index de recherche en texte intégral :

    ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
    
  3. L'index de recherche en texte intégral est associé ultérieurement à une liste de propriétés de recherche différente, spl_2, à l'aide de l'instruction suivante :

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
    

    Cette instruction provoque un remplissage complet, ce qui correspond au comportement par défaut. Toutefois, avant de commencer ce remplissage, le moteur d'indexation et de recherche en texte intégral tronque automatiquement l'index.

Scénario B : désactivation de la liste de propriétés de recherche et association ultérieure de l'index à toute liste de propriétés de recherche

  1. Un index de recherche en texte intégral est créé sur table_1 avec une liste de propriétés de recherche spl_1, suivi d'un remplissage complet automatique (comportement par défaut) :

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index 
       WITH SEARCH PROPERTY LIST=spl_1; 
    
  2. La liste des propriétés de recherche est désactivée, comme suit :

    ALTER FULLTEXT INDEX ON table_1 
       SET SEARCH PROPERTY LIST OFF WITH NO POPULATION; 
    
  3. L'index de recherche en texte intégral est encore une fois associé à la même liste de propriétés de recherche ou à une liste différente.

    Par exemple, l'instruction suivante ré-associe-l'index de recherche en texte intégral à la liste des propriétés de recherche d'origine, spl_1 :

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_1;
    

    Cette instruction entraîne un remplissage complet, ce qui correspond au comportement par défaut.

    [!REMARQUE]

    La reconstruction serait également requise pour une liste de propriétés de recherche différente, telle que spl_2.

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. Si SET SEARCH PROPERTY LIST est spécifié, l'utilisateur doit avoir l'autorisation REFERENCES sur la liste des propriétés de recherche. Le propriétaire de la liste de mots vides spécifiée ou de la liste des propriétés de recherche peut accorder l'autorisation REFERENCES, s'il dispose d'autorisations ALTER FULLTEXT CATALOG.

[!REMARQUE]

L'autorisation REFERENCES 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 AdventureWorks.

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

B.Association d'une liste de propriétés à un index de recherche en texte intégral

L'exemple suivant associe la liste de propriétés DocumentPropertyList à l'index de recherche en texte intégral sur la table Production.Document de la base de données AdventureWorks. Cette instruction ALTER FULLTEXT INDEX entraîne un remplissage complet, ce qui correspond au comportement par défaut de la clause SET SEARCH PROPERTY LIST.

[!REMARQUE]

Pour obtenir un exemple qui crée la liste de propriétés DocumentPropertyList, consultez CREATE SEARCH PROPERTY LIST (Transact-SQL).

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON Production.Document 
   SET SEARCH PROPERTY LIST DocumentPropertyList; 
GO

C.Suppression d'une liste de propriétés de recherche

L'exemple suivant supprime la liste de propriétés DocumentPropertyList de l'index de recherche en texte intégral sur la table Production.Document de la base de données AdventureWorks. Dans cet exemple, il n'est pas urgent de supprimer les propriétés de l'index. Par conséquent, l'option WITH NO POPULATION est spécifiée. Toutefois, la recherche au niveau de propriété est autorisée plus longtemps par rapport à cet index de recherche en texte intégral.

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON Production.Document 
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION; 
GO

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

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

Voir aussi

Référence

sys.fulltext_indexes (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

DROP FULLTEXT INDEX (Transact-SQL)

Concepts

Recherche en texte intégral (SQL Server)

Alimenter des index de recherche en texte intégral