Activer la recherche sémantique sur les tables et les colonnes

S’applique à :SQL Server

Décrit la procédure d'activation ou de désactivation de l'indexation sémantique statistique sur des colonnes sélectionnées qui contiennent des documents ou du texte.

La recherche sémantique statistique utilise les index créés par la recherche en texte intégral et crée des index supplémentaires. Conséquence de cette dépendance sur la recherche en texte intégral, vous créez un index sémantique lorsque vous définissez un nouvel index de recherche en texte intégral ou lorsque vous modifiez un index de recherche en texte intégral existant. Vous pouvez créer un index sémantique à l’aide d’instructions Transact-SQL ou à l’aide de l’Assistant Indexation de texte intégral et d’autres boîtes de dialogue dans SQL Server Management Studio, comme décrit dans cet article.

Créer un index sémantique

Conditions requises et restrictions pour la création d’un index sémantique

  • Vous pouvez créer un index sur des objets de base de données pris en charge pour l'indexation de texte intégral, notamment les tables et les vues indexées.

  • Avant de pouvoir activer l'indexation sémantique pour des colonnes spécifiques, les conditions préalables suivantes doivent être remplies :

    • Un catalogue de texte intégral doit exister pour la base de données.

    • La table doit avoir un index de recherche en texte intégral.

    • Les colonnes sélectionnées doivent participer à l'index de recherche en texte intégral.

    Vous pouvez créer et activer toutes ces conditions préalables en même temps.

  • Vous pouvez créer un index sémantique sur des colonnes présentant l'un des types de données pris en charge pour l'indexation de texte intégral. Pour plus d’informations, consultez Créer et gérer des index de recherche en texte intégral.

  • Vous pouvez spécifier tout type de document pris en charge pour l’indexation de texte intégral pour des colonnes varbinary(max) . Pour plus d’informations, consultez Guide pratique pour déterminer les types de documents pouvant être indexés dans cet article.

  • L’indexation sémantique crée deux types d’index pour les colonnes que vous sélectionnez : un index d’expressions clés et un index de similarité de document. Vous ne pouvez pas sélectionner un seul type d’index ou l’autre lorsque vous activez l’indexation sémantique. En revanche, vous interroger ces deux index de manière indépendante. Pour plus d’informations, consultez Rechercher des expressions clés dans les documents avec la recherche sémantique et Rechercher des documents similaires ou connexes avec la recherche sémantique.

  • Si vous ne spécifiez pas explicitement un LCID pour un index sémantique, seul le langage principal et ses statistiques de langue associées sont utilisés pour l’indexation sémantique.

  • Si vous spécifiez une langue pour une colonne pour laquelle le modèle de langue n’est pas disponible, la création de l’index échoue et retourne un message d’erreur.

Créer un index sémantique en l’absence d’index de recherche en texte intégral

Lorsque vous créez un index de recherche en texte intégral avec l’instruction CREATE FULLTEXT INDEX , vous pouvez activer l’indexation sémantique au niveau de la colonne en spécifiant le mot clé STATISTICAL_SEMANTICS dans le cadre de la définition de colonne. Vous pouvez également activer l'indexation sémantique lorsque vous utilisez l'Assistant Indexation de texte intégral pour créer un index de recherche en texte intégral.

Créer un index sémantique à l'aide de Transact-SQL

Appelez l’instruction CREATE FULLTEXT INDEX et spécifiez STATISTICAL_SEMANTICS pour chaque colonne sur laquelle vous souhaitez créer un index sémantique. Pour plus d’informations sur toutes les options de cette instruction, consultez CREATE FULLTEXT INDEX (Transact-SQL).

Exemple 1 : créer un index unique, un index de recherche en texte intégral et un index sémantique

L’exemple suivant crée un catalogue de texte intégral par défaut. ft L’exemple crée ensuite un index unique sur la JobCandidateID colonne de la HumanResources.JobCandidate table de l’exemple AdventureWorks2022 de base de données. Cet index unique est requis en tant que colonne clé pour un index de recherche en texte intégral. L’exemple crée ensuite un index de recherche en texte intégral et un index sémantique sur la Resume colonne.

CREATE FULLTEXT CATALOG ft AS DEFAULT
GO

CREATE UNIQUE INDEX ui_ukJobCand
    ON HumanResources.JobCandidate(JobCandidateID)
GO

CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
    (Resume
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX JobCandidateID
    WITH STOPLIST = SYSTEM
GO

Exemple 2 : créer un index sémantique et de recherche en texte intégral sur plusieurs colonnes avec remplissage différé de l'index

L'exemple suivant crée un catalogue de texte intégral, documents_catalog, dans l'exemple de base de données AdventureWorks2022. 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 créé sur les colonnes et les TitleDocumentSummaryDocument colonnes de la Production.Document table, tandis que l’index sémantique est créé uniquement sur la Document colonne. Cet index de recherche en texte intégral utilise le catalogue de texte intégral nouvellement créé et un index de clé unique existant. PK_Document_DocumentID Comme recommandé, cette clé d’index est créée sur une colonne entière. DocumentID L'exemple spécifie le LCID de l'anglais, 1033, qui est la langue des données dans les colonnes.

Cet exemple spécifie également que le suivi des modifications est désactivé et sans remplissage. Plus tard, pendant les heures creuses, l’exemple utilise une ALTER FULLTEXT INDEX instruction pour démarrer une population complète sur le nouvel index et activer le suivi automatique des modifications.

CREATE FULLTEXT CATALOG documents_catalog
GO

CREATE FULLTEXT INDEX ON Production.Document
    (
    Title
        Language 1033,
    DocumentSummary
        Language 1033,
    Document
        TYPE COLUMN FileExtension
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX PK_Document_DocumentID
        ON documents_catalog
        WITH CHANGE_TRACKING OFF, NO POPULATION
GO

Plus tard, pendant une heure creuse, l'index est rempli :

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO
GO

Créer un nouvel index sémantique à l'aide de SQL Server Management Studio

Exécutez l’Assistant Indexation de texte intégral et activez Sémantiques statistiques dans la page Sélectionner les colonnes de la table pour chaque colonne sur laquelle vous souhaitez créer un index sémantique. Pour plus d’informations, notamment sur le démarrage de l’Assistant Indexation de texte intégral, consultez Utiliser l’Assistant Indexation de texte intégral.

Créer un index sémantique lorsqu’il existe un index de recherche en texte intégral existant

Vous pouvez ajouter l’indexation sémantique lorsque vous modifiez un index de recherche en texte intégral existant avec l’instruction ALTER FULLTEXT INDEX . Vous pouvez également ajouter l’indexation sémantique à l’aide de différentes boîtes de dialogue dans SQL Server Management Studio.

Ajouter un index sémantique à l'aide de Transact-SQL

Appelez l’instruction ALTER FULLTEXT INDEX avec les options décrites dans la section suivante, pour chaque colonne sur laquelle vous souhaitez ajouter un index sémantique. Pour plus d’informations sur toutes les options de cette instruction, consultez ALTER FULLTEXT INDEX (Transact-SQL).

Les index de recherche en texte intégral et sémantique sont reremplis après un appel à ALTER, sauf indication contraire.

  • Pour ajouter l’indexation de texte intégral uniquement à une colonne, utilisez la ADD syntaxe.

  • Pour ajouter l’indexation de texte intégral et sémantique à une colonne, utilisez la ADD syntaxe avec l’option STATISTICAL_SEMANTICS .

  • Pour ajouter l’indexation sémantique à une colonne déjà activée pour l’indexation de texte intégral, utilisez l’option ADD STATISTICAL_SEMANTICS . Vous ne pouvez ajouter l’indexation sémantique qu’à une seule colonne dans une seule ALTER instruction.

Exemple : ajouter l'indexation sémantique à une colonne dont l'indexation de texte intégral est déjà activée

L’exemple suivant modifie un index de recherche en texte intégral existant sur Production.Document la table de l’exemple AdventureWorks2022 de base de données. L’exemple ajoute un index sémantique sur la Document colonne de la Production.Document table, qui a déjà un index de recherche en texte intégral. L’exemple spécifie que l’index n’est pas rempli automatiquement.

ALTER FULLTEXT INDEX ON Production.Document
    ALTER COLUMN Document
        ADD Statistical_Semantics
    WITH NO POPULATION
GO

Ajouter un index sémantique à l'aide de SQL Server Management Studio

Vous pouvez modifier les colonnes activées pour l’indexation de texte intégral et sémantique dans la page Colonnes d’index de recherche en texte intégral de la boîte de dialogue Propriétés d’index de recherche en texte intégral . Pour plus d’informations, consultez Gérer les index de recherche en texte intégral.

Modifier un index sémantique

Exigences et restrictions relatives à la modification d’un index existant

  • Vous ne pouvez pas modifier un index existant pendant que la population de l’index est en cours. Pour plus d’informations sur la surveillance de la progression du remplissage d’index, consultez Gérer et surveiller la recherche sémantique.

  • Vous ne pouvez pas ajouter d’indexation à une colonne et modifier ou supprimer l’indexation pour la même colonne, dans un seul appel à l’instruction ALTER FULLTEXT INDEX .

Supprimer un index sémantique

Vous pouvez supprimer l’indexation sémantique lorsque vous modifiez un index de recherche en texte intégral existant avec l’instruction ALTER FULLTEXT INDEX . Vous pouvez également supprimer l’indexation sémantique à l’aide de différentes boîtes de dialogue dans SQL Server Management Studio.

Supprimer un index sémantique à l'aide de Transact-SQL

Pour supprimer l’indexation sémantique uniquement à partir d’une colonne ou d’une colonne, appelez l’instruction ALTER FULLTEXT INDEX avec l’option ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS . Vous pouvez supprimer l’indexation à partir de plusieurs colonnes dans une seule ALTER instruction.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Pour supprimer l’indexation de texte intégral et sémantique à partir d’une colonne, appelez l’instruction ALTER FULLTEXT INDEX avec l’option ALTER COLUMN <column_name> DROP .

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Supprimer un index sémantique avec SQL Server Management Studio

Vous pouvez modifier les colonnes activées pour l’indexation de texte intégral et sémantique dans la page Colonnes d’index de recherche en texte intégral de la boîte de dialogue Propriétés d’index de recherche en texte intégral . Pour plus d’informations, consultez Gérer les index de recherche en texte intégral.

Conditions requises et restrictions pour la suppression d’un index sémantique

  • Vous ne pouvez pas supprimer l’indexation de texte intégral à partir d’une colonne tout en conservant l’indexation sémantique. L'indexation sémantique dépend de l'indexation de texte intégral pour les résultats de ressemblance de document.

  • Vous ne pouvez pas spécifier l’option NO POPULATION lorsque vous supprimez l’indexation sémantique à partir de la dernière colonne d’une table pour laquelle l’indexation sémantique a été activée. Un cycle de remplissage est obligatoire pour supprimer les résultats indexés précédemment.

Vérifier si la recherche sémantique est activée sur des objets de base de données

La recherche sémantique est-elle activée pour une base de données ?

Interrogez la IsFullTextEnabled propriété de la fonction de métadonnées DATABASEPROPERTYEX (Transact-SQL ).

Une valeur de retour indique 1 que la recherche en texte intégral et la recherche sémantique sont activées pour la base de données. Une valeur de retour indiquant 0 qu’elles ne sont pas activées.

SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO

La recherche sémantique est-elle activée pour une table ?

Interrogez la TableFullTextSemanticExtraction propriété de la fonction de métadonnées OBJECTPROPERTYEX (Transact-SQL ).

Une valeur de retour de 1 indique que la recherche sémantique est activée pour la table ; une valeur de retour de 0 indique qu’elle n’est pas activée.

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO

La recherche sémantique est-elle activée pour une colonne ?

Pour déterminer si la recherche sémantique est activée pour une colonne spécifique :

  • Interrogez la StatisticalSemantics propriété de la fonction de métadonnées COLUMNPROPERTY (Transact-SQL ).

    Une valeur de retour de 1 indique que la recherche sémantique est activée pour la colonne ; une valeur de retour de 0 indique qu’elle n’est pas activée.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics');
    GO
    
  • Interrogez l’affichage catalogue sys.fulltext_index_columns (Transact-SQL) pour l’index de recherche en texte intégral.

    La valeur 1 dans la statistical_semantics colonne indique que la colonne spécifiée est activée pour l’indexation sémantique en plus de l’indexation de texte intégral.

    SELECT * FROM sys.fulltext_index_columns
    WHERE object_id = OBJECT_ID('table_name');
    GO
    
  • Dans l’Explorateur d’objets dans Management Studio, cliquez avec le bouton droit sur une colonne et sélectionnez Propriétés. Dans la page Général de la boîte de dialogue Propriétés de la colonne , vérifiez la valeur de la propriété Statistical Semantics .

    Une valeur True indique que la colonne spécifiée est activée pour l'indexation sémantique en plus de l'indexation de texte intégral.

Vérifier les langues prises en charge pour la recherche sémantique

Moins de langues sont prises en charge pour l'indexation sémantique que pour l'indexation de texte intégral. Par conséquent, il peut y avoir des colonnes que vous pouvez indexer pour la recherche en texte intégral, mais pas pour la recherche sémantique.

Interrogez l’affichage catalogue sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages;
GO

Les langues suivantes sont prises en charge pour l'indexation sémantique. Cette liste représente la sortie de l’affichage catalogue sys.fulltext_semantic_languages (Transact-SQL), triée par LCID.

Langage LCID
Chinois traditionnel 1028
Allemand 1031
Anglais (US) 1033
Français 1036
Italien 1040
Brésilien 1046
Russe 1049
Suédois 1053
Chinois simplifié 2052
British English 2057
Portugais 2070
Chinois (Hong Kong, SAR, PRC) 2070
Espagnol 3082
Chinese (Singapore) 4100
Chinese (Macao (R.A.S.)) 5124

Note

Si les résultats sont vides, vous devez télécharger et installer la base de données Des statistiques linguistiques sémantiques. Pour plus d’informations, consultez Installer, attacher et inscrire la base de données de statistiques linguistiques sémantiques.

Déterminer quels types de documents peuvent être indexés

Interrogez la vue catalogue sys.fulltext_document_types (Transact-SQL).

Si le type de document que vous souhaitez indexer ne figure pas dans la liste des types pris en charge, vous devrez peut-être localiser, télécharger et installer des filtres supplémentaires. Pour plus d’informations, consultez Afficher ou modifier des filtres et des analyseurs lexicaux inscrits.

Bonne pratique : Créer un groupe de fichiers distinct pour les index de recherche en texte intégral et sémantique

Créez un groupe de fichiers séparé pour les index sémantiques et de recherche en texte intégral si l'allocation d'espace disque pose problème. Les index sémantiques sont créés dans le même groupe de fichiers que l'index de recherche en texte intégral. Un index sémantique entièrement rempli peut contenir un grand nombre de données.

Problème : la recherche sur une colonne spécifique ne retourne aucun résultat

Est-ce qu'un LCID non-Unicode a été spécifié pour une langue Unicode ?

Il est possible d'activer l'indexation sémantique sur un type de colonne non-Unicode avec un LCID de langue qui comporte uniquement des termes Unicode, tels que LCID 1049 pour le russe. Dans ce cas, aucun résultat n’est retourné à partir des index sémantiques de cette colonne.