sys.dm_fts_index_keywords_by_document (Transact-SQL)

Применимо к:SQL ServerSql Azure Sql Managed InstanceAnalytics Platform System (PDW)

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

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

Просмотр сведений о полнотекстовом индексе более высокого уровня

Просмотр сведений о содержимом уровня свойства, связанном со свойством документа

Синтаксис

  
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(). Эта функция принимает имя таблицы и возвращает идентификатор таблицы, содержащей полнотекстовый индекс для проверки.

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

Column Тип данных Описание:
keyword nvarchar(4000) Шестнадцатеричное представление ключевого слова, которое хранится в полнотекстовом индексе.

Примечание. OxFF представляет специальный символ, указывающий конец файла или набора данных.
display_term nvarchar(4000) Ключевое слово в понятном формате. Этот формат является производным от внутреннего формата хранения полнотекстового индекса.

Примечание. OxFF представляет специальный символ, указывающий конец файла или набора данных.
column_id int Идентификатор столбца, содержащий данное ключевое слово, индексированное полнотекстовым индексом.
document_id int Идентификатор документа или строки, содержащей текущий термин, индексированный полнотекстовым индексом. Данный идентификатор соответствует значению полнотекстового ключа этого документа или строки.
occurrence_count int Число вхождения текущего ключевого слова в документе или строке, указанной document_id. Если указан параметр "search_property_name", occurrence_count отображает только количество вхождения текущего ключевого слова в указанном свойстве поиска в документе или строке.

Замечания

Данные, возвращаемые функцией 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_id, возвращенный функцией dm_fts_index_keywords_by_document, со столбцом DocId, возвращенным хранимой процедурой sp_fulltext_keymappings. Обратите внимание, что столбец метки времени не может получать значения во время вставки, так как они автоматически создаются 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 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 образца базы данных AdventureWorks2022.

Заметка

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

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

См. также

Полнотекстовый поиск и динамические административные представления и функции семантического поиска (Transact-SQL)
Компонент Full-text Search
sys.dm_fts_index_keywords (Transact-SQL)
sys.dm_fts_index_keywords_by_property (Transact-SQL)
sp_fulltext_keymappings (Transact-SQL)
Повышение производительности полнотекстовых индексов