全文索引和查询过程
全文搜索的索引组件负责对全文索引进行初始填充,并负责在全文索引表中的数据有所修改时对该索引进行后续更新。为了提升全文索引过程的效率,Microsoft SQL Server 2005 改进了全文收集机制的体系结构,从而大大增强了性能。
全文索引过程
全文填充(也称为爬网)开始后,数据库引擎会将大批数据存入内存并通知 Microsoft SQL Server 全文引擎 (MSFTESQL) 服务开始进行索引。MSFTESQL 服务将对表的某一列或多列中的字符和格式化二进制数据编制索引。全文引擎将使用协议处理程序组件从内存中取出数据并进行进一步处理,从而生成全文索引。
对存储在 varbinary(max) 或 image 列中的数据编制索引时,筛选器(实现了 IFilter 接口)将基于为该数据指定的文件格式(例如,Microsoft Word)来提取文本。在某些情况下,筛选器组件会要求将 varbinary(max) 或 image 数据写到服务帐户 Temp 目录中,而不是将其存入内存。
在处理过程中,通过断字符将收集到的文本数据分隔成各个单独的标记或关键字。用于标记化的语言将在列级指定,或者也可以通过筛选器组件在 varbinary(max)、image 或 xml 数据内标识。
还可能执行其他处理以删除干扰词并在将标记存储到全文索引或索引片断中之前将这些标记规范化。
填充完成后,将触发最终的合并过程,以便将索引片断合并为一个主全文索引。由于只需要查询主索引而不需要查询大量索引片断,因此这将提高查询性能,并且可以使用更好的计分统计信息来得出相关性排名。
注意: |
---|
由于合并索引片断时必须读取和写入大量的数据,所以主合并可能会耗费大量 I/O,但它不会阻塞传入的查询。 |
全文查询过程
从客户端发送的全文查询会转到 SQL Server 进程中的 SQL Server 查询处理器 (QP)。QP 再将它传递给全文查询组件,该组件将创建 OLE DB 命令树,并将它发送到 Microsoft Full-Text Engine for SQL Server (MSFTESQL) 服务。在 MSFTESQL 进程中,全文引擎查询处理器将使用同义词库和干扰词文件以及断字符和词干分析器来处理查询。处理此查询之后,MSFTESQL 服务将结果集返回到 SQL Server 进程。此结果集可以用于进一步进行处理,也可以返回到客户端。