sys.dm_fts_parser (Transact-SQL)
语法
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 的数据类型为 bit,可以是以下值之一:值
重音区分设置为…
0
不区分
诸如“café”和“cafe”之类的字的处理方式是完全相同的。
1
区分
诸如“café”和“cafe”之类的字的处理方式是不同的。
注意 若要查看全文目录中该值的当前设置,请运行以下 Transact-SQL 语句:SELECT fulltextcatalogproperty('catalog_name', 'AccentSensitivity');。
返回的表
列名 |
数据类型 |
说明 |
---|---|---|
keyword |
varbinary(128) |
断字符返回的给定关键字的十六进制表示形式。该表示形式用于存储全文索引的关键字。用户无法读取该值,但是在将给定关键字与返回全文索引内容(如 sys.dm_fts_index_keywords 和 sys.dm_fts_index_keywords_by_document)的其他动态管理视图所返回的输出相关联时,该值十分有用。
注意
OxFF 表示指示文件或数据集末尾的特殊字符。
|
group_id |
int |
包含一个整数值,用于区分从中生成给定字词的逻辑组。例如,'Server AND DB OR FORMSOF(THESAURUS, DB)"' 生成以下英语 group_id 值:
group_iddisplay_term
1Server
2DB
3DB
|
phrase_id |
int |
包含一个整数值,用于区别断字符给出复合词(如 full-text)替代形式的情况。有时,如果存在复合词(“multi-millon”),断字符将给出替代形式。这些替代形式(短语)有时需要加以区别。 例如,'multi-million' 生成以下英语 phrase_id 值:
phrase_iddisplay_term
1 multi
1 million
2 multimillion
|
occurrence |
int |
指示分析结果中每个字词的顺序。例如,对于短语“SQL Server query processor”,occurrence 会包含该英语短语中字词的以下 occurrence 值:
occurrencedisplay_term
1 SQL
2 Server
3 query
4 processor
|
special_term |
nvarchar(8000) |
包含有关断字符给出的字词特征的信息,可以是以下值之一: Exact match Noise word End of Sentence End of paragraph End of Chapter |
display_term |
nvarchar(8000) |
包含关键字的可读形式。与旨在访问全文索引内容的函数一样,由于非规范化限制,此显示字词可能与原始字词并不完全相同。不过,该字词应该具有足够高的准确性,可帮助您从原始输入中识别它。 |
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(8000) |
从中生成或分析给定字词的字词或短语。例如,对 '"word breakers" AND stemmers' 的查询生成以下英语 source_term 值:
source_termdisplay_term
word breakersword
word breakersbreakers
stemmersstemmers
|
注释
sys.dm_fts_parser 支持全文谓词(如 CONTAINS 和 FREETEXT)和函数(如 CONTAINSTABLE 和 FREETEXTTABLE)的语法和功能。
使用 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 还在很大程度上帮助您了解和解决很多其他的全文查询问题。
权限
要求具有 sysadmin 固定服务器角色的成员身份以及指定非索引字表的访问权限。
示例
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);