学习 SQL2005 全文索引

来源:互联网 发布:ltemr弱覆盖优化案例 编辑:程序博客网 时间:2024/04/30 21:27

目前开发的一个项目数据量已达千万级别,其中就用到了sql2005的全文索引功能,通过学习其联机丛书,将一些重要的知识点做个归纳。

基础

使用全文搜索可以快速、灵活地为存储在 Microsoft SQL Server 数据库中的文本数据的基于关键字的查询创建索引。与仅适用于字符模式的 LIKE 谓词不同,全文查询将根据特定语言的规则对词和短语进行操作,从而针对此数据执行语言搜索。

在 Microsoft SQL Server 2005 中,全文搜索用于提供企业级搜索功能。由于在性能、可管理性和功能方面的显著增强,全文搜索可为任意大小的应用程序提供强大的搜索功能。

对大量非结构化的文本数据进行查询时,使用全文搜索获得的性能优势会得到充分的表现。对数百万行文本数据执行的 LIKE 查询可能需要花费几分钟时间才能返回结果;但对同样的数据,全文查询只需要几秒或更少的时间,具体取决于返回的行数。

可以对包含 char、varchar 和 nvarchar 数据的列创建全文索引。也可以对包含格式化二进制数据(如存储在 varbinary(max) 或 image 列中的 Microsoft Word 文档)的列创建全文索引。不能使用 LIKE 谓词来查询格式化的二进制数据。

全文搜索的体系结构

  • Microsoft Full-Text Engine for SQL Server (MSFTESQL)
  • Microsoft Full-Text Engine Filter Daemon (MSFTEFD),它包含下列组件:
    • 筛选器
    • 协议处理程序
    • 断字符

SQL Server 中的全文搜索的体系结构如下所示。

全文搜索的索引组件负责全文索引的初始填充,以及当全文索引表中的数据被修改时该索引的后续更新。为了提升全文索引过程的效率,Microsoft SQL Server 2005 改进了全文收集机制的体系结构,从而大大增强了性能。

全文填充(也称为爬网)开始后,数据库引擎会将大批数据存入内存并通知 Microsoft SQL Server 全文引擎 (MSFTESQL) 服务开始进行索引。MSFTESQL 服务将对表的某一列或几列中的字符和格式化二进制数据编制索引。全文引擎将使用协议处理程序组件从内存中取出数据并进行进一步处理,从而生成全文索引。

对存储在 varbinary(max) 或 image 列中的数据编制索引时,筛选器(实现了 IFilter 接口)将基于为该数据指定的文件格式(例如,Microsoft Word)来提取文本。在某些情况下,筛选器组件会要求将 varbinary(max) 或 image 数据写到服务帐户 Temp 目录中,而不是将其存入内存。

在处理过程中,通过断字符将收集到的文本数据分隔成各个单独的标记或关键字。用于标记化的语言将在列级指定,或者也可以通过筛选器组件在 varbinary(max)、image 或 xml 数据内标识。

还可能执行其他处理以删除干扰词并在将标记存储到全文索引或索引片断中之前将这些标记规范化。

填充完成后,将触发最终的合并过程,以便将索引片断合并为一个主全文索引。由于只需要查询主索引而不需要查询大量索引片断,因此这将提高查询性能,并且可以使用更好的计分统计信息来得出相关性排名。

● 全文搜索术语

下面列出了您在使用全文搜索时需要熟悉的术语和组件。

全文索引

在给定的列中存储有关重要的词及其位置的信息。可以利用这些信息快速计算全文查询,搜索包含特定词或词组的行。

全文目录

全文目录可以不包含全文索引,也可以包含数量不等的全文索引。全文目录必须驻留在与 SQL Server 实例相关联的本地硬盘上。每个目录可用于满足数据库内的一个或多个表的索引需求。除非附加了包含全文目录的只读数据库,否则不能将全文目录存储在可移动驱动器、软盘或网络驱动器上。

断字符

对于某种给定的语言,断字符可基于该语言的词汇规则对文本进行标记化。

标记

是由断字符标识的词或字符串。

词干分析器

对于某种给定的语言,词干分析器可基于该语言的规则生成特定词的变形。词干分析器是针对特定语言的。

填充或爬网

是创建和维护全文索引的过程。

筛选器

筛选器的任务是从文档中提取文本化信息流,并舍弃所有非文本化信息和格式化信息。筛选器将生成文本字符串和属性/值对,并依次将它们传递给索引引擎。给出指定的文件类型(例如 .doc)后,筛选器就可以从存储在 varbinary(max) 或 image 列中的文件内提取文本。

原创粉丝点击