sys.dm_fts_index_keywords_by_property (Transact-SQL)

傳回給定資料表之全文檢索索引中的所有屬性相關內容。 這包括與該全文檢索索引相關聯的搜尋屬性清單所註冊之任何屬性的一切所屬資料。

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') 參數中所指定的資料表全文檢索索引內之搜尋屬性內部屬性識別碼。

當給定的屬性新增到搜尋屬性清單時,全文檢索引擎會註冊屬性,並為它指派該屬性清單特有的內部屬性識別碼。 對於給定的搜尋屬性清單來說,內部屬性識別碼 (本身為整數) 是唯一的。 如果給定屬性已在多個搜尋屬性清單中註冊,可能會為每個搜尋屬性清單指定不同的內部屬性識別碼。

[!附註]

內部屬性識別碼不同於將屬性加入至搜尋屬性清單時指定的屬性整數識別碼。 如需詳細資訊,請參閱<使用搜索屬性清單搜索文件屬性>。

若要檢視屬性識別碼與屬性名稱之間的關聯

備註

這個動態管理檢視可以回答類似下列的問題:

  • 給定 DocID 的給定屬性中會儲存何種內容?

  • 已索引文件之間的給定屬性,其常見程度為何?

  • 哪些文件會實際包含給定屬性? 如果查詢給定搜尋屬性無法傳回您預期想要尋找的文件,這便顯得相當有用。

當全文檢索索引鍵資料行為整數資料類型時,建議您將 document_id 直接對應到基底資料表內的全文檢索索引鍵值。

相反地,當全文檢索索引鍵資料行使用非整數資料類型時,document_id 就不表示基底資料表內的全文檢索索引鍵。 在此情況下,若要識別基底資料表內 dm_fts_index_keywords_by_property 所傳回的資料列,您需要將這個檢視表聯結到 sp_fulltext_keymappings 所傳回的結果。 在您可以聯結之前,必須先將預存程序的輸出儲存到暫存資料表。 接著,您可以連結 dm_fts_index_keywords_by_property 的 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_property 
   ( @db_id, @table_id ) kbd
   INNER JOIN #MyTempTable tt ON tt.[docid]=kbd.document_id;
GO

權限

需要全文檢索索引和 CREATE FULLTEXT CATALOG 權限所涵蓋之資料行的 SELECT 權限。

範例

下列範例會從 AdventureWorks 範例資料庫之 Production.Document 資料表傳回全文檢索索引中的 Author 屬性。 這個範例會將別名 KWBPOP 用於 sys.dm_fts_index_keywords_by_property 所傳回的資料表。 這個範例會使用內部聯結結合來自 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 AdventureWorks;
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)

概念

全文檢索搜尋 (SQL Server)

改善全文檢索索引的效能

使用搜索屬性清單搜索文件屬性