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(4000)

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

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

display_term

nvarchar(4000)

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

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

column_id

int

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

document_id

int

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

occurrence_count

int

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

Замечания

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

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

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

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

    ( SUM ( occurrence_count ) WHERE keyword=keyword_value )

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

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

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

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

Но если тип данных в столбце полнотекстового ключа не integer, значение document_id не представляет полнотекстовый ключ в базовой таблице. В этом случае, чтобы идентифицировать строку базовой таблицы, которая возвращена функцией dm_fts_index_keywords_by_document, нужно соединить это представление с результатами хранимой процедуры sp_fulltext_keymappings. Чтобы выполнить соединение, нужно сохранить выход хранимой процедуры во временной таблице. Затем можно соединить столбец document_iddm_fts_index_keywords_by_document со столбцом DocId, возвращаемым этой хранимой процедурой. Следует заметить, что столбец типа 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 образца базы данных AdventureWorks2008R2.

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

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

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