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 所提供的資訊來擷取屬於給定文件或資料列的所有關鍵字。
當全文檢索索引鍵資料行為整數資料類型時,建議您將 document_id 直接對應到基底資料表內的全文檢索索引鍵值。
相反地,當全文檢索索引鍵資料行使用非整數資料類型時,document_id 就不表示基底資料表內的全文檢索索引鍵。 在此情況下,若要識別基底資料表內 dm_fts_index_keywords_by_document 所傳回的資料列,您需要將這個檢視表聯結到 sp_fulltext_keymappings 所傳回的結果。 在您可以聯結之前,必須先將預存程序的輸出儲存到暫存資料表。 然後,您可以將 dm_fts_index_keywords_by_document 的 document_id 資料行聯結到此預存程序所傳回的 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 權限。
範例
A. 顯示位於文件層級的全文檢索索引內容
下列範例會在 AdventureWorks2008R2 範例資料庫的 HumanResources.JobCandidate 資料表中顯示位於文件層級之全文檢索索引的內容。
[!附註]
您可以建立這個索引,建立方式是執行針對<CREATE FULLTEXT INDEX (Transact-SQL)>中的 HumanResources.JobCandidate 資料表所提供的範例。
SELECT * FROM sys.dm_fts_index_keywords_by_document(db_id('AdventureWorks2008R2'),
object_id('HumanResources.JobCandidate'));
GO