Commencez avec la recherche Full-Text

Les bases de données dans SQL Server sont activées en texte intégral par défaut. Toutefois, pour utiliser un index de recherche en texte intégral sur une table, vous devez configurer la fonctionnalité d’indexation de texte intégral sur les colonnes des tables auxquelles vous souhaitez accéder à l’aide du moteur de Full-Text.

Configuration d’une base de données pour la recherche Full-Text

Pour n’importe quel scénario, un administrateur de base de données effectue les étapes de base suivantes pour configurer les colonnes de table dans une base de données pour la recherche en texte intégral :

  1. Créez un catalogue de texte intégral.

  2. Sur chaque table à rechercher, créez un index de recherche en texte intégral par :

    1. Identifiez chaque colonne de texte que vous souhaitez inclure dans l’index de recherche en texte intégral.

    2. Si une colonne donnée contient des documents stockés sous forme de données binaires (varbinary(max)ou image de données), vous devez spécifier une colonne de table (colonne de type) qui identifie le type de chaque document dans la colonne indexée.

    3. Spécifiez la langue que vous souhaitez utiliser dans la recherche en texte intégral sur les documents de la colonne.

    4. Choisissez le mécanisme de suivi des modifications que vous souhaitez utiliser sur l’index de recherche en texte intégral pour suivre les modifications dans la table de base et ses colonnes.

La recherche en texte intégral prend en charge plusieurs langues par le biais de l’utilisation des composants linguistiques suivants : séparateurs de mots et racineurs, listes de mots vides contenant des stopwords (également appelés mots parasites) et fichiers de thésaurus. Les fichiers de thésaurus et, dans certains cas, les stoplists nécessitent une configuration par un administrateur de base de données. Un fichier de thésaurus donné prend en charge tous les index de recherche en texte intégral qui utilisent la langue correspondante, et une liste d'arrêt donnée peut être associée à autant d'index de recherche en texte intégral que vous voulez.

Configuration d’un catalogue et d’un index Full-Text

Cela implique les étapes de base suivantes :

  1. Créez un catalogue de texte intégral pour stocker des index de recherche en texte intégral.

    Chaque index de recherche en texte intégral doit appartenir à un catalogue de texte intégral. Vous pouvez créer un catalogue de texte distinct pour chaque index de recherche en texte intégral ou associer plusieurs index de recherche en texte intégral à un catalogue donné. Un catalogue de texte intégral est un objet virtuel et n’appartient à aucun groupe de fichiers. Le catalogue est un concept logique qui fait référence à un groupe d’index de recherche en texte intégral.

  2. Créez un index de recherche en texte intégral sur la table ou la vue indexée.

    Un index de recherche en texte intégral est un type spécial d’index fonctionnel basé sur des jetons créé et géré par le moteur de Full-Text. Pour créer une recherche en texte intégral sur une table ou une vue, elle doit avoir un index unique, à colonne unique et non nullable. Le moteur de Full-Text nécessite que cet index unique mappe chaque ligne de la table à une clé compressible unique. Un index de recherche en texte intégral peut inclure char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, et varbinary(max) colonnes. Pour plus d’informations, consultez Créer et gérer des index Full-Text.

Avant d’en savoir plus sur la création d’index de recherche en texte intégral, il est important de prendre en compte la différence entre les index SQL Server standard. Le tableau suivant répertorie les différences.

Index de texte intégral Indexes réguliers du serveur SQL
Un seul index de recherche en texte intégral autorisé par table. Plusieurs index réguliers autorisés par table.
L’ajout de données à des index de recherche en texte intégral, appelé population, peut être demandé par le biais d’une planification ou d’une demande spécifique, ou peut se produire automatiquement avec l’ajout de nouvelles données. Mise à jour automatiquement lorsque les données sur lesquelles elles sont basées sont insérées, mises à jour ou supprimées.
Rassemblés dans la même base de données dans un ou plusieurs catalogues de texte intégral. Pas regroupé.

Choix des options d’un index Full-Text

Cette section traite des éléments suivants :

  • Choix de la langue de colonne

  • Choix d’un groupe de fichiers pour un index de recherche en texte intégral

  • Affectation de l’index de recherche en texte intégral à un catalogue de texte intégral

  • Association d’une liste de mots vides à l’index de recherche en texte intégral

  • Mise à jour d’un index de recherche en texte intégral

Choix de la langue de colonne

Pour plus d’informations sur les éléments à prendre en compte lorsque vous choisissez la langue de colonne, consultez Choisir une langue lors de la création d’un index Full-Text.

Choix d’un groupe de fichiers pour un index Full-Text

Le processus de création d’un index de recherche en texte intégral est assez intensif (à un niveau élevé, il consiste à lire des données à partir de SQL Server, puis à propager les données filtrées à l’index de recherche en texte intégral). En guise de meilleure pratique, recherchez un index de recherche en texte intégral dans le groupe de fichiers de base de données qui est le meilleur pour optimiser les performances d’E/S ou localiser les index de recherche en texte intégral dans un autre groupe de fichiers sur un autre volume.

Lorsque la facilité de gestion est importante pour vous, nous vous recommandons de stocker les données de table et tous les catalogues de texte intégral affiliés dans le même groupe de fichiers. Parfois, pour des raisons de performances, vous pouvez avoir les données de table et l’index de texte intégral dans différents groupes de fichiers stockés sur différents volumes pour optimiser le parallélisme des E/S.

Affectation de l’index Full-Text au catalogue Full-Text

Il est important de planifier le placement des index de recherche en texte intégral pour les tables dans les catalogues de texte intégral.

Nous vous recommandons d’associer des tables aux mêmes caractéristiques de mise à jour (par exemple, un petit nombre de modifications par rapport à un grand nombre de modifications, ou des tables qui changent fréquemment pendant une heure particulière) dans le même catalogue de texte intégral. En configurant des planifications de remplissage de catalogue de texte intégral, les index de recherche en texte intégral restent synchrones avec les tables sans affecter négativement l’utilisation des ressources du serveur de base de données pendant les périodes d’activité élevée de la base de données.

Lorsque vous affectez un tableau à un catalogue de texte intégral, tenez compte des instructions suivantes :

  • Sélectionnez toujours le plus petit index unique disponible pour votre clé unique de texte intégral. (Un index de 4 octets, basé sur un entier est optimal.) Cela réduit considérablement les ressources requises par le service Recherche Microsoft dans le système de fichiers. Si la clé primaire est volumineuse (plus de 100 octets), envisagez de choisir un autre index unique dans la table (ou de créer un autre index unique) comme clé unique de texte intégral. Sinon, si la taille de clé unique de texte intégral dépasse la taille maximale autorisée (900 octets), la population de texte intégral ne pourra pas continuer.

  • Si vous indexez une table qui comporte des millions de lignes, affectez-la à son propre catalogue de texte intégral.

  • Considérez la quantité de modifications qui se produisent dans les tables indexées en texte intégral, ainsi que le nombre total de lignes. Si le nombre total de lignes en cours de modification, ainsi que les nombres de lignes du tableau présents au cours de la dernière population de texte intégral, représente des millions de lignes, affectez le tableau à son propre catalogue de texte intégral.

Association d’une liste de mots vides à l’index Full-Text

SQL Server 2008 introduit des listes de mots vides. Une liste de mots vides est une liste de mots vides, également appelée mots parasites. Une liste de mots vides est associée à chaque index de recherche en texte intégral, et les mots de cette liste de mots sont appliqués aux requêtes de recherche en texte intégral sur cet index. Par défaut, la liste de mots vides système est associée à un nouvel index de recherche en texte intégral. Toutefois, vous pouvez créer et utiliser votre propre liste de mots vides à la place. Pour plus d’informations, consultez Configurer et gérer les mots vides et listes de mots vides pour la recherche en texte intégral.

Par exemple, l’instruction CREATE FULLTEXT STOPLIST suivanteTransact-SQL crée une nouvelle liste de mots vides de texte intégral nommée myStoplist3 en copiant à partir de la liste de mots vides système :

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

L’instruction ALTER FULLTEXT STOPLIST suivanteTransact-SQL modifie une liste de mots d'arrêt nommée myStoplist, en ajoutant le mot « en », d'abord pour l’espagnol, puis pour le français :

ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'Spanish';  
ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'French';  
GO  

Mise à jour d’un index Full-Text

Comme les index SQL Server standard, les index de recherche en texte intégral peuvent être mis à jour automatiquement à mesure que les données sont modifiées dans les tables associées. Il s’agit du comportement par défaut. Vous pouvez également conserver vos index de recherche en texte intégral up-to-date manuellement ou à intervalles planifiés spécifiés. Le remplissage d’un index de recherche en texte intégral peut prendre du temps et consommer beaucoup de ressources. Par conséquent, la mise à jour d’index est généralement effectuée en tant que processus asynchrone qui s’exécute en arrière-plan et conserve l’index de recherche en texte intégral à jour après les modifications apportées à la table de base. La mise à jour d’un index de recherche en texte intégral immédiatement après chaque modification de la table de base peut être gourmande en ressources. Par conséquent, si vous avez un taux de mise à jour/insertion/suppression très élevé, vous pouvez rencontrer une dégradation des performances des requêtes. Si cela se produit, envisagez de planifier des mises à jour de suivi des modifications manuelles pour suivre les nombreuses modifications de temps en temps, plutôt que de concurrencer les requêtes pour les ressources.

Pour surveiller l’état de la population, utilisez les fonctions FULLTEXTCATALOGPROPERTY ou OBJECTPROPERTYEX. Pour obtenir l’état de la population du catalogue, exécutez l’instruction suivante :

SELECT FULLTEXTCATALOGPROPERTY('AdvWksDocFTCat', 'Populatestatus');  

En règle générale, si une population complète est en cours, le résultat retourné est 1.

Exemple : configuration de la recherche Full-Text

L’exemple en deux parties suivant crée un catalogue de texte intégral nommé AdvWksDocFTCat sur la base de données AdventureWorks, puis crée un index de texte intégral sur la Document table dans AdventureWorks2012. Cette instruction crée le catalogue de texte intégral dans le répertoire par défaut spécifié lors de l’installation. Le dossier nommé AdvWksDocFTCat se trouve dans le répertoire par défaut.

  1. Pour créer un catalogue de texte intégral nommé AdvWksDocFTCat, l’exemple utilise une instruction CREATE FULLTEXT CATALOG :

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    
  2. Avant de pouvoir créer un index de recherche en texte intégral dans la table Document, vérifiez que la table possède un index unique, à colonne unique et non nullable. L’instruction CREATE INDEX suivante crée un index unique, ui_ukDocsur la colonne DocumentID de la table Document :

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
    
  3. Une fois que vous avez une clé unique, vous pouvez créer un index de recherche en texte intégral sur la Document table à l’aide de l’instruction CREATE FULLTEXT INDEX suivante.

    CREATE FULLTEXT INDEX ON Production.Document  
    (  
        Document                         --Full-text index column name   
            TYPE COLUMN FileExtension    --Name of column that contains file type information  
            Language 2057                 --2057 is the LCID for British English  
    )  
    KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index  
    WITH CHANGE_TRACKING AUTO            --Population type;  
    GO  
    
    

    Type COLUMN défini dans cet exemple spécifie la colonne de type dans la table qui contient le type du document dans chaque ligne de la colonne « Document » (qui est de type binaire). La colonne de type stocke l’extension de fichier fournie par l’utilisateur : « .doc », «.xls», et ainsi on-of le document dans une ligne donnée. Le moteur Full-Text utilise l’extension de fichier dans une ligne donnée pour appeler le filtre approprié à utiliser pour analyser les données de cette ligne. Une fois que le filtre a analysé les données binaires de la ligne, l’analyseur de mots spécifié analyse le contenu (dans cet exemple, le analyseur de mots pour l’anglais britannique est utilisé). Notez que le processus de filtrage se produit uniquement au moment de l’indexation ou si un utilisateur insère ou met à jour une colonne dans la table de base alors que le suivi automatique des modifications est activé pour l’index de recherche en texte intégral. Pour plus d’informations, consultez Configurer et gérer des filtres pour la recherche.

Tâches courantes

Pour créer un catalogue Full-Text

Pour afficher les index d’une table (ou vue)

Pour créer un index unique

Pour créer un index Full-Text

Pour afficher des informations sur un index Full-Text

Vue catalogue ou gestion dynamique Descriptif
sys.fulltext_index_catalog_usages (Transact-SQL) Retourne une ligne pour chaque catalogue de texte intégral en référence à l'index de texte intégral.
sys.fulltext_index_columns (Transact-SQL) Contient une ligne pour chaque colonne qui fait partie d’un index de texte intégral.
Fragments d'Index de Texte Intégral (sys.fulltext_index_fragmentsTransact-SQL) Un index de texte intégral utilise des tables internes appelées fragments d’index de texte intégral pour stocker les données d’index inversées. Cette vue peut être utilisée pour interroger les métadonnées sur ces fragments. Cette vue contient une ligne pour chaque fragment d’index de recherche en texte intégral dans chaque table qui contient un index de recherche en texte intégral.
sys.fulltext_indexes (Transact-SQL) Contient une ligne par index de texte intégral d’un objet tabulaire.
sys.dm_fts_index_keywords (Transact-SQL) 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 (Transact-SQL) Retourne des informations sur le contenu au niveau du document d’un index de texte intégral pour la table spécifiée. Un mot clé donné peut apparaître dans plusieurs documents.
sys.dm_fts_index_population (Transact-SQL) Retourne des informations sur les populations d’index de recherche en texte intégral actuellement en cours.

Voir aussi

CRÉER UN CATALOGUE TEXTE INTÉGRAL (Transact-SQL)
CRÉER INDEX TEXTE PLEIN (Transact-SQL)
CRÉER UNE LISTE D'ARRÊT DE TEXTE INTÉGRAL (Transact-SQL)
CRÉER TABLE (Transact-SQL)
Alimenter des index de recherche en texte intégral
FULLTEXTCATALOGPROPERTY (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)