Поделиться через


sys.dm_fts_index_keywords_by_document (Transact-SQL)

Возвращает сведения о содержимом полнотекстового индекса на уровне документа для указанной таблицы. Данное ключевое слово может встречаться в нескольких документах.

Функция sys.dm_fts_index_keywords_by_document является функцией динамического управления.

ПримечаниеПримечание

Чтобы просмотреть сведения о полнотекстовом индексе более высокого уровня — на уровне ключевых слов, используйте функцию динамического управления sys.dm_fts_index_keywords (Transact-SQL).

Синтаксис

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

Аргументы

  • db_id('database_name')
    Вызов функции DB_ID(). Эта функция принимает имя базы данных и возвращает идентификатор базы данных, который затем используется функцией sys.dm_fts_index_keywords_by_document для поиска указанной базы данных. Если аргумент database_name не указан, возвращается идентификатор текущей базы данных.

  • object_id('table_name')
    Вызов функции OBJECT_ID(). Эта функция принимает имя таблицы и возвращает идентификатор таблицы, содержащей полнотекстовый индекс для проверки.

Возвращенная таблица

Столбец

Тип данных

Описание

keyword

nvarchar(8000)

Шестнадцатеричное представление ключевого слова, которое хранится в полнотекстовом индексе.

ПримечаниеПримечание
OxFF представляет собой специальный символ, который служит признаком конца файла или набора данных.

display_term

nvarchar(8000)

Ключевое слово в немашинном (предназначенном для человека) формате. Этот формат является производным от внутреннего формата хранения полнотекстового индекса.

ПримечаниеПримечание
OxFF представляет собой специальный символ, который служит признаком конца файла или набора данных.

column_id

int

Идентификатор столбца, содержащий данное ключевое слово, индексированный полнотекстовым индексом.

document_id

int

Идентификатор документа или строки, содержащей текущий термин, индексированный полнотекстовым индексом. Данный идентификатор соответствует значению полнотекстового ключа этого документа или строки.

occurrence_count

int

Число вхождений текущего ключевого слова в документ или строку, указанных идентификатором document_id.

Замечания

Данные, возвращаемые функцией sys.dm_fts_index_keywords_by_document, позволяют, в частности, выяснить следующее:

  • общее число ключевых слов, содержащихся в полнотекстовом индексе;

  • является ли ключевое слово частью данного документа или строки;

  • сколько раз ключевое слово встречается во всем полнотекстовом индексе, а именно:

    (SUM(число_вхождений) WHERE ключевое_слово=значение_ключевого_слова);

  • сколько раз ключевое слово встречается в данном документе или строке;

  • сколько ключевых слов содержит данный документ или строка.

Кроме того, с помощью данных, предоставляемых функцией sys.dm_fts_index_keywords_by_document, можно получить все ключевые слова, относящиеся к данному документу или строке.

Если столбец полнотекстового ключа, как и рекомендовано, имеет тип данных integer, значение document_id прямо сопоставляется значению полнотекстового ключа базовой таблицы.

Напротив, если столбец полнотекстового ключа имеет тип данных, отличный от integer, значение document_id не представляет значение полнотекстового ключа базовой таблицы. В этом случае, чтобы идентифицировать строку базовой таблицы, возвращаемой функцией dm_fts_index_keywords_by_document, нужно соединить это представление с результатами, возвращенными процедурой sp_fulltext_keymappings. Чтобы выполнить соединение, нужно сохранить выход хранимой процедуры во временной таблице. После этого можно соединить столбец document_id, возвращенный функцией dm_fts_index_keywords_by_document, со столбцом DocId, возвращенным хранимой процедурой sp_fulltext_keymappings. Следует заметить, что столбец типа timestamp не может принимать значения во время операции вставки, поскольку они автоматически формируются SQL Server. Поэтому столбец типа timestamp необходимо преобразовать в столбец типа varbinary(8). Следующий пример показывает эти шаги. В данном примере table_id — идентификатор таблицы, database_name — имя базы данных, а table_name — имя таблицы.

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

Разрешения

Необходимы разрешения CREATE FULLTEXT CATALOG и разрешение SELECT на столбцы, включенные в полнотекстовый индекс.

Примеры

А. Отображение содержимого полнотекстового индекса на уровне документа

В следующем примере отображается содержимое полнотекстового индекса на уровне документа в таблице HumanResources.JobCandidate образца базы данных AdventureWorks.

ПримечаниеПримечание

Этот индекс можно создать, выполнив пример, приведенный для таблицы HumanResources.JobCandidate в разделе CREATE FULLTEXT INDEX (Transact-SQL).

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