配置和管理断字符和词干分析器

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

断字符和词干分析器用于对所有全文索引数据执行语言分析。 语言分析执行下述两项操作:

  • 确定词边界(分词)。 “断字符”根据语言的词法规则确定词的边界位置,从而标识各个词。 每个词(也称为标记)使用压缩表示形式插入全文索引以减少其大小。

  • 组合动词(词干分析)。 词干分析器根据该语言的规则生成特定词的变形形式(例如,“running”、“ran”和“runner”是单词“run”的不同形式)。

断字符和词干分析器特定于语言

断字符和词干分析器是特定于语言的,并且各语言的语言分析规则也各不相同。 特定语言的分词器可使为该语言生成的词项更准确。

使用为 SQL Server 所支持的所有语言提供的断字符和词干分析器时,通常不需要执行任何操作。

  • 如果该语言系列存在断字符,但特定子语言没有,则会使用主要语言。 例如,法语分词器可用于处理加拿大法语文本。

  • 如果某一特定语言没有可用的断字符,将使用非特定语言断字符。 使用中性分词器时,词语会在空格和标点符号等中性字符处被拆分。

获取支持的语言的列表

要查看 Full-Text 搜索支持的语言列表,请使用以下 Transact-SQL 语句。 如果此列表中包含某种语言,表示已为该语言注册了断字符。

SELECT *
FROM sys.fulltext_languages;

获取已注册断字符的列表

要使全文搜索能够使用某种语言的分词器,必须先注册该分词器。 对于已注册的断字符,相关语言资源也可用于全文索引和查询操作。 这些资源包括词干分析器、干扰词(非索引字)和同义词库文件。

若要查看已注册断字器组件的列表,请使用以下语句。

EXECUTE sp_help_fulltext_system_components 'wordbreaker';
GO

有关详细信息,请参阅 sp_help_fulltext_system_components。

如果添加或删除断字符

如果您添加、删除或更改了断字符,则需要刷新为全文索引和查询而支持的 Microsoft Windows 区域设置标识符 (LCID) 列表。 有关详细信息,请参阅 自定义筛选器和断字符。

设置默认的全文语言选项

对于 SQL Server的本地化版本, SQL Server 安装程序将把 default full-text language 选项设置为服务器的语言(如果存在合适的匹配项)。 对于 SQL Server 的非本地化版本,默认全文语言选项为英语。

创建或修改全文索引时,可以为每个全文索引列指定不同的语言。 如果未指定列的语言,默认值是配置选项“默认全文语言”的值。

注意

单个全文查询函数子句中列出的所有列都必须使用相同的语言,除非在 LANGUAGE 查询中指定了该选项。 被查询的全文索引列所使用的语言决定了对全文查询谓词(CONTAINS 和 FREETEXT)以及函数(CONTAINSTABLE 和 FREETEXTTABLE)的参数执行何种语言分析。

为索引列选择语言

创建全文索引时,为每个索引列指定一种语言。 如果未为列指定语言,则使用系统默认语言。 某列的语言确定使用什么断字符和词干分析器对该列创建索引。 另外,该语言的同义词库文件将由针对相应列的全文查询使用。

如果要选择用于创建全文索引的列语言,有几个事项需要注意。 这些注意事项均与全文引擎如何对文本进行词汇切分再编制其索引有关。 欲了解更多信息,请参阅 创建全文索引时选择语言。

若要查看特定列的断字符语言,请运行以下语句。

SELECT language_id AS 'LCID'
FROM sys.fulltext_index_columns;

有关详细信息,请参阅 sys.fulltext_index_columns。

排查断字超时错误

断字超时错误可能在多种情况下发生。 有关这些情况以及如何在每个情况下做出响应的信息,请参阅 MSSQLSERVER_30053。

关于MSSQLSERVER_30053错误的信息

属性 价值
产品名称 SQL Server
事件 ID 30053
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 FTXT_QUERY_E_WORDBREAKINGTIMEOUT
消息正文 全文查询字符串出现断字超时。 如果断字器长时间处理全文查询字符串或服务器上有大量查询正在运行,则会发生这种情况。 请在负荷较轻的情况下再次尝试运行此查询。

说明

在以下情况下会发生断字超时错误:

  • 查询语言的断字符配置不正确。 例如,它的注册表设置不正确。

  • 分词器在处理特定查询字符串时发生故障。

  • 分词器针对特定查询字符串返回了过多数据。 多余数据会被视为潜在的缓冲区溢出攻击,并会导致承载分词服务的筛选器守护程序进程(fdhost.exe)关闭。

  • 筛选器后台进程配置不正确。

    最常见的配置问题是密码过期或阻止筛选器后台帐户登录的域策略。

  • 服务器实例上运行的查询工作负荷很重。 例如,词断符处理全文查询字符串耗时较长,或者服务器上运行大量查询。 这是最不可能的原因。

用户操作

针对超时的可能原因选择适当的用户操作,如下所示:

可能的原因 用户操作
查询语言的断字符配置不正确。 如果你使用的是第三方断字符,则可能未在操作系统中正确注册。 在这种情况下,请重新注册断字符。 有关更多信息,请参阅 将全文搜索使用的分词符还原为早期版本。
分词器在处理特定查询字符串时发生故障。 如果数据库引擎支持该分词器,请联系 Microsoft 客户服务与支持。
分词器针对特定查询字符串返回了过多数据。 如果数据库引擎支持该断字符,请联系 Microsoft 客户服务与支持部门。
筛选器后台进程配置不正确。 确保使用的是当前密码,并且域策略不会阻止筛选器守护程序帐户登录。
服务器实例上运行的查询工作负荷很重。 请在负荷较轻的情况下再次尝试运行此查询。

了解已更新断字符的影响

数据库引擎的每个版本都可能包含采用修订后语言规则的更新版分词器。 这些更新后的分词器,其行为可能与从数据库引擎早期版本导入的全文索引中使用的分词器不同。

如果在数据库升级到当前版本的数据库引擎时导入了全文目录,这一点尤为重要。 该全文目录中全文索引使用的一种或多种语言现在可能与新断字符关联。 有关详细信息,请参阅 全文搜索升级。