《sqlserver2005全文搜索.docx》由会员分享,可在线阅读,更多相关《sqlserver2005全文搜索.docx(30页珍藏版)》请在金锄头文库上搜索。
1、理論部份前言在数据库中快速搜索数据,使用索引可以提高搜索速度,然而索引一般是建立在数字型或长度比较短的文本型字段上的,比如说编号、姓名等字段,如果建立在长度比较长的文本型字段上,更新索引将会花销很多的时间。如在文章内容字段里用like语句搜索一个关键字,当数据表里的内容很多时,这个时间可能会让人难以忍受。在SQL Server中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数据的速度,在本節里,将会对全文索引进行详细的介绍(1)全文索引概念:全文索引与普通的索引不同,普通的索引是以B-tree结构来维护的,而全文索引是一种特殊类型的基于标记的功能性索引,是由Microsoft SQ
2、L Server全文引擎服务创建和维护的。使用全文索引可以快速、灵活地为存储在SQL Server数据库中的文本数据创建基于关键字查询的索引,与like语句不同,like语句的搜索是适用于字符模式的查询,而全文索引是根据特定语言的规则对词和短语的搜索,是针对语言的搜索。(2)全文索引常用术语(2.1)全文索引:一种特殊的索引,能在给定的列中存储有关重要的词及位置的信息,使用这些信息可以快速进行全文查询,搜索包括特定词或词组的行.(2.2)全文目录:全文目录是存储全文索引的地方,全文目录必须驻留在与SQL Server实例相关联的本地硬盘上,每个全文目录可用于满足数据库内的一个或多个表的索引需求
3、.(2.3)断字符与词干分析器:断字符与词干分析器都是用于对全文索引的数据进行语言分析的.语言分析通常都会涉及到查找词的边界和组合动词两个方面,其中要查找词的边界,也就是确定哪几个字符是词,称之为断字.组合动词也就是词干分析,用于分析词.根据语言的不同,语言分析规则也不尽相同,由此可以为每个全文索引列指定不同的语言.每种语言的断字符能够使得访问语言生成的词更为准确(2.4)标记:由断字符标识的词或字符串(2.5)筛选器:用于从存储在varbinary(max)或image列中的文件内提取指定的文本类型的文本,当varbinary(max)或image列中包含带有特定文件扩展名的文档时,全文搜索
4、会使用筛选器来解释二进制数据,筛选器会从文档中提取文本化信息并用于建立索引.(2.6)填充(爬网):创建维护全文索引的过程叫填充,也叫爬网.(2.7)干扰词:经常出现,但又不是要搜索的词.为了精简全文索引,这些词通常会被忽略.(3)全文索引的体系SQL Server的全文索引是由SQL Server FullText Search服务来维护的,该服务可以在Windows操作系统的【管理工具】-【服务】里找到,如图3.1所示,在此可以启动、停止、暂停、恢复和重新启动该服务.只有SQL Server FullText Search服务在启动状态时,才能使用全文索引.圖3.1SQL Server F
5、ullText Search服务由两个部分组件支持:一个是Microsoft Full-Text Engine for SQL Server(MSFTESQL),也就是SQL Server全文搜索引擎;另一个是Microsoft Full-Text Engine Filter Deamon(MSFTEFD),也就是全文搜索引擎过滤器.Microsoft Full-Text Engine for SQL Server的作用是填充全文索引、管理全文索引和全文目录、帮助对SQL Server数据库中的数据表进行全文搜索。Microsoft Full-Text Engine Filter Deamon
6、包含筛选器,协议处理程序和断字符三个组件,其作用是负责从数据表中访问和筛选数据以及进行断字和词干分析。其中,筛选器的作用是从文档中提取文本信息,并将非文本信息和格式化信息(如换行符、字体大小等信息)删除,然后生成文本字符串和属性的对应,并将它们传递给索引引擎;协议处理程序用于从指定数据库中的表内访问数据;断字符用于在查询或抓取的文档中确定字符边界位置。全文索引组件负责对全文索引的初始填充以及当全文索引表中的数据被修改时的更新。当全文填充(爬网)开始后,数据库引擎会将大量的数据存储到内存里,并通知Microsoft Full-Text Engine for SQL Server(MSFTESQL
7、)开始进行索引。当MSFTESQL服务接到进行索引的通知后,使用协议处理程序组件从内存中取得数据进行处理后生成全文索引。MSFTESQL服务会将数据表中的某一列或几列中的字符和二进制数据编制成索引。在对varbinary(max)或image列中的数据编制索引时,筛选器会将基于为该数据指定的文件格式来提取文本。在处理索引的过程中MSFTESQL服务通过断字符来将收集到的文本数据分隔成各个单独的标记或关键字。这个过程就是全文索引的过程。由于全文索引与普通的索引不同,全文索引并不是存储在数据表中,而是存储在全文目录中,所以在使用全文索引来搜索数据时,其运行的流程和普通索引也不一样。如图3.2所示,
8、当SQL Server发出全文搜索的请求后,会将搜索的条件传递给全文搜索引擎过滤器,经过MSFTEFD处理后,将数据提供给MSFTESQL,再由MSFTESQL从全文目录中找到符合要求的数据,再返回给SQL Server进行后续操作。这就是进行全文搜索的过程(4)全文目录管理在前面章节里提到,全文目录的作用是存储全文索引,所以要创建全文索引必须先创建全文目录(4.1)创建全文目录创建全文目录的方法如下:(1)启动【SQL Server Management Studio】,连接到本地默认实例,在【对象资源管理器】窗口里,选择本地数据库实例-【数据库】-【Northwind】-【存储】-【全文目
9、录】。(2)右击【全文目录】,在弹出的快捷菜单里选择【新建全文目录】选项。(3)弹出如图4.1所示的【新建全文目录】对话框,在该对话框的【全文目录名称】文本框内可以输入全文目录的名称;在【目录位置】文本框内可以输入全文目录的存储路径,单击其后的【】按钮可以选择路径,如果不输入的话,默认存储在“Program FilesMicrosoft SQL ServerMSSQL.1MSSQLFTData”目录下;在【文件组】下拉列表框里可以选择全文目录所属的文件组;在【所有者】文本框里可以输入全文目录的所有者;选中【设置为默认目录】复选框可以将此目录设置为全文目录的默认目录;【区分重音】单选框用于指明目
10、录是否区分标注字符。4.1【新建全文目录】对话框(4)设置完毕后单击【确定】按钮完成操作。(4.2)查看与修改全文目录全文目录添加完毕之后,可以在【对象资源管理器】窗口的【全文目录】树下看到新建的全文目录。双击该全文目录,或右击该全文目录,在弹出的快捷菜单里选择【属性】选项,将会弹出如图4.2所示【全文目录属性】对话框,在该对话框里可以查看全文目录的属性内容。在【全文目录属性】对话框里有三个标签:【常规】选项卡里可以查看和修改全文目录的设置;【表/视图】选项里可以查看和修改为全文目录分配的表和视图;【填充计划】选项项里可以添加或修改确定何时填充或重新填充全文目录的计划。在如图4.2所示的【全文
11、目录属性】对话框里,可以看到全文目录所属的文件组、名称、上次填充的时间、项计数、填充状态、目录大小、唯一键计数的内容,这些内容是不能修改的。可以修改项为:【默认目录】、【所有者】和【区分重音】三个选项内容。在【目录】操作区域,有三个单选按钮,其中【无】表示不执行优化目录、重新生成目录和重新填充目录操作;选择【优化目录】选项将会优化目录的空间利用率、提高搜索结果相关排名的准确性,从而提高查询性能;选择【重新生成目录】选项将会删除并重新生成全文目录,如果对全文目录的属性进行了更改,则必须执行该操作,例如在本对话框中修改了区分重音选择,则【目录】操作区域会自动变成灰色,系统自动重新生成全文目录;选择
12、【重新填充目录】选项将会使用数据的最新更改来更新目录。修改完毕之后,单击【确定】按钮完成操作图4.2查看全文目录属性(4.3)删除全文目录当全文目录不再需要使用时,可以将其删除,删除方式如下:(1)启动【SQL Server Management Studio】,连接到本地默认实例,在【对象资源管理器】窗口里,选择本地数据库实例-【数据库】-【Northwind】-【存储】-【全文目录】。(2)右击要删除的全文目录名,在弹出的快捷菜单里选择【删除】选项。(3)在弹出的【对象删除】对话框中单击【确定】按钮完成操作。如果要一次性删除多个全文目录,可以先在【对象资源管理器】窗口中定位到【全文目录】树
13、,在【摘要】对话框里选择多个全文目录,然后单击鼠标右键,在弹出的快捷菜单里选择【删除】选项。在弹出的【对象删除】对话框中单击【确定】按钮完成操作.(5)全文索引管理在创建完全文目录之后,可以动手创建全文索引了,下面将介绍如何创建、编辑和删除全文索引.(5.1)创建全文索引的注意事项在创建全文索引之前,先介绍创建全文索引要注意的事项:全文索引是针对数据表的,只能对数据表创建全文索引,不能对数据库创建全文索引。在一个数据库中可以创建多个全文目录,每个全文目录都可以存储一个或多个全文索引,但是每一个数据表只能够创建一个全文索引,一个全文索引中可以包含多个字段。要创建全文索引的数据表必须要有一个唯一的
14、针对单列的非空索引,也就是说,必须要有主键,或者是具备唯一性的非空索引,并且这个主键或具有唯一性的非空索引只能是一个字段,不能是多字段的组合。包含在全文索引里的字段只能是字符型的或image型的字段(5.2)创建全文索引下面以Northwind数据的“文章”表为例,介绍如何创建全文索引:(1)启动【SQL Server Management Studio】,连接到本地默认实例,在【对象资源管理器】窗口里,选择本地数据库实例【数据库】-【Northwind】-【表】-【文章】。(2)右击【文章】数据表,在弹出的快捷菜单里选择【全文索引】-【定义全文索引】。(3)弹出如图5.1所示【全文索引向导】
15、对话框,此对话框中显示的是全文索引向导的介绍,单击【下一步】按钮。5.1【全文索引向导】对话框(4)弹出如图5.2所示的【选择索引】对话框,此时可以选择要创建全文索引的数据表的唯一索引,使用该索引作为全文索引的唯一索引。在【唯一索引】下拉列表框里,列出该表中所有的唯一索引。在该对话框里选择唯一索引后,单击【下一步】按钮5.2【选择索引】(5)弹出如图5.3所示【选择表列】对话框,此时可以选择要加入全文索引的字段。在该对话框里可以选择一个或多个字段加入全文索引。SQL Server 2005可以对存储在image类型的字段中的文件进行全文搜索。image类型的字段中可以存入各种文件,但是SQL
16、Server 2005只支持Word、Excel、PowerPoint、网页和纯文本文件类型。如果要对image类型的字段里的文件进行全文搜索,必须还要有一个字符串类型的字段用于指明存储在image字段中的文件的扩展名。如图5.3中的文件字段,如果要对其创建全文索引,必须还要指定类型列。选择完毕后单击【下一步】按钮5.3【选择表列】对话框(6)弹出【选择更改跟踪】对话框,在该对话框里可以定义全文索引的更新方式,一共有三种更新方式:【自动】:选中此单选按钮后,当基础数据发生更改时,全文索引将自动更新;【手动】:如果不希望基础数据发生更改时自动更新全文索引,请选中此单选按钮。对基础数据的更改将保留下来。不过,若要将更改应用到全文索引,必须手动启动或安排