登陆注册
7538600000014

第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")

同类推荐
  • 以案说法:中国航空工业第二集团公司案例选编

    以案说法:中国航空工业第二集团公司案例选编

    本书分公司企业类、合同类、担保类、知识产权类、产品质量类、民事诉讼程序类、其他相关案例七部分,案例按照案情介绍、处理经过、经验教训与案例评析、本案法律要点四部分的体例编排,通过对案件起因、背景情况以及处理经过的介绍,总结其中的经验与教训等。
  • 中学生素质教育读本:让你更快乐

    中学生素质教育读本:让你更快乐

    英国作家史蒂文森说:遇到一个快乐的人,好过拾到一张大钞票。快乐的重要性是不容忽视的,快乐不但能提升我们的学习及工作效能,令人得到更大的满足感,更能让我们积极乐观低面对挑战和困难。
  • 语文新课标课外必读·第九辑:热爱生命

    语文新课标课外必读·第九辑:热爱生命

    国家教育部颁布了最新《语文课程标准》,统称新课标,对中、小学语文教学指定了阅读书目,对阅读的数量、内容、质量以及速度都提出了明确的要求,这对于提高学生的阅读能力,培养语文素养,陶冶情操,促进学生终身学习和终身可持续发展,对于提高广大人民的文学素养具有极大的意义。
  • 学生自学学习的方法

    学生自学学习的方法

    学生怎样学习才能达到最好的效果,一直是众多教师和家长非常关注的问题。要解决这个问题,不同的人能提出上千种不同的方法,但最根本的一条,则是大家都认可的,那就是运用良好的学习方法,这是一条行之有效的学习途径。学习方法是指通过许许多多人的学习实践,总结出来的快速掌握知识的方法。因其以学习掌握知识的效率有关,所以受到大家的特别重视。学习方法并没有统一的标准和规定,它因个人条件的不同,选取的方法也有一定的差别。
  • 新课程课堂教学反思

    新课程课堂教学反思

    本书从“理想的课堂教学”、“课堂教学的有效组织”、“课堂教学的实施”、“课堂教学的反思与改进”等几个方面对新课程课堂教学所遇到的种种问题进行反思与指导。
热门推荐
  • Terraria:黑色闪电

    Terraria:黑色闪电

    本作品属于对游戏Terraria的同人小说,如果部分内容涉及Re-Logic公司的版权,可以来投诉删除,第一次写同游小说,不太清楚哪方面涉及Terraria,多多指教
  • 重生神医宠妃

    重生神医宠妃

    爱一个人我付出了许多,但是每每的打击我都忍了,可是有一天我们才发现其实早就爱上对方只是不敢说出口罢了
  • 从柱灭开始变强

    从柱灭开始变强

    失去是得到的预告,孤独是强大的代价。从青涩到成熟,从弱小到强大,失去的太多,到最后一个人的强大还有意义吗?渡边彼方:“没有意义就去创造意义。”
  • 暮景笙思楠春秋亦白发

    暮景笙思楠春秋亦白发

    她是林思楠,是慕思楠,亦是暮思楠,她是林家养女,是慕家子女,亦是暮家二小姐,她这一生就像是一个笑话,她经历了他人未曾经历过的事,经历了他人未曾经历过的富贵荣华,也经受了他人未曾经受的苦,她的一生,是她,又不是她,生活本已走上正轨,可突然又像一道晴天霹雳打得她无法接受,她的父母去世了,从此,她只剩下姐姐了,半生分离,半生永隔,天上地下,永不再见,从此,她只余一方小小的墓碑,“姐姐,从此,你一定要好好的活下去,思楠不能再陪着你了,天上地下,余生不见!”那年桃花散落,不知是迷了何人的眼,“思楠,你可真是狠心。”“从此,一生一世,一双人,可是,那还有以后啊,你们一定要好好的活下去啊,陆冥安,我不欠你什么了。”“阿笙,你,罢了,是我欠你的,若有来世,我们再会,来世,你娶我可好?”所有的所有,皆化作了乌有。
  • 逆仙叛圣

    逆仙叛圣

    满月余晖遮挡了稀疏星影。陨星,时隔万年却再放光华,这次的独星之光似乎要照亮诸天星斗,将看似无瑕的天空中的阴暗尽数暴露。陨星再现,一贵族少年在因缘的大手下逐步走向真实与虚幻的交界,他会如何选择?
  • 末日之压力星球

    末日之压力星球

    生存的压力,足以把人逼疯。当人类接受不了的时候,就是新的一轮淘汰
  • 黑塔皇帝

    黑塔皇帝

    包揽各大棋类冠军头衔,被誉为“鬼棋士”的银青因事故而穿越,成为了索菲亚帝国中,曾经荣耀的圣塔家族最后的家主。这个等级森严的帝国就犹如棋盘,人人都被迫置身其上。平民为贵族压迫剥削,贵族为皇帝玩弄股掌,皇帝在天使面前低下高贵的头颅,天使侍立在神的身侧。是要作为一个棋子默默无闻地苟且一生?还是不断挣扎奋起,一步步踏上更大的棋盘,最终成为神的对弈者?.武技三大层次:武形、武意、武心法术三大层次:元素掌控、生命领悟、灵魂律令
  • 杀弃

    杀弃

    四件稀世奇珍,四种骇人的力量,是它能左右天下大局,还是一个叫做纪十的男人。
  • 霍先生又心机了

    霍先生又心机了

    【霍靳崖X戈蓝】“霍先生,你家猫又跑我家里来了!”“嗯,晚饭要不要吃糖醋鱼?”“……水煮鱼片吧,想吃点辣。”“好,猫粮是不是快没了?”“唔,我看看……嗯,没了,你带点回来。”“好,今晚你收留一下猫吧。”“好……看在晚饭的份上!”“呵呵……今晚你收留一下我吧。”“……好。”看在你长得好看的份上!
  • 伊忘楠回

    伊忘楠回

    那一年,在对的时间,遇到错的人,命运的时钟开始逆向转动;幸好有你的默默付出,静静守候......那一天的邂逅,我想我永远不会忘。那一张照片中,其实有三个人,而我,却只看到了两个人。别人说:“一次相遇是偶然,两次相遇是必然,三次相遇是命中注定”如果这个世界上有如果,我一定要回到相遇的那一天,告诉李伊“不要让所有的悲剧因你错误的选择而发生......"