sys.dm_fts_index_keywords_by_document (Transact-SQL)

适用于: SQL Server Azure SQL 托管实例 分析平台系统 (PDW)

返回与指定表关联的全文索引的文档级内容的相关信息。

sys.dm_fts_index_keywords_by_document 是动态管理函数。

查看更高级别的全文索引信息

查看与文档属性相关的属性级内容的信息

语法

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

参数

db_id('database_name')
对 DB_ID() 函数的调用。 此函数接受数据库名称并返回数据库 ID,sys.dm_fts_index_keywords_by_document 使用此 ID 来查找指定的数据库。 如果省略 database_name,则返回当前数据库 ID

object_id('table_name')
对 OBJECT_ID() 函数的调用。 此函数接受表名,并返回包含要检查的全文索引的表的表 ID。

返回的表

数据类型 描述
keyword nvarchar(4000) 存储在全文索引中的关键字的十六进制表示形式。

注意:OxFF 表示指示文件或数据集末尾的特殊字符。
display_term nvarchar(4000) 关键字的可读格式。 此格式是从全文索引中存储的内部格式派生的。

注意:OxFF 表示指示文件或数据集末尾的特殊字符。
column_id int 从中对当前关键字进行全文索引的列的 ID。
document_id int 从中对当前字词进行全文索引的文档或行的 ID。 此 ID 对应于该文档或行的全文键值。
occurrence_count int 由document_id指示的文档或行中的当前关键字出现次数。 指定“search_property_name”时,occurrence_count仅显示文档或行中指定搜索属性中当前关键字的出现次数。

注解

sys.dm_fts_index_keywords_by_document 返回的信息有助于确定以下信息(但不仅限于此):

  • 全文索引包含的关键字的总数。

  • 关键字是否为给定文档或行的一部分。

  • 关键字在整个全文索引中出现了多少次,即:

    SUMoccurrence_count) WHERE 关键字=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 列联接在一起。 请注意, 时间戳 列在插入时无法接收值,因为它们是由 SQL Server 自动生成的。 因此, 时间戳 列必须转换为 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_document   
   ( @db_id, @table_id ) kbd  
   INNER JOIN #MyTempTable tt ON tt.[docid]=kbd.document_id;  
GO  
  

权限

要求具有全文索引涵盖的列的 SELECT 权限以及 CREATE FULLTEXT CATALOG 权限。

示例

A. 在文档级别显示全文索引内容

下面的示例显示 HumanResources.JobCandidate 示例数据库中的 AdventureWorks2022 表的文档级全文索引内容。

注意

可以通过执行 CREATE FULLTEXT INDEX (Transact-SQL)HumanResources.JobCandidate表提供的示例来创建此索引。

SELECT * FROM sys.dm_fts_index_keywords_by_document(db_id('AdventureWorks2022'),   
object_id('HumanResources.JobCandidate'));  
GO  

另请参阅

全文搜索和语义搜索动态管理视图和函数 (Transact-SQL)
全文搜索
sys.dm_fts_index_keywords (Transact-SQL)
sys.dm_fts_index_keywords_by_property (Transact-SQL)
sp_fulltext_keymappings (Transact-SQL)
改进全文索引的性能