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_idint。如果指定“NULL”,则不会使用非索引字表。 如果指定 0,则使用系统 STOPLIST。

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

accent_sensitivity

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

重音敏感度为...
0 不区分

“café”和“café”等词的处理方式相同。
1 敏感

“café”和“café”等词的处理方式不同。

注意

若要查看全文目录的此值的当前设置,请运行以下 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 为 multimillion
occurrence int 指示分析结果中每个字词的顺序。 例如,对于短语“SQL Server query processor”,occurrence 会包含该英语短语中字词的以下 occurrence 值:

1 代表 SQL 时期
2 为 Server
3 for query
4 for processor
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 expansion_type = 0
runs expansion_type = 2
running expansion_type = 2
ran expansion_type = 2
jog expansion_type = 4
source_term nvarchar(4000) 从中生成或分析给定字词的字词或短语。 例如,对 的 '"word breakers" AND stemmers' 查询生成以下 英语source_term 值:

word breakers 用于 display_termword
word breakers 用于 display_termbreakers
stemmers 用于 display_termstemmers

注解

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

使用 Unicode 分析特殊字符

分析查询字符串时,除非将查询字符串指定为 Unicode, sys.dm_fts_parser 否则将使用所连接到的数据库的排序规则。 因此,对于包含特殊字符(如 ü 或 ç)的非 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);

请参阅

后续步骤