Share via


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_properties sys.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)
使用搜索屬性清單搜索文件屬性