Share via


sys.dm_fts_index_keywords_by_document (Transact-SQL)

Vengono restituite informazioni sul contenuto a livello di documento di un indice full-text per la tabella specificata. Una determinata parola chiave può essere inclusa in diversi documenti.

sys.dm_fts_index_keywords_by_document è una funzione a gestione dinamica.

Nota

Per visualizzare informazioni sull'indice full-text di livello superiore a livello della parola chiave, utilizzare la funzione a gestione dinamica sys.dm_fts_index_keywords (Transact-SQL).

Sintassi

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

Argomenti

  • db_id('database_name')
    Chiamata alla funzione DB_ID(). Tramite tale funzione viene accettato un nome di database e viene restituito l'ID database, utilizzato da sys.dm_fts_index_keywords_by_document per individuare il database specificato. Se database_name viene omesso, viene restituito l'ID del database corrente.

  • object_id('table_name')
    Chiamata alla funzione OBJECT_ID(). Tramite tale funzione viene accettato un nome di tabella e viene restituito l'ID della tabella che contiene l'indice full-text da controllare.

Tabella restituita

Colonna

Tipo di dati

Descrizione

keyword

nvarchar(4000)

Rappresentazione esadecimale della parola chiave archiviata nell'indice full-text.

NotaNota
OxFF rappresenta il carattere speciale che indica la fine di un file o di un set di dati.

display_term

nvarchar(4000)

Formato leggibile della parola chiave derivato dal formato interno archiviato nell'indice full-text.

NotaNota
OxFF rappresenta il carattere speciale che indica la fine di un file o di un set di dati.

column_id

int

ID della colonna utilizzata per eseguire l'indicizzazione full-text della parola chiave corrente.

document_id

int

ID della riga o del documento utilizzato per eseguire l'indicizzazione full-text del termine corrente. L'ID corrisponde al valore della chiave full-text della riga o del documento specificato.

occurrence_count

int

Numero di occorrenze della parola chiave corrente nella riga o nel documento indicato da document_id.

Osservazioni

Le informazioni restituite da sys.dm_fts_index_keywords_by_document sono utili per individuare, tra gli altri, gli elementi seguenti:

  • Numero totale di parole chiave contenute in un indice full-text.

  • Appartenenza di una parola chiave a una riga oppure a un documento specificato.

  • Numero di volte in cui una parola chiave è presente nell'indice full-text intero, ovvero:

    ( SUM ( occurrence_count ) WHERE keyword=keyword_value )

  • Numero di volte in cui una parola chiave è presente in una riga oppure in un documento specificato.

  • Numero di parole chiave contenute in una riga oppure in un documento specificato.

È possibile inoltre utilizzare le informazioni fornite da sys.dm_fts_index_keywords_by_document per recuperare tutte le parole chiave che appartengono a una riga oppure a un documento specificato.

Quando la colonna della chiave full-text è, come consigliato, un tipo di dati integer, viene eseguito il mapping diretto di document_id al valore della chiave full-text nella tabella di base.

Quando invece nella colonna della chiave full-text viene utilizzato un tipo di dati diverso da integer, document_id non rappresenta la chiave full-text della tabella di base. In questo caso, per identificare la riga restituita da dm_fts_index_keywords_by_document nella tabella di base, è necessario creare un join di questa vista con i risultati restituiti da sp_fulltext_keymappings. Prima che sia possibile creare i join, è necessario archiviare l'output della stored procedure in una tabella temporanea e creare un join della colonna document_id di dm_fts_index_keywords_by_document alla colonna DocId restituita da questa stored procedure. Si noti che una colonna timestamp non può ricevere valori al momento dell'inserimento perché questi vengono generati automaticamente da SQL Server. È pertanto necessario convertire la colonna timestamp nelle colonne varbinary(8). Nell'esempio seguente sono illustrati i passaggi per l'operazione. In questo esempio, table_id è l'ID della tabella, database_name è il nome del database e table_name è il nome della tabella.

USE database_name;
GO
CREATE TABLE #MyTempTable 
   (
      docid INT PRIMARY KEY ,
      [key] INT NOT NULL
   );
DECLARE @db_id int = db_id(N'database_name');
DECLARE @table_id int = OBJECT_ID(N'table_name');
INSERT INTO #MyTempTable EXEC sp_fulltext_keymappings @table_id;
SELECT * FROM sys.dm_fts_index_keywords_by_document 
   ( @db_id, @table_id ) kbd
   INNER JOIN #MyTempTable tt ON tt.[docid]=kbd.document_id;
GO

Autorizzazioni

Sono necessarie le autorizzazioni CREATE FULLTEXT CATALOG e SELECT per le colonne analizzate dall'indice full-text.

Esempi

A. Visualizzazione del contenuto dell'indice full-text a livello di documento

Nell'esempio seguente viene visualizzato il contenuto dell'indice full-text a livello di documento nella tabella HumanResources.JobCandidate del database di esempio AdventureWorks2008R2.

Nota

È possibile creare questo indice eseguendo l'esempio fornito per la tabella HumanResources.JobCandidate in CREATE FULLTEXT INDEX (Transact-SQL).

SELECT * FROM sys.dm_fts_index_keywords_by_document(db_id('AdventureWorks2008R2'), 
object_id('HumanResources.JobCandidate'));
GO