在 SQL Server 中,全文查询可以通过使用同义词库搜索用户指定的术语的同义词。 SQL Server 同义词库 定义特定语言的一组同义词。 系统管理员可以定义两种形式的同义词:扩展集和替换集。 通过开发专为全文数据定制的同义词库,可以有效地扩大针对该数据的全文查询的范围。 所有 FREETEXT 和 FREETEXTABLE 查询,以及指定 FORMSOF THESAURUS 子句的任何 CONTAINS 和 CONTAINSTABLE 查询,都会进行同义词库匹配。
设置同义词库文件时的基本步骤
在服务器实例上的全文搜索查询可以查找给定语言的同义词之前,必须为该语言定义同义词库映射(同义词)。 必须手动配置每个同义词词典以定义以下内容:
变音符号设置
对于给定的同义词库,所有搜索模式都区分或不区分音标符号,如波浪号(~)、急性重音标记(??)或分音符(??)(也就是说,区分重音或不区分重音)。 例如,假设您在全文查询中指定将模式“caf??”替换为其他模式。 如果同义词库不区分重音,全文搜索将替换模式“caf??”和“café”。 如果词库区分重音,全文搜索仅替换模式“caf??”。 默认情况下,同义词库不区分重音。
扩展包
扩展集包含一组同义词,如“编写者”、“作者”和“记者”,这些同义词由全文查询替代。 包含与扩展集中任何同义词匹配的查询会被扩展,以包括扩展集中所有其他的同义词。
有关详细信息,请参阅本主题后面的“扩展集的 XML 结构”。
替换集合
替换集包含要由替换集替换的文本模式。 有关示例,请参阅本主题后面的“替换集的 XML 结构”部分。
同义词库文件的初始内容
SQL Server 提供一组 XML 同义词库文件,每个受支持的语言对应一个。 这些文件实质上为空。 它们仅包含所有 SQL Server 同义词库通用的顶级 XML 结构和注释掉的示例同义词库。
随 SQL Server 一起发布的同义词库文件都包含以下 XML 代码:
<XML ID="Microsoft Search Thesaurus">
<!-- Commented out
<thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
<expansion>
<sub>Internet Explorer</sub>
<sub>IE</sub>
<sub>IE5</sub>
</expansion>
<replacement>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2012</sub>
</replacement>
<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>
</thesaurus>
-->
</XML>
同义词库文件的位置
同义词库文件的默认位置为:
< >SQL_Server_data_files_path\MSSQL12\MSSQLSERVER\MSSQL\FTDATA\
此默认位置包含以下文件:
特定于语言的同义词库文件
在安装过程中,空同义词库文件安装在上述位置。 为每个支持的语言提供单独的文件。 系统管理员可以自定义这些文件。
同义词库文件的默认文件名使用以下格式:
'ts' + <三字母语言缩写> + '.xml'
在注册表中的以下值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\\MSSearch\中指定了给定语言的同义词库文件名称。
全局同义词库文件
空的全局同义词库文件,tsGlobal.xml。
可以通过更改同义词库文件的注册表项来更改同义词库文件的位置和名称。 对于每种语言,同义词库文件的位置在注册表中的以下值中指定:
HKLM/SOFTWARE/Microsoft/Microsoft SQL Server/<instance name>/MSSearch/Language/<language-abbreviation>/TsaurusFile
全局同义词库文件对应于 LCID 0 的中性语言。 此值只能由管理员更改。
如何使用同义词库文件进行查询
同义词库查询同时使用特定于语言的同义词库和全局同义词库。 首先,查询查找特定于语言的文件并加载它进行处理(除非它已加载)。 查询将展开,以在同义词库文件中包括由扩展规则和替换规则指定的语言特定同义词。 这些步骤随后会在整个同义词库中重复进行。 但是,如果术语已是特定同义词库文件中语言匹配的一部分,则术语不符合全局同义词库中的匹配资格。
了解同义词库文件的结构
每个同义词库文件定义了一个 XML 容器,其 ID 为 Microsoft Search Thesaurus
,带有一个注释 <!--
...-->
,该注释包含一个示例同义词库。 词库在<词库>元素中定义,其中包含定义音调符号设置、扩展集和替换集的子元素示例,如下所示:
重音符号设置的 XML 结构
同义词库的变音符号设置在单个 <diacritics_sensitive> 元素中指定。 此元素包含控制重音敏感度的整数值,如下所示:
音调符号设置 价值 XML 不区分重音 0 <diacritics_sensitive>0</diacritics_sensitive>
区分重音 1 <diacritics_sensitive>1</diacritics_sensitive>
注释
此设置只能在文件中应用一次,并且适用于文件中的所有搜索模式。 不能为各个模式指定此设置。
扩展集的 XML 结构
每个扩展集都包含在<扩展>元素中。 在这个元素中,您可以在>sub<元素中指定一个或多个替换。 在扩展集中,可以指定一组互为同义词的替换。
例如,可以编辑扩展部分,将替换“writer”、“author”和“journalist”视为同义词。 包含一个替换中的匹配项的全文搜索查询将展开,以包含扩展集中指定的其他所有替换。 因此,在前面的示例中,当你为单词“author”发出 FORMS OF THESAURUS 或 FREETEXT 查询时,全文搜索还会返回包含单词“writer”和“journalist”的搜索结果。
下面是上述示例的扩展集部分的外观:
<expansion> <sub>writer</sub> <sub>author</sub> <sub>journalist</sub> </expansion>
替换集的 XML 结构
每个替换集都包含在<替换>元素中。 在此元素中,可以在 <pat> 元素中指定一个或多个模式,并在 <sub> 元素中指定零个或多个替换,每个同义词对应一个。 可以指定一个要被替换集替换的模式。 模式和替换可以包含一个单词或一系列单词。 如果没有为模式指定替换,则它将从用户查询中删除模式。
例如,假设你想将查询中的“Win8”替换为“Windows Server 2012”或“Windows 8.0”,其中“Win8”是模式,“Windows Server 2012”和“Windows 8.0”是替换项。 如果对“Win8”运行全文查询,全文搜索仅返回包含“Windows Server 2012”或“Windows 8.0”的搜索结果。 它不返回包含“Win8”的结果。 这是因为模式“Win8”已被模式“Windows Server 2012”和“Windows 8.0”替换”。
下面是上述示例的替换集部分的样式:
<replacement> <pat>Win8</pat> <sub>Windows Server 2012</sub> <sub>Windows 8.0</sub> </replacement>
如果两个替换集由类似的模式匹配,则较长的替换集优先。 例如,如果对“Internet Explorer 联机社区”运行 FORMS OF THESAURUS 查询,并且具有以下替换集,则“Internet Explorer”替换集优先于“Internet”替换集。 因此,查询将作为“IE 联机社区”或“IE 9 在线社区”进行处理。
<replacement> <pat>Internet</pat> <sub>intranet</sub> </replacement>
和
<replacement> <pat>Internet Explorer</pat> <sub>IE</sub> <sub>IE 9</sub> </replacement>
使用和管理同义词库文件
编辑同义词库文件
加载更新的同义词库文件
若要查看分词器、同义词库和非索引字表组合的标记化结果
编辑同义词库文件
可以通过编辑其同义词库文件(XML 文件)来配置给定语言的同义词库。 在设置过程中,安装了只包含 <xml> 容器和已注释的示例 <同义词库元素的空文件>。 若要查找同义词的全文搜索查询正常工作,必须创建一个定义一组同义词集的实际 <同义词库> 元素。 可以定义两种形式的同义词、扩展集和替换集。
同义词库文件的限制
以下限制适用于编辑同义词库文件:
只有系统管理员才能更新、修改或删除同义词库文件。
使用文本编辑器工具编辑同义词库文件时,必须以 Unicode 格式保存文件,并且必须指定字节顺序标记。
同义词库条目不能为空或转化为一个空字符串。
同义词库文件中的短语不得超过 512 个字符。
同义词库不得在扩展集的<子>项和替换集的< pat>元素中包含任何重复条目。
关于同义词库文件的建议
建议同义词库文件中的条目不包含特殊字符。 这是因为词法分析工具在处理特殊字符时有细微的行为差异。 如果同义词库条目包含任何特殊字符,则与该条目结合使用的断字符可能对全文查询产生微妙的行为影响。
我们建议<子>项不包含停用词,因为全文索引中会省略停用词。 将查询扩展为包含<同义词库文件中的子条目,如果<子>>条目包含停用词,则查询大小会不必要增加。
编辑同义词库文件
在记事本中打开同义词库文件。
如果首次编辑同义词库文件,请分别在文件的开头和结尾删除以下注释行:
<!--Commented out -->
添加、修改或删除替换集或扩展集。
保存文件并关闭记事本。
使用 sp_fulltext_load_thesaurus_file 将同义词库文件的内容加载到 tempdb 中,并指定对应于同义词库文件语言的本地标识符(LCID)。 例如,对于英语同义词库文件,tsenu.xml对应的 LCID 为 1033。
USE AdventureWorks2012 ; EXEC sys.sp_fulltext_load_thesaurus_file 1033; GO
另请参阅
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
全文搜索