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


sys.dm_fts_index_keywords_by_document (Transact-SQL)

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

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

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

Столбец

Тип данных

Описание

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, возвращаемым этой хранимой процедурой. Следует заметить, что столбец типа 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

См. также

Справочник

Динамические административные представления и функции полнотекстового и семантического поиска (Transact-SQL)

sys.dm_fts_index_keywords (Transact-SQL)

sys.dm_fts_index_keywords_by_property (Transact-SQL)

sp_fulltext_keymappings (Transact-SQL)

Основные понятия

Компонент Full-Text Search (SQL Server)

Улучшение производительности полнотекстовых индексов