sys.dm_fts_parser (Transact-SQL)

适用范围:SQL Server

将给定断字符同义词库和非索引字表组合应用于查询字符串输入后,返回最终的标记化结果。 此词语切分结果等效于全文引擎针对指定查询字符串的输出。

sys.dm_fts_parser 是动态管理功能。

语法

sys.dm_fts_parser ( 'query_string' , lcid , stoplist_id , accent_sensitivity )

参数

query_string

要分析的查询。 query_string可以是 CONTAINS 语法支持的字符串链。 例如,您可以包括变形、同义词库和逻辑运算符。

lcid

用于分析 query_string的断字符的区域设置标识符(LCID)。

stoplist_id

要由 lcid 标识的断字符使用的非索引字表的 ID(如果有)。 stoplist_id为 int。如果指定“NULL”,则不使用非索引字表。 如果指定 0,则使用系统 STOPLIST。

非索引字表 ID 在数据库中是唯一的。 若要获取给定表的全文索引的非索引字表 ID,请使用 sys.fulltext_indexes 目录视图。

accent_sensitivity

控制全文搜索是否区分音调符号的布尔值。 accent_sensitivity,具有以下值之一:

着色敏感度...
0 不区分

“咖啡馆”和“咖啡馆”等词的处理方式相同。
1 区分

“咖啡馆”和“咖啡馆”等词的处理方式不同。

注意

若要查看全文目录的此值的当前设置,请运行以下 Transact-SQL 语句: SELECT fulltextcatalogproperty('<catalog_name>', 'AccentSensitivity');

返回的表

列名称 数据类型 描述
keyword varbinary(128) 断字符返回的给定关键字的十六进制表示形式。 该表示形式用于存储全文索引的关键字。 此值不可读,但将给定关键字与返回全文索引的内容(如 sys.dm_fts_index_keywordssys.dm_fts_index_keywords_by_document)返回的其他动态管理视图返回的输出相关非常有用。

注意:0xFF表示指示文件或数据集末尾的特殊字符。
group_id int 包含一个整数值,用于区分从中生成给定字词的逻辑组。 例如,'Server AND DB OR FORMSOF(THESAURUS, DB)"' 生成以下英语 group_id 值:

1:服务器
2:DB
3:DB
phrase_id int 包含一个整数值,用于区别断字符给出复合词(如 full-text)替代形式的情况。 有时,如果存在复合词(“multi-millon”),断字符将给出替代形式。 这些替代形式(短语)有时需要加以区别。

例如,'multi-million' 生成以下英语 phrase_id 值:

1 代表 multi 时期
1 代表 million 时期
2 for multimillion
occurrence int 指示分析结果中每个字词的顺序。 例如,对于短语“SQL Server query processor”,occurrence 会包含该英语短语中字词的以下 occurrence 值:

1 代表 SQL 时期
2 for Server
3 for query
对于 processor为 4
special_term nvarchar(4000) 包含有关断字符给出的字词特征的信息,可以是以下值之一:

- 完全匹配
- 干扰词
- 句子结束
- 段落结尾
- 章节结束
display_term nvarchar(4000) 包含关键字的可读形式。 与旨在访问全文索引内容的函数一样,由于非规范化限制,此显示字词可能与原始字词并不完全相同。 不过,该字词应该具有足够高的准确性,可帮助您从原始输入中识别它。
expansion_type int 包含有关给定字词的扩展特性的信息,可以是以下值之一:

0 = 单字大小写
2 = 转折扩展
4 = 同义词库扩展/替换

例如,请考虑同义词库将 run 定义为 jog 扩展的情况:

<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>

字词 FORMSOF (FREETEXT, run) 生成以下输出:

run with expansion_type = 0
runs with expansion_type = 2
running with expansion_type = 2
ran with expansion_type = 2
jog with expansion_type = 4
source_term nvarchar(4000) 从中生成或分析给定字词的字词或短语。 例如,查询将 '"word breakers" AND stemmers' 生成以下 英语source_term 值:

word breakers for the display_term word
word breakers for the display_term breakers
stemmers for the display_term stemmers

注解

sys.dm_fts_parser支持全文谓词(如 CONTAINS 和 FREETEXT)的语法和功能,以及 CONTAINSTABLEFREETEXTTABLE 等函数。

使用 Unicode 分析特殊字符

分析查询字符串时, sys.dm_fts_parser 请使用连接到的数据库的排序规则,除非将查询字符串指定为 Unicode。 因此,对于包含特殊字符(如 ü 或 ç)的非 Unicode 字符串,输出可能会意外,具体取决于数据库的排序规则。 若要独立于数据库排序规则处理查询字符串,请为字符串 N添加前缀, N'即query_string'

有关详细信息,请参阅 C.显示包含本文后面特殊字符 的字符串的输出。

何时使用sys.dm_fts_parser

sys.dm_fts_parser 对于调试目的,可能很强大。 一些主要的应用场景包括:

  • 了解给定断字符如何处理给定输入

    当查询返回意外结果时,问题可能出在断字符分析和断开数据的方式。 通过使用 sys.dm_fts_parser,可以发现断字符传递到全文索引的结果。 此外,可以看到哪些词是非索引字,这些词未在全文索引中搜索。 术语是否为给定语言的非索引字取决于它是否位于函数 中声明的stoplist_id 值指定的非索引字列表中。

    使用重音敏感度标志,可以查看断字符分析输入的方式,并考虑到其重音敏感度信息。

  • 了解词干分析器如何处理给定输入

    通过指定包含以下 FORMSOF 子句的 CONTAINS 或 CONTAINSTABLE 查询,您可以了解断字符和词干分析器如何分析查询字词及其词干形式:

    FORMSOF( INFLECTIONAL, query_term )
    

    可以从结果中看出,将哪些字词传递给了全文索引。

  • 了解同义词库如何扩展或替换全部或部分输入

    您还可以指定:

    FORMSOF( THESAURUS, query_term )
    

    此查询的结果显示了断字符和同义词库是如何交互以获得查询字词的。 您可以看到来自同义词库的扩展或替换,并确定实际针对全文索引发出的结果查询。

    如果用户出现问题:

    FORMSOF( FREETEXT, query_term )
    

    自动执行转义和同义词库功能。

除了上述使用方案外, sys.dm_fts_parser 还可以显著了解和排查全文查询的其他许多问题。

权限

需要 CREATE FULLTEXT CATALOG 权限,以及对指定非索引字表的访问权限。

示例

A. 显示关键字或短语的给定断字符的输出

下面的示例返回对以下查询字符串使用英语断字符(LCID 为 1033)且不使用非索引字表的输出:

The Microsoft business analysis

禁用了重音区分。

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis" ', 1033, 0, 0);

B. 在非索引字表筛选上下文中显示给定断字符的输出

下面的示例返回对以下查询字符串使用英语断字符(LCID 为 1033)和英语非索引字表(ID 为 77)的输出:

"The Microsoft business analysis" OR "MS revenue"

禁用了重音区分。

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0);

°C 显示包含特殊字符的字符串的输出

下面的示例使用 Unicode 来分析以下法语字符串:

français

示例指定了法语的 LCID 1036,以及用户定义的非索引字表的 ID 5。 启用了重音区分。

SELECT * FROM sys.dm_fts_parser(N'français', 1036, 5, 1);

另请参阅

后续步骤