《第13章全文检索-精品文档资料整理》由会员分享,可在线阅读,更多相关《第13章全文检索-精品文档资料整理(25页珍藏版)》请在金锄头文库上搜索。
1、第第13章章 全文索引全文索引全文索引技全文索引技术可以大大提高从可以大大提高从长字符串里搜索数据字符串里搜索数据的速度。当数据表内的内容很多的速度。当数据表内的内容很多时,使用全文索引比使用索,使用全文索引比使用索引更加引更加简便和快速。特便和快速。特别是需要搜索超是需要搜索超长字段字段时,全文,全文检索索的的优势会更加明会更加明显。13.1 全文索引概述全文索引概述全文索引与普通的索引不同。普通的索引是以全文索引与普通的索引不同。普通的索引是以B-TREE结构来构来维护的,而全文索引是一种特殊的,而全文索引是一种特殊类型的基于型的基于标记的功能性索引。它是由的功能性索引。它是由Micros
2、oft SQL Server全文引擎服全文引擎服务创建和建和维护的。的。13.2 全文索引中常用的术语全文索引中常用的术语由于全文索引中使用了很多新的由于全文索引中使用了很多新的专有有术语,在此先介,在此先介绍这些些术语。l全文索引全文索引l全文目全文目录l断字符与断字符与词干分析器干分析器l标记l筛选器器l填充填充l干干扰词13.3 全文索引的体系结构全文索引的体系结构SQL Server的全文索引是由的全文索引是由SQL Server FullText Search服服务来来维护的。的。该服服务可以在可以在Windows操作系操作系统的的【管理工具】【管理工具】|【服【服务】中找到,可以启
3、】中找到,可以启动、停止、停止、暂停、恢停、恢复和重新启复和重新启动该服服务。只有。只有SQL Server FullText Search服服务在启在启动状状态时才能使用全文索引。才能使用全文索引。13.4 全文目录管理全文目录管理如前所述,全文目如前所述,全文目录的作用是存的作用是存储全文索引,所以全文索引,所以要要创建全文索引必建全文索引必须先先创建全文目建全文目录。13.4.1 创建全文目录创建全文目录下面就以下面就以为学生信息学生信息创建全文目建全文目录为例,例,讲解解创建全文目建全文目录的操作步的操作步骤。 (1)启启动SQL Server Management Studio,展开
4、【,展开【对象象资源管理器】源管理器】|【数据【数据库】|【StudentMan】|【存【存储】分支,】分支,右右击【全文目【全文目录】分支,在】分支,在弹出的快捷菜出的快捷菜单中中选择【新建全文目【新建全文目录】命令,】命令,弹出【新建全文目出【新建全文目录】对话框。框。 (2)在【全文目在【全文目录名称】文本框中名称】文本框中输入全文目入全文目录的名称的名称“ftStudent”;在【所有者】文本框中;在【所有者】文本框中输入全文目入全文目录的所有者的所有者“dbo”;勾;勾选【设置置为默默认目目录】复】复选框,可以将此目框,可以将此目录设置置为全文目全文目录的默的默认目目录;【区分重音】
5、;【区分重音】选项组用于指明目用于指明目录是否区是否区分分标注字符。注字符。设置完置完毕后,后,单击【确定】按【确定】按钮。 (3)全文目全文目录添加完添加完毕之后,可以在【之后,可以在【对象象资源管理器源管理器】|【数据【数据库】|【StudentMan】|【存【存储】|【全文目【全文目录】分支下】分支下看到新建的全文目看到新建的全文目录。13.4.2 查看与修改全文目录查看与修改全文目录全文目全文目录创建完成后,建完成后,还需要需要进行修改。下面就以行修改。下面就以学生信息学生信息库的全文目的全文目录为例,例,讲解解对全文目全文目录进行更多行更多设置置的操作步的操作步骤。13.4.3 删除
6、全文目录删除全文目录当全文目当全文目录不再不再满足需要足需要时,可以将其,可以将其删除,操作除,操作步步骤如下:启如下:启动并登并登录SQL Server Management Studio,展开【展开【对象象资源管理器】源管理器】|【数据【数据库】|【StudentMan】|【存存储】|【全文目【全文目录】分支,右】分支,右击全文目全文目录【ftStudent】,】,在在弹出的快捷菜出的快捷菜单中中选择【删除】命令,除】命令,弹出【出【删除除对象】象】对话框,框,单击【确定】按【确定】按钮完成操作。完成操作。13.5 全文索引管理全文索引管理创建了全文目建了全文目录之后,就可以之后,就可以创
7、建全文索引了。下建全文索引了。下面将介面将介绍如何如何创建、建、编辑和和删除全文索引。除全文索引。13.5.1 创建全文索引的注意事项创建全文索引的注意事项在在创建全文索引之前,需了解建全文索引之前,需了解创建全文索引的注意事建全文索引的注意事项。l全文索引是全文索引是针对数据表的,只能数据表的,只能对数据表数据表创建全文索引,不能建全文索引,不能对数据数据库创建全文索引。建全文索引。l在一个数据在一个数据库中可以中可以创建多个全文目建多个全文目录,每个全文目,每个全文目录都可以都可以存存储一个或多个全文索引。但是每一个数据表只能一个或多个全文索引。但是每一个数据表只能够创建一个建一个全文索引
8、,一个全文索引中可以包含多个字段。全文索引,一个全文索引中可以包含多个字段。l要要创建全文索引的数据表必建全文索引的数据表必须要有一个唯一的要有一个唯一的针对单列的非空列的非空索引。也就是索引。也就是说,必,必须有主有主键或具或具备唯一性的非空索引,并且唯一性的非空索引,并且这个主个主键或具有唯一性的非空索引只能是一个字段,不能是多或具有唯一性的非空索引只能是一个字段,不能是多字段的字段的组合。合。l包含在全文索引内的字段只能是字符型的或包含在全文索引内的字段只能是字符型的或image型的字段。型的字段。13.5.2 创建全文索引创建全文索引下面以学生信息下面以学生信息库中学生信息表中学生信息
9、表StudentList为例,例,讲解解创建全文索引的操作步建全文索引的操作步骤。13.5.3 查看与修改全文索引查看与修改全文索引创建了全文索引后,右建了全文索引后,右击数据表,在数据表,在弹出的快捷菜出的快捷菜单中中选择【全文索引】【全文索引】|【属性】命令,【属性】命令,弹出【全文索引属性】出【全文索引属性】对话框,可以框,可以查看全文索引的看全文索引的设置。置。可以看到全文索引目前的可以看到全文索引目前的设置情况,在此可以修改是置情况,在此可以修改是否启用全文索引和全文索引的更改跟踪信息。打开【列】否启用全文索引和全文索引的更改跟踪信息。打开【列】页,显示全文索引的列信息,在此可以修改
10、全文索引所包含的列信示全文索引的列信息,在此可以修改全文索引所包含的列信息。息。13.5.4 启用和禁用全文索引启用和禁用全文索引全文索引全文索引创建完建完毕之后,不会立即自之后,不会立即自动启用,所以需要手启用,所以需要手动启用全文索引。启启用全文索引。启动全文索引的方法如下:在【全文索引的方法如下:在【对象象资源管理源管理器】面板中展开【数据器】面板中展开【数据库】|【StudentMan】|【表】分支,右【表】分支,右击【StudentList】,在】,在弹出的快捷菜出的快捷菜单中中选择【全文索引】【全文索引】|【启【启用全文索引】命令。用全文索引】命令。如果要禁用全文索引,可以采取以下
11、方法来禁用全文索引:如果要禁用全文索引,可以采取以下方法来禁用全文索引:在【在【对象象资源管理器】面板中展开【数据源管理器】面板中展开【数据库】|【StudentMan】|【表】分支,右【表】分支,右击【StudentList】,在】,在弹出的快捷菜出的快捷菜单中中选择【全文索引】全文索引】|【禁用全文索引】命令。【禁用全文索引】命令。13.5.5 删除全文索引删除全文索引当全文索引不再使用,可以将其当全文索引不再使用,可以将其删除,操作步除,操作步骤如下。如下。(1) 在【在【对象象资源管理器】面板中展开【数据源管理器】面板中展开【数据库】|【StudentMan】|【表】分支,右【表】分支
12、,右击【StudentList】,在】,在弹出的出的快捷菜快捷菜单中中选择【全文索引】【全文索引】|【删除全文索引】命令,除全文索引】命令,弹出【出【删除全文索引】提示框除全文索引】提示框。(2)单击【确定】按【确定】按钮完成操作。完成操作。13.6 填充全文索引填充全文索引填充全文索引填充全文索引实际就是更新全文索引,目的是就是更新全文索引,目的是让全全文索引能文索引能够反映最新的数据表内容。反映最新的数据表内容。13.6.1 填充全文索引的方式填充全文索引的方式填充全文索引有以下填充全文索引有以下3种方式。种方式。l完全填充完全填充l基于更改跟踪方式的填充基于更改跟踪方式的填充l基于增量基
13、于增量时间戳方式的填充戳方式的填充13.6.2 填充全文索引填充全文索引由于填充全文索引有由于填充全文索引有3种不同的方式,所以填充全文种不同的方式,所以填充全文索引的方法也不相同。下面就以学生信息表的全文索引索引的方法也不相同。下面就以学生信息表的全文索引为例,例,讲解解3种不同方式的操作步种不同方式的操作步骤。13.7 使用全文搜索查询使用全文搜索查询设置了全文索引并填充完置了全文索引并填充完毕之后,就可以通之后,就可以通过全文搜索全文搜索来来查询数据了。使用全文搜索来数据了。使用全文搜索来查询数据所用到的数据所用到的Transact-SQL语句也是句也是SELECT语句,只是在句,只是在
14、设置置查询条件条件时和前面所述和前面所述的的SELECT语句的句的查询条件条件设置有些不同。在置有些不同。在Transact-SQL语言中,可以在言中,可以在SELECT语句的句的WHERE子句里子句里设置全文搜索的置全文搜索的查询条件,也可以在条件,也可以在FROM子句里子句里设置置查询条件,此条件,此时将返回将返回结果果作作为FROM子句中的表格来使用。子句中的表格来使用。如果要在如果要在WHERE子句里子句里设置全文搜索的置全文搜索的查询条件,可条件,可以使用以使用CONTAINS和和FREETEXT两个两个谓词;如果要在;如果要在FROM子子句里句里设置全文搜索的置全文搜索的查询条件条
15、件 ,可以使用,可以使用CONTAINSTABLE和和FREETEXTTABLE两个行集两个行集值函数。函数。13.7.1 使用使用CONTAINS搜索搜索CONTAINS应用于用于SELECT语句的句的WHERE子句中,可子句中,可以支持使用复以支持使用复杂的的语法在字符列中搜索法在字符列中搜索词、子句、衍生字或、子句、衍生字或位置相近的字符串。位置相近的字符串。CONTAINS谓词可以在数据表中使用以可以在数据表中使用以下下5种形式搜索数据。种形式搜索数据。l简单词l派生派生词l前前缀词l加加权词l邻近近词下面分下面分别介介绍如何使用如何使用这些不同的方式来搜索数据。些不同的方式来搜索数据
16、。1CONTAINS的的语法法2简单词的搜索方式的搜索方式3派生派生词的搜索方式的搜索方式4邻近近词的搜索方式的搜索方式13.7.2 使用使用FREETEXT搜索搜索FREETEXT搜索方式与搜索方式与CONTAINS搜索方式相比,其搜索方式相比,其搜索搜索结果都十分不精确。因果都十分不精确。因为FREETEXT的搜索方式是将一的搜索方式是将一个句子中的每个个句子中的每个单字拆分开来字拆分开来进行搜索的。例如,如果使用行搜索的。例如,如果使用CONTAINS搜索方式搜索条件搜索方式搜索条件为“教育部教育部”的的记录,那么搜索,那么搜索出来的将是出来的将是记录中包含中包含“教育部教育部”3个字符
17、串的个字符串的记录。如果使用。如果使用FREETEXT搜索方式搜索条件搜索方式搜索条件为“教育部教育部”的的记录,那么搜索,那么搜索出来的将是出来的将是记录里包含里包含“教教”、“育育”或或“部部”的的记录。如果搜索。如果搜索的是英文字符串的是英文字符串“SQL Server 2008”,则则拆分拆分为为“SQL”、“Server”和和“2008”来来进行搜索,只要行搜索,只要满足其中一个条件就可足其中一个条件就可以搜索成功。以搜索成功。13.7.3 使用使用CONTAINSTABLE搜索搜索CONTAINSTABLE函数与函数与CONTAINS谓词类似,可似,可以返回符合条件的多条以返回符合
18、条件的多条记录,但是返回的,但是返回的记录作作为数据表出数据表出现在在SELECT语句的句的FROM子句中。子句中。这个数据表里只包含两个数据表里只包含两个字段:一个字段名个字段:一个字段名为“KEY”,该字段字段显示的是全文索引的示的是全文索引的唯一索引唯一索引键的内容;另一个字段名的内容;另一个字段名为“RANK”,该字段是排字段是排名名值字段,其排名字段,其排名值是由系是由系统依依查询符合的程度自符合的程度自动生成的。生成的。13.7.4 使用使用FREETEXTTABLE搜索搜索与与CONTAINSTABLE一一样,FREETEXTTABLE函函数也是返回数也是返回拥有有KEY和和RA
19、NK两个字段的表,两个字段的表,该表可以和数表可以和数据据库中的数据表一中的数据表一样使用。使用。13.7.5 搜索搜索image字段字段在在SQL Server 2008的的image类型的字段里,不型的字段里,不仅仅可以存可以存储图形文件,形文件,还可以存可以存储如可如可执行文件、声音文件、行文件、声音文件、文本文件等众多文件文本文件等众多文件类型。型。SQL Server 2008支持支持对存存储在在image类型字段里的一些文件的内容型字段里的一些文件的内容进行全文搜索,但在行全文搜索,但在创建全文索引建全文索引时必必须指明存指明存储在在image字段里的文件字段里的文件类型。型。13
20、.8 小结小结本章本章讲解了全文索引的解了全文索引的创建方法与用法。它可以快速、建方法与用法。它可以快速、灵活地灵活地为存存储在数据在数据库中的文本数据的基于关中的文本数据的基于关键字的字的查询创建索引,不但可以搜索文本字段,也可以建索引,不但可以搜索文本字段,也可以对存存储在在image类型字段里的文件型字段里的文件进行全文搜索。本章的重点是掌握如何行全文搜索。本章的重点是掌握如何创建建全文目全文目录,难点是其中的使用。在点是其中的使用。在实际搜索中会有很多不同搜索中会有很多不同的的查找需求,找需求,这就需要就需要读者灵活运用者灵活运用SQL Server中的各种中的各种查找条件关找条件关键字来完成功能。字来完成功能。13.9 习题习题(1)为科目信息表建立全文目科目信息表建立全文目录,并,并进行索引操作。行索引操作。(2)在科目信息表中)在科目信息表中查询所有教所有教师名字中名字中带有有“志志”的的记录。