全文搜索由全文引擎提供支持。全文引擎有两个角色:索引支持和查询支持。
从 SQL Server 2008 开始,全文搜索体系结构包括以下进程:
- SQL Server 进程 (sqlservr.exe)
注意: |
在 SQL Server 2008 和更高版本中不存在 MSFTESQL 服务。在 SQL Server 2005 和早期版本中由 MSFTESQL 服务执行的全文任务现由 SQL Server 进程执行。 |
- 筛选器后台程序宿主进程 (fdhost.exe)。
为了安全起见,从 SQL Server 2008 开始,筛选器由称为筛选器后台程序宿主的单独进程加载。服务器实例对所有多线程筛选器使用多线程进程,并对所有单线程筛选器使用单线程进程。
注意: |
fdhost.exe 替换了 SQL Server 2005 和更早版本中的全文引擎筛选器后台程序 (msftefd.exe)。 |
fdhost.exe 进程是由 FDHOST launcher 服务 (MSSQLFDLauncher) 创建的,这些进程使用 FDHOST launcher 服务帐户的安全凭据运行。因此,必须运行此服务才能正常进行全文索引和全文查询。有关设置此服务的服务帐户的信息,请参阅如何设置用于全文搜索的 FDHOST 启动器 (MSSQLFDLauncher) 服务帐户(SQL Server 配置管理器)。
这些进程包含全文搜索体系结构的各组件。下图概括了这些组件及其关系。该图后面的内容介绍了这些组件。
SQL Server 进程
全文搜索使用 SQL Server 进程的以下组件:
- 用户表
这些表包含要进行全文索引的数据。
- 全文收集器
全文收集器使用全文爬网线程。它负责计划和驱动对全文索引的填充,并负责监视全文目录。
注意: |
从 SQL Server 2008 开始,全文目录为虚拟对象且不属于任何文件组。全文目录是表示一组全文索引的逻辑概念。 |
- 同义词库文件
这些文件包含搜索项的同义词。有关详细信息,请参阅同义词库配置。
- 非索引字表对象
非索引字表对象包含对搜索无用的常见词列表。有关详细信息,请参阅非索引字和非索引字表。
注意: |
非索引字表对象取代了 SQL Server 2005 和早期版本的干扰词文件。 |
- SQL Server 查询处理器
查询处理器编译并执行 SQL 查询。如果 SQL 查询包含全文搜索查询,则在编译和执行期间该查询都会发送到全文引擎。查询结果将与全文索引相匹配。有关详细信息,请参阅全文引擎。
- 全文引擎
SQL Server 中的全文引擎现已与查询处理器完全集成。全文引擎编译和执行全文查询。作为查询执行的一部分,全文引擎可能会接收来自同义词库和非索引字表的输入。在 SQL Server 2008 和更高版本中,SQL Server 的全文引擎在 SQL Server 查询处理器内部运行。
- 索引编写器(索引器)
索引编写器生成用于存储索引标记的结构。
- 筛选器后台程序管理器
筛选器后台程序管理器负责监视全文引擎筛选器后台程序宿主的状态。
筛选器后台程序宿主
筛选器后台程序宿主是一个由全文引擎启动的进程。它运行下列全文搜索组件,这些组件负责对表中的数据进行访问、筛选和断字,同时还负责对查询输入进行断字和提取词干:
筛选器后台程序宿主的组件如下:
- 协议处理程序
此组件从内存中取出数据,以进行进一步的处理,并访问指定数据库的用户表中的数据。其职责之一是从全文索引列中收集数据,并将所收集的数据传递给筛选器后台程序宿主,从而由该宿主根据需要应用筛选和断字符。
- 筛选器
某些数据类型需要筛选,然后才能为文档中的数据(包括 varbinary、varbinary(max)、image 或 xml 列中的数据)创建全文索引。给定文档采用何种筛选器取决于文档类型。例如,Microsoft Word (.doc) 文档、Microsoft Excel (.xls) 文档和 XML (.xml) 文档分别使用不同的筛选器。然后,筛选器从文档中提取文本块区,删除嵌入的格式并保留文本,如有可能的话也会保留有关文本位置的信息。结果将以文本化信息流的形式出现。有关详细信息,请参阅全文搜索筛选器。
- 断字符和词干分析器
断字符是特定于语言的组件,它根据给定语言的词汇规则查找词边界(“断字”)。每个断字符都与用于组合动词及执行变形扩展的特定于语言的词干分析器组件相关联。在创建索引时,筛选器后台程序宿主使用断字符和词干分析器来对给定表列中的文本数据执行语言分析。与全文索引中的表列相关的语言将决定为列创建索引时要使用的断字符和词干分析器。有关详细信息,请参阅断字符和词干分析器。