分享方式:


sys.dm_fts_index_keywords_by_property (Transact-SQL)

適用於:SQL Server

傳回指定數據表之全文檢索索引中的所有屬性相關內容。 這包括屬於與該全文檢索索引相關聯之搜尋屬性清單所註冊之任何屬性的所有數據。

sys.dm_fts_index_keywords_by_property是動態管理函式,可讓您查看 IFilters 在索引時間發出的已註冊屬性,以及每個索引檔中每個屬性的確切內容。

檢視所有檔案層級內容(包括屬性相關內容)

若要檢視較高層級的全文檢索索引資訊

注意

如需搜尋屬性清單的相關信息,請參閱 使用搜尋屬性清單搜尋檔屬性。

語法

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

引數

db_id('database_name')
對 DB_ID() 函式的呼叫。 此函式會接受資料庫名稱,並傳回資料庫標識碼,sys.dm_fts_index_keywords_by_property用來尋找指定的資料庫。 如果 省略database_name ,則會傳回目前的資料庫標識符。

object_id('table_name')
呼叫 OBJECT_ID() 函式。 此函式會接受數據表名稱,並傳回包含要檢查之全文檢索索引之數據表的數據表標識符。

傳回的資料表

資料行 資料類型 描述
keyword nvarchar(4000) 儲存在全文檢索索引內的關鍵詞十六進位表示法。

注意:OxFF 代表表示檔案或數據集結尾的特殊字元。
display_term nvarchar(4000) 關鍵詞的人類可讀取格式。 此格式衍生自儲存在全文檢索索引中的內部格式。

注意:OxFF 代表表示檔案或數據集結尾的特殊字元。
column_id int 目前關鍵詞已編製全文檢索索引之數據行的標識碼。
document_id int 目前字詞全文檢索索引的文件或數據列標識碼。 此標識碼會對應至該文件或數據列的全文檢索索引鍵值。
property_id int 您在 OBJECT_ID('table_name') 參數中指定的數據表全文檢索索引內搜尋屬性的內部屬性識別碼。

當指定的屬性新增至搜尋屬性清單時,全文檢索引擎會註冊屬性,並將該屬性清單特定的內部屬性標識碼指派給它。 內部屬性標識碼是整數,對指定的搜尋屬性清單而言是唯一的。 如果給定屬性已在多個搜尋屬性清單中註冊,可能會為每個搜尋屬性清單指定不同的內部屬性識別碼。

注意:內部屬性識別碼與將屬性新增至搜尋屬性清單時所指定的屬性整數標識元不同。 如需詳細資訊,請參閱 使用搜索屬性清單搜索文件屬性

若要檢視property_id與屬性名稱之間的關聯:
sys.registered_search_properties (Transact-SQL)

備註

此動態管理檢視可以回答下列問題:

  • 指定 DocID 的指定屬性上儲存了哪些內容?

  • 索引檔之間的指定屬性有多常見?

  • 哪些文件實際上包含指定的屬性? 如果在指定的搜尋屬性上查詢不會傳回您預期要尋找的檔,這會很有用。

當全文檢索索引鍵數據行是整數數據類型時,document_id會直接對應至基表中的全文檢索索引鍵值。

相反地,當全文檢索索引鍵數據行使用非整數數據類型時,document_id不會代表基表中的全文檢索索引鍵。 在此情況下,若要識別dm_fts_index_keywords_by_property所傳回基表中的數據列,您需要將這個檢視與sp_fulltext_keymappings回的結果聯結。 您必須先將預存程式的輸出儲存在暫存數據表中,才能聯結它們。 然後,您可以將dm_fts_index_keywords_by_property的 document_id 數據行與這個預存程式所傳回的 DocId 數據行聯結。 請注意, 時間戳 數據行無法在插入時接收值,因為它們是由 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_property   
   ( @db_id, @table_id ) kbd  
   INNER JOIN #MyTempTable tt ON tt.[docid]=kbd.document_id;  
GO  
  

權限

需要全文檢索索引和 CREATE FULLTEXT CATALOG 許可權所涵蓋數據行的 SELECT 許可權。

範例

下列範例會從Author範例資料庫數據表AdventureWorks之全文檢索索引Production.Document中的 屬性傳回關鍵詞。 此範例使用 sys.dm_fts_index_keywords_by_property傳回之數據表的別名KWBPOP。 此範例會使用內部聯結來結合 來自sys.registered_search_propertiessys.fulltext_indexes的數據行。

-- Once the full-text index is configured to support property searching  
-- on the Author property, return any keywords indexed for this property.  
USE AdventureWorks2022;  
GO   
SELECT KWBPOP.* FROM   
   sys.dm_fts_index_keywords_by_property( DB_ID(),   
   object_id('Production.Document') ) AS KWBPOP  
   INNER JOIN  
      sys.registered_search_properties AS RSP ON(   
         (KWBPOP.property_id = RSP.property_id)   
         AND (RSP.property_name = 'Author') )  
   INNER JOIN  
      sys.fulltext_indexes AS FTI ON(   
         (FTI.[object_id] = object_id('Production.Document'))   
         AND (RSP.property_list_id = FTI.property_list_id) );  
GO  

另請參閱

全文檢索搜尋
改善全文檢索索引的效能
sp_fulltext_keymappings (Transact-SQL)
sys.dm_fts_index_keywords_by_document (Transact-SQL)
sys.dm_fts_index_keywords (Transact-SQL)
sys.registered_search_properties (Transact-SQL)
sys.registered_search_property_lists (Transact-SQL)
使用搜索屬性清單搜索文件屬性