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() 関数の呼び出しです。 この関数は、データベース名を受け取り、データベース ID を返します。sys.dm_fts_index_keywords_by_property では、この ID を使用して、指定されたデータベースを検索します。 database_name の指定を省略すると、現在のデータベース ID が返されます。object_id('table_name')
OBJECT_ID() 関数の呼び出しです。 この関数はテーブル名を受け取り、調べるフルテキスト インデックスが含まれているテーブルのテーブル ID を返します。
返されるテーブル
列 |
データ型 |
説明 |
||
---|---|---|---|---|
keyword |
nvarchar(4000) |
フルテキスト インデックスに格納されているキーワードの 16 進数表記です。
|
||
display_term |
nvarchar(4000) |
人間が判読できる形式のキーワードです。 この形式は、フルテキスト インデックスに格納されている内部形式から派生しています。
|
||
column_id |
int |
現在のキーワードのフルテキスト インデックスが作成された列の ID です。 |
||
document_id |
int |
現在の用語のフルテキスト インデックスが作成されたドキュメントまたは行の ID です。 この ID は、ドキュメントまたは行のフル テキスト キー値に対応します。 |
||
property_id |
int |
OBJECT_ID('table_name') パラメーターで指定したテーブルのフルテキスト インデックス内の検索プロパティの内部プロパティ ID です。 特定のプロパティが検索プロパティ リストに追加されると、Full-Text Engine はプロパティを登録し、このプロパティ リストに固有の内部プロパティ ID を、そのプロパティに割り当てます。 内部プロパティ ID は、特定の検索プロパティ リストに固有の整数です。 特定のプロパティを複数の検索プロパティ リストに登録した場合、検索プロパティ リストごとに異なる内部プロパティ ID が割り当てられる可能性があります。
property_id とプロパティ名の間の関連付けを表示するには |
説明
この動的管理ビューを使用すると、次のような疑問点を解決できます。
特定の 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 はテーブルの 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
権限
フルテキスト インデックスに含まれる列に対する SELECT 権限と、CREATE FULL TEXT CATALOG 権限が必要です。
使用例
次の例では、AdventureWorks サンプル データベースの Production.Document テーブルのフルテキスト インデックスにある Author プロパティからキーワードが返されます。 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 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)