sys.dm_fts_index_keywords_by_document (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Retourne des informations sur le contenu de niveau document d'un index de recherche en texte intégral associé à la table spécifiée.

sys.dm_fts_index_keywords_by_document est une fonction de gestion dynamique.

Syntax

sys.dm_fts_index_keywords_by_document
(
    DB_ID('database_name')
    , OBJECT_ID('table_name')
)

Arguments

DB_ID('database_name')

Un appel à la fonction DB_ID . DB_ID est int. Cette fonction accepte un nom de base de données et renvoie l’identifiant de la base de données, qui sys.dm_fts_index_keywords_by_document sert à trouver la base de données spécifiée. Si database_name est omis, la fonction retourne l’ID de la base de données active.

OBJECT_ID('table_name')

Un appel à la fonction OBJECT_ID . OBJECT_ID est int. Cette fonction accepte un nom de table et renvoie l’ID de la table contenant l’index texte intégral à inspecter.

Table retournée

Nom de la colonne Type de données Pouvant être nul Description
keyword 1 varbinary(128) Non Représentation hexadécimale du mot clé stocké dans l'index de recherche en texte intégral.
display_term 1 nvarchar(4000) Non Format explicite du mot clé. Ce format est dérivé du format interne stocké dans l'index de recherche en texte intégral.
column_id int Non ID de la colonne à partir de laquelle le mot clé actuel a été indexé en texte intégral.
document_id bigint Oui ID de la ligne ou du document à partir duquel le terme actuel a été indexé en texte intégral. Cet ID correspond à la valeur de clé de texte intégral de cette ligne ou de ce document.
occurrence_count int Oui Nombre d’occurrences du mot-clé courant dans le document ou la ligne indiquée par document_id. Lorsque « search_property_name » est spécifié, il occurrence_count affiche uniquement le nombre d’occurrences du mot-clé courant dans la propriété de recherche spécifiée au sein du document ou de la ligne.

10xFF représente le caractère spécial qui indique la fin d’un fichier ou d’un jeu de données.

Remarques

Les informations fournies sys.dm_fts_index_keywords_by_document par elles sont utiles pour découvrir, entre autres choses :

  • Nombre total de mots clés contenus dans un index de recherche en texte intégral.
  • Si un mot clé fait partie d'une ligne ou d'un document donné.
  • Combien de fois un mot-clé apparaît dans l’index intégral du texte ? C’est-à-dire, SUM(occurrence_count) WHERE keyword = <keyword_value>
  • Nombre de fois qu'un mot clé apparaît dans une ligne ou un document donné.
  • Nombre de mots clés contenus dans une ligne ou un document donné.

De plus, vous pouvez également utiliser les informations fournies par sys.dm_fts_index_keywords_by_document pour récupérer tous les mots-clés appartenant à un document ou une ligne donnée.

Lorsque la colonne de clé en texte intégral est un type de données entier, comme recommandé, elle document_id correspond directement à la valeur de la clé en texte intégral dans la table de base.

En revanche, lorsque la colonne de la clé en texte intégral utilise un type de données non entier, document_id elle ne représente pas la clé en texte intégral dans la table de base. Dans ce cas, pour identifier la ligne dans la table de base qui est retournée par dm_fts_index_keywords_by_document, vous devez relier cette vue aux résultats rendus par sp_fulltext_keymappings.

Avant de pouvoir les joindre, vous devez stocker la sortie de la procédure stockée dans une table temp. Ensuite, vous pouvez relier la document_id colonne de dm_fts_index_keywords_by_document avec la DocId colonne retournée par cette procédure stockée. Une colonne d'horodatage ne peut pas recevoir de valeurs au moment de l'insertion, car elles sont générées automatiquement par SQL Server. Par conséquent, la colonne timestamp doit être convertie en colonnes varbinary(8). L'exemple suivant affiche ces étapes. Dans cet exemple, @table_id est l’ID de votre table, database_name est le nom de votre base de données, et table_name est le nom de votre table.

USE database_name;
GO

CREATE TABLE #MyTempTable
(
    docid INT PRIMARY KEY,
    [key] INT NOT NULL
);

DECLARE @db_id AS INT = DB_ID(N'database_name');
DECLARE @table_id AS INT = OBJECT_ID(N'table_name');

INSERT INTO #MyTempTable
EXECUTE sp_fulltext_keymappings @table_id;

SELECT *
FROM sys.dm_fts_index_keywords_by_document(@db_id, @table_id) AS kbd
     INNER JOIN #MyTempTable AS tt
         ON tt.[docid] = kbd.document_id;
GO

Permissions

Nécessite SELECT une autorisation sur les colonnes couvertes par l’index intégral et CREATE FULLTEXT CATALOG les permissions.

Examples

A. Afficher le contenu indexé en texte intégral au niveau du document

L'exemple suivant affiche le contenu de l'index de recherche en texte intégral au niveau du document dans la table HumanResources.JobCandidate de l'exemple de base de données AdventureWorks2025.

Note

Vous pouvez créer cet index en exécutant l’exemple fourni pour la HumanResources.JobCandidate table dans CREATE FULLTEXT INDEX.

SELECT *
FROM sys.dm_fts_index_keywords_by_document(DB_ID('AdventureWorks2025'), OBJECT_ID('HumanResources.JobCandidate'));
GO