sys.dm_fts_index_keywords_by_document (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в Microsoft Fabric

Возвращает сведения о содержимом полнотекстового индекса на уровне документа, связанного с указанной таблицей.

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

  • Для просмотра информации о полном тексте на более высоком уровне см. sys.dm_fts_index_keywords.

  • Чтобы просмотреть информацию о содержании на уровне свойства, связанном с свойством документа, см. sys.dm_fts_index_keywords_by_property.

Syntax

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

Аргументы

DB_ID('database_name')

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

OBJECT_ID('table_name')

Вызов функции OBJECT_ID . OBJECT_ID Это интеллект. Эта функция принимает имя таблицы и возвращает ID таблицы с полным текстом индекса для проверки.

Таблица возвращена

Название столбца Тип данных Нуллибельный Описание
keyword 1 varbinary(128) Нет Шестнадцатеричное представление ключевого слова, которое хранится в полнотекстовом индексе.
display_term 1 nvarchar(4000) Нет Ключевое слово в понятном формате. Этот формат является производным от внутреннего формата хранения полнотекстового индекса.
column_id int Нет Идентификатор столбца, содержащий данное ключевое слово, индексированное полнотекстовым индексом.
document_id bigint Да Идентификатор документа или строки, содержащей текущий термин, индексированный полнотекстовым индексом. Данный идентификатор соответствует значению полнотекстового ключа этого документа или строки.
occurrence_count int Да Количество появления текущего ключевого слова в документе или строке, обозначенном .document_id При указании 'search_property_name' отображается occurrence_count только количество появления текущего ключевого слова в указанном свойстве поиска внутри документа или строки.

10xFF обозначает специальный символ, указывающий на конец файла или набора данных.

Замечания

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

  • общее число ключевых слов, содержащихся в полнотекстовом индексе;
  • является ли ключевое слово частью данного документа или строки;
  • Сколько раз ключевое слово появляется во всем полнотекстовом индексе. То есть, SUM(occurrence_count) WHERE keyword = <keyword_value>
  • сколько раз ключевое слово встречается в данном документе или строке;
  • сколько ключевых слов содержит данный документ или строка.

Также вы можете использовать предоставленную sys.dm_fts_index_keywords_by_document информацию, чтобы получить все ключевые слова, принадлежащие к конкретному документу или строке.

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

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

Чтобы выполнить соединение, нужно сохранить выход хранимой процедуры во временной таблице. Затем можно соединить document_id столбец с dm_fts_index_keywords_by_documentDocId столбцом, который возвращается этой сохранённой процедурой. Столбец с временной меткой не может получать значения во время вставки, потому что они автоматически генерируются SQL Server. Поэтому столбец метки времени должен быть преобразован в столбцы 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 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

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

Examples

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

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

Note

Вы можете создать этот индекс, выполнив пример, предоставленный для HumanResources.JobCandidate таблицы в CREATE FULLTEXT INDEX.

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