sys.dm_fts_index_keywords_by_document (Transact-SQL)
Область применения: SQL Server Управляемый экземпляр SQL Azure Платформенная система аналитики (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 | Тип данных | Description |
---|---|---|
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)
Повышение производительности полнотекстовых индексов