当前位置:文档之家› SQL Server 2005全文检索技术

SQL Server 2005全文检索技术

SQL Server 2005全文检索技术1. 前言1.1 应用背景随着我国政府和企业信息化的快速普及和发展,来自于供应链、企业生产系统、办公自动化(或公文行文)系统、人事绩效系统、财务管理系统等无一不在积累着各类数据。

不仅如此,来自于企业门户网站、通过各种手持移动设备传递的会议通知、保存在业务员笔记本和PDA中的离线产品报价和短期个人销售信息也不一而足。

可以说信息无处不在、无时不在、无设备不在,但是它们是否可以在您的手中,即政府和企业的信息系统是否可以把员工需要的信息呈送到他们的指尖之下,这恐怕是另一回事了。

信息化普遍实施后,数据获取方式、获取手段的局限,是国内信息化建设主要面临的尴尬现状。

图1:Your Data,Any Where、Any Time、Any Device. But not on your finger.1.2 主要检索技术的区别有了数据但是没有被使用,那么这些数据不应该被称为信息。

它们无非是不断充斥设备和网络的比特而已,但是如何把数据提供给必要的人员,检索技术是其中非常有效的途径之一。

本文笔者主要基于微软平台,针对SQL Server 2005提供的全文检索技术进行介绍。

与关系数据查询、多维数据库查询和基于XML的XQuery、XPath不同,全文检索技术主要处理对象是基于超大数据量的文本数据和结构化的二进制数据上类似LIKE的模糊查询。

主要区别见下表。

表1:全文检索与关系数据库查询、多维数据查询、XML查询的对比2. 全文检索技术简要介绍2.1 基本概念如上文所说,全文检索主要应用领域如下:(1)大数据量、超大数据量的结构化平文本数据和模糊匹配查找(Char、Varchar、Nvarchar)。

(2)大数据量、超大数据量的层次型XML数据展开后的查找---含模糊查找(Xml type)。

(3)标准格式的二进制非结构化Word数据的查找(VarBinary[max]、Image)。

与其他检索技术不同的是,全文检索不仅仅提供词汇层次的查询支持,而且可以根据语言环境、不同语言的特点,甚至于用户自定义的配置提供不同语义级的大容量数据模糊匹配检索支持。

为了提供语义层次的检索,SQL Server 2005的全文检索明确了如下几个概念:(1)断字符(Word Breaker):因为对于不同的语言,哪些符号可以用于词汇的分割是不同的,因此全文检索支持不同语言环境的不同断字符。

(2)标记(Token):是由断字符标识的词或字符串。

由于划分是基于特定语言完成的,因此也可以做到语义层次的支持。

(3)干扰词(Noise Word):主要是那些经常出现,但是对于检索没有多少帮助的词汇。

例如:英语中的“a”、“and”、“is”、“the”,汉语中的“的”、“不”、“以”、“了”等。

SQL Server 2005中提供配置文件,允许用户自定义自己语言、甚至与本行业、本企业的检索干扰词。

(4)词干分析器(Stemmer):通过断字符分割后,根据具体的语言和该语言的语法规程生成的特定词汇的变形。

(5)同义词:即便是同一个语言,在检索的情况下也存在同义词如何处理的问题。

如果一个检索系统不能够识别近义词,而只能识别完全匹配的词汇,那对于我们中文这种表义的语言而言会带来很大不便。

同样的,一个行业内部也有很多同义词或者是缩略语。

例如如下的词语。

广播行业:“ABC”与“英国ABC广播公司”基本上类似,但是也可能和“澳大利亚广播公司”混淆。

政府行文:“ABC”与南美的“阿根廷、巴西、智利三国”是同义词。

军事领域:“ABC”与“原子、生物、化学战”同义。

不仅如此,由于日常使用的习惯,我们在口语表达和书面语表达上也有区别,这个也需要预先定义。

例如,很多口头常用的技术产品“Win2K”、“WinXP”等,虽然说起来很习惯,但是在行文的时候,一般都很正式的称为“Windows 2000”和“Windows XP”,因此SQL Server 2005上也提供类似词汇替换的支持,而且这些支持也是与具体语言相关的。

2.2 SQL Server 2005全文检索的技术架构SQL Server 2005的全文检索其实是由三个进程共同完成的,它们的总体逻辑架构如下:图2:SQL Server 2005的总体逻辑架构其中,三个进程分别为:(1)SQL Server process (Sqlservr.exe)(2)Microsoft Full-Text Engine for SQL Server process (Msftesql.exe) (3)Microsoft Full-Text Engine Filter Daemon process (Msftefd.exe)Msftefd主要是负责监控Msftesql进程,同时从具体的数据源根据通过使用对应的过滤器,把其中的文本信息根据断字符拆分成词汇列表(Wordlist)反馈给Msftesql进程。

整个全文检索的简要执行过程如下:(1)从客户端发送的全文查询会转到 SQL Server 进程中的 SQL Server 查询处理器。

(2)查询处理器再将它传递给全文查询组件,该组件将创建 OLE DB 命令树,并将它发送到 Microsoft Full-Text Engine for SQL Server (MSFTESQL) 服务。

(3)在 MSFTESQL 进程中,全文引擎查询处理器将使用同义词库和干扰词文件以及断字符和词干分析器来处理查询。

(4)处理此查询之后,MSFTESQL 服务将结果集返回到 SQL Server 进程。

此结果集可以用于进一步进行处理,也可以返回到客户端。

3. 规划您的全文检索由于全文检索概念相对较多,与多数读者日常接触的关系数据库查询有所区别,因此上文笔者简单介绍了SQL Server全文检索技术的几个要点,下面笔者介绍一下面对国际化趋势,在本政府或企业的分布式异构信息系统环境下,如何规划全文检索服务的建设。

3.1 全文检索服务的需求收集抛开其他需求分析内容不谈,仅全文检索服务自身就有很多特定的需求需要明确,下面是笔者列举的一些内容。

功能性的需求:(1)哪些业务数据需要提供全文的检索服务?(2)这些业务数据中那些关键信息是业务人员关心的?(3)需要支持哪些国家的语言?(4)有哪些行业术语、常用缩略词、替换词?(5)需要哪些检索功能,分别基于什么范畴的关键字展开检索?非功能性的需求:(1)业务上以前是否尝试过关系数据库查询、多维数据分析解决手头的问题?(2)检索时效性要求。

(3)习惯的检索操作平台(浏览器 / 桌面),查询结果的展示方式。

(4)授权控制。

(5)查询结果的导出和发布方式要求。

3.2 全文检索服务的需求分析作为系统分析人员,在收集到这些信息后,需要从技术的角度考虑现有的技术储备是否可以完成业务的要求,根据上面的业务需求,下面是笔者认为需要考虑的技术要点:(1)是否真的有必要使用全文检索技术,以往的关系数据库查询、多维数据分析、XML数据检索是否可以满足上述功能。

(2)用户要求的数据是否分布在不同的系统中,是否分布在不同的数据库上。

(3)数据源是否位于异构的操作系统和数据库上。

(4)不同语言的信息如何存储呢,拆分到不同的表,还是在应用层合并。

还是直接通过跨语言的同义词解决不同语言之上的关键词查找。

(5)如何选择现成的产品来集成,并完成操作台开发、信息发布、查询结果导出。

(6)通过数据库授权、证书系统授权还是应用自定义授权解决访问的安全性。

3.3 数据源的规划SQL Server 2005可以同时支持如下三种数据:(1)Char、Varchar、Nvarchar(2)XML(3)VarBinary(max)、Image对于第一种,由于都是SQL Server的内置类型,因此数据提取很容易。

对于后两种,为了保证Word、Excel、Power Point之类的格式化二进制数据可以被检索,一般在规划上还要增加伪列来标明对应的文件扩展名。

这样,可以保证SQL Server 2005全文检索的过滤器可以从对应的文件中提取出需要的文本内容,并把它通过断字符拆分成有效的词汇列表(Wordlist)。

集成方式如下:图3:标准VarBinary(max)、Image、XML类型的集成方式通过查询视图sys.fulltext_document_types可以获得已经安装的过滤器(即支持的文档类型),下面是现有SQL Server 2005默认支持的文档类型:(1).ascx、.asm、.asp、.aspx、.bat、.c、(2).cmd、.cpp、.cxx、.def、.dic、.doc、(3).dot、.h、.hhc、.hpp、.htm、.html、(4).htw、.htx、.hxx、.ibq、.idl、.inc、(5).inf、.ini、.inx、.js、.log、.m3u、.mht、(6).obd、.obt、.odc、.pl、.pot、.ppt、.rc、(7).reg、.rtf、.stm、.txt、.url、.vbs、.wtx、(8).xlb、.xlc、.xls、.xlt、.xml对于远程的SQL Server,可以通过链接服务器方式访问远端数据源的全文检索系统。

若要对链接服务器执行全文查询,必须先对远程服务器上的目标表和列创建全文索引。

然后,将远程服务器添加为链接服务器。

完成这些操作后,可以在包括CONTAINS 或 FREETEXT 这些全文查询的语句中使用,不过检索对象的命名是由四部分组成的名称对链接服务器上的目标表和列进行查询。

此外,对于以往保存在Oracle、DB2、MySQL等数据库产品上的text、image 数据,也可以通过SQL Server的复制或者集成服务来进行数据同步。

这个同步要根据文本内容的更新频率、业务许可间隔、数据类型进行配置。

常用的同步方式如下:(1)通过SQL Job,基于 ODBC/OLEDB 的分布式查询定期更新。

该方式可以视为从SQL Server端,定期批量从异构数据库“拉”出数据。

(2)通过IIOP、HTTP、Trigger + JOB、External Server等方式向SQL Server 写入。

该方式可以视为异构数据库根据配置定期向SQL Server端写入,即向SQL Server “推”数据。

(3)复制:该方式可以提供更为实时的同步,即可以通过具有事务性(Transactional)的单票数据更新实现,也属于向SQL Server “推”数据。

(4)通过中间介质 Export / Import:通过平文本之类的中间介质,配合FTP、Queue等发送方式,完成异构数据库的导出和SQL Server端的异步入库。

相关主题