登陆注册
19122000000014

第14章 SQL Server的全文搜索(1)

本章要点

本章介绍基于SQL Server数据库的全文搜索技术,内容包括SQL Server全文搜索的原理、全文索引和搜索的实现,以及大数据的全文搜索优化。

4.1SQL Server简介

SQL Server是使用客户-服务器(C/S)体系结构的关系型数据库管理系统(Relational Database Management System,RDBMS)。1988年推出了第一个OS/2版本。1992年,SQLServer移植到NT上后,Microsoft成了这个项目的主导者。1994年以后,Microsoft专注于开发、推广SQL Server的WindowsNT版本。1996年,Microsoft公司推出了SQL Server6.5版本。1998年,推出了SQL Server7.0版本。2000年推出了SQL Server2000,2006年推出了SQL Server2005。

SQL Server2000提供了完善的图形化用户界面、丰富的编程接口工具,而且与WindowsNT完全集成,具有很好的伸缩性。它对Web技术提供良好支持并且提供数据仓库功能。

4.2SQL Server全文检索的基础知识

主流的数据库都提供了对于数据库中内容的全文索引和全文检索服务,利用这项服务可以对数据库中的大量信息实现迅速的模糊搜索。本章以及后面两章介绍基于世界最常用的三种数据库的全文检索技术,这些知识可以用于解决100万条数据以内的实际全文检索问题。

本章专门介绍SQL Server2000的全文搜索技术。

4.2.1Microsoft搜索服务简介

SQL Server自7.0版本起,支持全文检索功能,而且这项功能十分完善,对中文的支持也很好。这项功能到了SQL Server2000版本更加完善,在企业版(Enterprise Edition)和标准版(Standard Edition)中包含,个人版(Personal Edition)和开发版(Developer Edition)中没有。如果用户能在SQL Server的企业管理器中找到那个绿色的小箭头图标,就说明其SQL Server服务器支持全文检索。

本书使用的是SQL Server2000企业版。

SQL Server2000全文检索组件支持在字符串列上进行复杂的搜索,该功能由Microsoft搜索服务(Microsoft Search)实现,它之所以能实现全文检索,在于有两项重要的支持:索引支持和查询支持。前者用来建立索引,后者用来接收用户的查询条件,从索引中检索数据。

Microsoft搜索服务是一个全文索引和搜索引擎,它对索引的支持表现在它能为数据库定义全文目录和索引,接受全文目录及各目录中组成索引的表和列的定义,并填充全文索引。它能支持全文查询,确定索引中满足全文搜索条件的项,对于满足条件的每一项,它向MsSQLServer服务返回行标识和一个等级值,然后MsSQL Server服务使用这些信息构造查询结果集。

Microsoft搜索服务在本地系统账户的环境中运行。在安装过程中,SQL Server将自己添加为一个Microsoft搜索服务管理员。

全文目录和索引不存储在SQL Server数据库内,而是存储在Microsoft搜索服务单独管理的文件中。只有Microsoft搜索服务管理员和计算机系统管理员才能访问全文目录文件。

4.2.2Microsoft搜索服务对全文查询的支持

在执行全文查询的时候,不是使用like谓词,而是用新的、专用于全文检索的谓词和行集函数。

包括CONTAINS和FREETEXT谓词,以及CONTAINSTABLE和FREETEXTTABLE行集函数。

这些新谓词和行集函数可以统称为全文结构。含有全文结构的SQL语句传递到数据库中之后,全文提供程序就会使Microsoft搜索服务检索所需的信息。

整个检索的过程如下。

①用户通过应用程序给SQL Server实例发送带有全文结构的SQL语句。

②SQL Server关系引擎通过查询系统表来验证全文结构,然后将每个SQL语句简化为一系列行集操作,并通过OLEDB将这些操作传递给基础组件,通常是存储引擎。SQL Server关系引擎再通过全文提供程序将全文构造转换成对行集的请求。

③全文提供程序验证行集请求,然后将搜索条件变换为Microsoft搜索服务的查询组件能支持的形式,并将其发送给Microsoft搜索服务。

④Microsoft搜索服务查询组件从全文索引中提取所请求的数据,然后以行集的形式将这些数据回传给全文提供程序。

⑤全文提供程序将行集返回给关系引擎。

⑥关系引擎将它从存储引擎和从全文提供程序收到所有行集进行组合,返回给应用程序,然后显示给用户。

4.2.3Microsoft搜索服务对全文索引的支持

在SQL Server数据库中,文本数据是存储在char,varchar,text,ntext,nchar,nvarchar类型的数据列中的。常规方法检索这一类数据是很烦琐的,而且数据库在处理长文本数据时很容易出错。

全文查询是依赖于全文索引的,要首先建立好索引,然后才能执行查询。SQL Server全文检索服务可以建立全文索引,并且在后台更新索引,这样一来,填充或更新索引就不影响其他任务的执行。用户可以完全重建索引、增量重建索引、删除索引,对索引实现良好的管理。

而且,对于image列中存储的某些类型的数据也可以进行索引和检索,这包括.doc,.xls,.ppt,.txt和.htm等类型。设计表时,除包括保存数据的image列外,还需增加一个绑定列来保存存储在image列中的数据的格式,通常保存扩展名或MIME类型。

如果想让某一列数据允许执行全文检索,就要在这一列上注册全文检索。当全文注册列中的值更新时,或者这一列新添加了数据,或者这一列中的某一行被删除的时候,全文索引不会立即修改,而是被异步重新填充,这主要是由于以下两个原因:一般更新全文索引比更新标准索引所需的时间要多得多,耗费的系统资源也多。

全文检索的结果没有常规检索精确,这是它的弱点,也是特性。没有必要实时更新全文索引。

全文索引与普通的索引有很大的不同,它的实现方式读者可以参考第二章的相关内容去理解。全文索引事先分好了关键词,并计算出记录相对于关键词的等级(Rank),这样使得检索速度大大加快了。

4.2.4Microsoft搜索服务的全文管理

1.全文管理的层次

全文索引和普通索引的差异使大量管理任务变得不可缺少。全文管理是在几个层次上实施的,包括:服务器、数据库、全文目录、表和列。详情如下。

(1)服务器

可以对服务器范围的某些属性(如resource usage)加以设置,以便增加或减少全文服务所使用的系统资源数量。

说明:全文引擎作为名为Microsoft搜索的服务在Microsoft WindowsNT Server和Microsoft Windows2000Server上运行。对于Microsoft SQL Server个人版,Microsoft搜索服务不可用。尽管这意味着Microsoft搜索服务既未安装在Microsoft Windows95/98上,也未安装在Windows NT工作站或Windows2000 Professional客户端上,但这些客户端在连接到SQL Server标准版安装或企业版实例时就可以使用这项服务。

(2)数据库

必须启用数据库才能使用全文服务。可以在已启用的数据库中创建和除去一个或多个全文目录的元数据。

(3)全文目录

全文目录包含数据库中的全文索引。每个目录可以用于数据库内的一个或多个表的索引需求。该目录中的索引是使用这里介绍的管理功能来填充的。(全文目录必须驻留在与SQLServer实例相关联的本地硬盘驱动器上。不支持可移动的驱动器、软盘和网络驱动器)。在每个服务器上最多可创建256个全文目录。

说明:Windows NT故障转移群集环境完全支持全文索引。

(4)表

首先,必须为全文支持启用表。然后,为与该表相关联的全文索引创建元数据(如表名及其全文目录)。表启用后,可以用为全文支持而启用的列中的数据来填充它。如果表的全文定义被更改(例如,添加一个也将为全文检索而索引的新列),则必须重新填充相关的全文目录以使全文索引与新的全文定义同步。

(5)列

可以从非活动的全文注册的表中添加或除去支持全文查询的列。

在所有这些级别上,可使用工具检索元数据和状态信息。

与常规SQL索引一样,当在相关表中修改数据时,可自动更新全文索引。或者,也可用适当的间隔手工重新填充全文索引。这种重写可能既耗时又大量占用资源,因此,在数据库活动较少时,这通常是在后台运行的异步进程。

应将具有相同更新特性的表(如更改少的与更改多的,或在一天的特定时段内频繁更改的表)组合在一起,并分配给相同的全文目录。通过以此方法设置全文目录填充调度,使得全文索引和表保持同步,且在数据库活动较多时不对数据库服务器的资源使用产生负面影响。

2.为全文目录指定表的基本原则

为全文目录中的表安排全文索引的位置是非常重要的。在为全文目录指定表时,应该注意下列基本原则。

始终选择可用于全文唯一键的最小唯一索引(4个字节且基于整数的索引是最佳的)。

这将显着减少文件系统中Microsoft搜索服务所需要的资源。如果主键很大(超过100字节),可以考虑选择表中其他唯一索引(或创建另一个唯一索引)作为全文唯一键;否则,如果全文唯一键的大小达到允许的上限(450字节),全文填充将无法继续进行。

如果进行索引的表有成千上万行,请将该表指定给其自己的全文目录。

应该考虑对其进行全文索引的表中发生的更改数及表的行数。如果要更改的总行数,加上上次全文填充期间表中出现的行数达到成千上万行,请将该表指定给其自己的全文目录。

全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。全文查询利用这些信息,可快速搜索包含具体某个词或一组词的行。

3.注意事项

全文索引包含在全文目录中。

每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库,而每个目录可以包含一个或多个表的全文索引。

一个表只能有一个全文索引,因此每个有全文索引的表只属于一个全文目录。

全文目录和索引不存储在它们所属的数据库中,目录和索引由Microsoft搜索服务分开管理。

全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。

4.3启用SQL Server全文检索

本节实现一个基于SQL Server全文检索的百万记录的全文搜索引擎。

4.3.1建立测试数据库

建立一个数据库,名为tianen,数据库中只含有一个表格,名为test。这是一个存储文章的表格,包含四个字段:id是int类型自动增长列,作为主键;title是varchar(50)类型,用来存储文章标题;content是text类型,存储文章内容;common是varchar(50)类型,用于存储文章的其他信息。

4.3.2启用全文检索

在建立了数据库并输入测试数据之后,下面对刚才建立的数据表启用全文检索;步骤如下所示。

1.启动Microsoft搜索服务

有三种方法可以用来启动Microsoft搜索服务。

①进入SQL Server企业管理器,用鼠标右键单击“全文检索”节点,在弹出的快捷菜单中选择“启动”。如果当前图标为绿色,说明已经启动;如果是红色,则为停止,应启动。

②进入SQL Server服务管理器,“服务”中选择“Microsoft Search”,并单击“开始/继续”按钮。

③在“运行”对话框中直接输入命令“net start mssearch”,即可启动Microsoft搜索服务,使用“net stop mssearch”命令可以停止Microsoft搜索服务。

当然,在启动全文检索之前,需要先看看计算机上是否已经安装了全文检索组件。如果计算机上恰好没有企业管理器,那么就没办法“目测”了。可以通过储存过程FULLTEXTSER-VICEPROPERTY(返回有关全文服务级别属性的信息)来验证搜索服务(全文组件)是否安装。执行下面的语句:

use tianen

Select fulltextserviceproperty("IsFullTextInstalled")

同类推荐
  • 中国电影百年(1905-1976)

    中国电影百年(1905-1976)

    中国电影诞生已经整整一百个年头了。一百年前,中国人靠自己的聪明才智拍成了第一部中国电影《定军山》。从那时到现在,中国已经拍摄了近7000部电影。当我们仔细回望中国电影百年历程中每一季搏动的时候,我们都能真切地感受到代代相传的中国电影人的热血和信念。正是他们的赤诚、智慧和创造,才使中国电影毫无愧色地融进了中华民族不屈不饶、顽强奋进的奔涌之河,绘就了波澜壮阔、憾人心弦的史诗,令我们每一个中国人都有充分的理由为之自豪,为之骄傲!这本书收集了中国电影发展的点点滴滴,是一本值得珍藏的典籍,它让更多的电影爱好者能够领略百年中国电影的种种精彩。
  • 极地精灵的呢喃

    极地精灵的呢喃

    在动物界,人们经常用“朝生暮死”的蜉蝣来比喻生命的短暂与易逝。因此,野生动物从不“迷惘”,也不会“抱怨”.只会按照自然的安排去走完自己的生命历程,它们的终极目标只有一个一一使自己的基因更好地传承下去。在这一目标的推动下,动物们充分利用了自己的“天赋异禀”,并逐步进化成了异彩纷呈的生命特质。由此,我们才能看到那令人叹为观止的各种“武器”、本领、习性、繁殖策略等。
  • 素质教育在日本

    素质教育在日本

    多一些赞美,少一些指责,日本人认为,一个孩子发展成为一个成熟的人,应包括以下四个含义:身体的独立;知能的独立;经济的独立;精神的独立。
  • 小学生成语接龙天天读

    小学生成语接龙天天读

    成语是我国文化宝库中的一朵奇葩。熟记成语对小学生掌握语文知识和进行日常对话大有裨益。成语接龙形式活泼,好玩有趣,是小学生掌握成语的最佳形式之一。本书精选了适合小学生阅读和记忆的成语接龙,每组成语接龙附加了有趣的拓展栏目,并配有激发想象力的插图,让小学生在玩接龙、做游戏中轻松掌握成语,从而提高语言表达能力,积累课外知识。
  • 语文新课标课外必读第一辑——呐喊
热门推荐
  • 绅士自我修养

    绅士自我修养

    ——这就是绅士吗?——不!这是鬼畜法师(笑)!
  • 亚太安全析论

    亚太安全析论

    《亚太安全析论》内容包括国际战争与和平理论概述、亚太安全形势与战略、亚太安全机制、亚太军备控制、领土争端与亚太安全等七章。
  • 熙羽

    熙羽

    一个懵懵懂懂的九尾小妖狐,一群浑浑噩噩的逗比小伙伴,一场轰轰烈烈的三界大乱斗。熙香国色羽落长安醉剑九天美绝月下谨以此书献给YY4914户外女主播【熙羽】书友Q群:185664882
  • 爆囧萌妃:王爷别急嘛

    爆囧萌妃:王爷别急嘛

    当现代女主穿越到古代花痴草包女身上。惯有的情节是这样的:女主万能大逆转,光芒万丈,琴棋书画样样精通,医毒武艺无所不能,亮瞎所有人狗眼,再成为所有男人的梦中情人……而当她穿越过来,现实却是这样的:弹琴——你杀猪啊?跳舞——你当猪啊?眨眼——你个猪痴啊!
  • 恶少追爱记

    恶少追爱记

    景幻的爱情遭遇破灭,此时,出现一个让她痴迷的人--方流觞,从流觞见到小幻的第一面就深深爱上了这个女孩
  • 我成了丧尸

    我成了丧尸

    想象一幅画面,一群丧尸团团围在一辆汽车周围,车顶站着一个全副武装的人类,如果你就处于这个场景里,那么你将会是哪个人?——别YY了,你当然是在车底下那群丧尸里了,你以为你会有那么好的主角运?突如其来的病毒爆发,让张军毫无悬念的成了丧尸,与其他丧尸不同的仅仅是他在“死”之前做了一点点准备……大家好,我是一个丧尸,平时也就杀杀人吃点肠子什么的,所以这一定是个小清新的故事,咦那边有个妹子闻起来味道不错的样子……可是妹子啊,我是一个丧尸,抓你是为了看你尖叫反抗和挣扎,然后吃掉你啊,不是让你扑上来亲我啊,请你尊重一下丧尸这个职业好吗?我也很难受,但是还是不打算写下去了,主要是丧尸题材的离不开血腥暴力什么的太不和谐。本书被和谐部分会发到百度贴吧,见作品相关。
  • 变身之我的长官是锐雯

    变身之我的长官是锐雯

    当我再次醒来,我穿越了。好吧,这是好事,但是我太天真了,被追杀?小事。被士兵俘虏?行吧。为了保命居然还和一个叫锐雯的先锋官签订了主仆契约?为什么我的穿越生活这么多灾多难!·····从此和锐雯一起征战,流浪,定居。直到那天,我封印在刀刃之内,被卷入了时空乱流。瓦罗兰文,轻幽默吧,虽然本人不是很幽默。最后,变身慎入吧。谢谢大家。
  • 战旗

    战旗

    “九一八”事变,国民党撤出华北,国民党高级军官金戈冒死回到东安城内,想要接走自己的母亲和新婚妻子柳文婷。但日军已然进城,柳文婷被逼自尽,金戈被抓。我党地下工作者救出金戈,希望他能前往根据地,运用自己的军事知识与八路军共同抗日。然而金戈对八路军的作战能力持怀疑态度,他选择独自留在东安城附近杀鬼子。一次偶然的不打不相识,金戈遇到了我敌后抗日游击队队长戴金花,与他们一起击退了鬼子。从最初的互相看不上眼,到一起浴血奋战,金戈从戴金花身上看到了真正的抗日精神。他们成为一支活跃在敌后的抗日武装,极大地牵制了龟井的军事力量。1945年,日军在各个战场上节节败退,龟井想要在东安城实施“死海”计划,全城百姓生命安危悬于一线,金戈与金花带领队员潜入东安城,最终成功制止了“死海”计划,共同迎来了抗日胜利的曙光。
  • 鬼道升仙

    鬼道升仙

    人死为鬼,道成为仙鬼仙者,五仙之下一也以其一志阴灵不散,神识内守,感悟大道,是为鬼仙阴中超脱,神象不明,不入轮回,可得长生
  • 洪荒之老狼