SQL Server 2005全文检索技术
- 格式:doc
- 大小:414.50 KB
- 文档页数:26
SQL Server 全文索引查询T-SQL学习笔记之一(Full-text index)2009-12-11 11:29引言这段时间为了提高海量字符串数据的查询效率,我对字段添加了全文索引。
首先全文索引相对于传统的索引是有区别的,这是因为传统的索引主要是以首字母开始建立的索引,处理like 'keword%'这样的查询会很高效,但是如果查询时不限定首字母,而只是包含某个词,比如like '%keyword%'这样的查询,实际操作中无法使用传统索引加速查询效率,而只能一项一项比较了。
而全文索引正是提供了“包含”式查询机制,查询一个长字符串中是否包含给定关键词的功能,这无论是在搜索引擎或是网站的搜索平台都是很有用处的。
首先,推荐一本学习SQL Server全文索引的书籍,这本书详细的讲解了全文索引的方方面面,甚至还阐述许多设计搜索引擎的思想和方法。
书名是《Pro Full-Text Search in SQL Server 2008》,是Apress出版的。
这本书的内容是按章划分的,同时由浅入深,从一般的技巧到高级的技巧。
我这里就简单分享一下基本的全文查询方法,更多高级的技巧应该在实际应用中按需进行学习。
要实现全文查询,首先安装的SQL Server实例要支持全文查询服务,可以查看windows服务是否有全文索引服务。
如果没有,则要重新安装SQL Server并选择添加功能,将Full-Text功能选中,然后再安装或升级。
有了全文查询服务,还不能直接进行查询,需要先在想要建立全文索引的字段上建立一个全文索引。
方法是打开企业管理器,选择字段所在表格,然后点击右键,选择"Full-text inde”,然后选择"define Full-text index"就能进入设置面板。
需要注意的是,全文索引只能建立在Unique(唯一)字段上,并且每个表最多只能有一个全文索引字段,因此要慎重。
如何用C#实现数据库全文检索目前行业网站的全文检索的方式主要有两种方式一:通过数据库自带的全文索引方式二:通过程序来自建全文索引系统以Sql Server 2005为例2005本身就自带全文索引功能,你可以先对数据库表建立索引,具体如何建索引网上搜索一下,建立完索引之后,你就可以用SQL来实现检索功能,例如:select * from ytbxw where contaiins(字段,' 中国');多个查询值之间可以用and 或or来实现,在单表以及单表视图上建全文索引对2005来说根本不是问题,但在多表视图建全文索引2005目前还无法实现这个功能,拿为例,其每个栏目的信息都是分开存放的,所以在检索上就无法用该方法来解决这个问题.下面重点说一下如何用程序来实现检索功能如果你想自己开发一个全文检索系统,我想这是相当复杂事情,要想实现也不是那么容易的事情,所以在这里我推荐一套开源程序,那就是 DotLucene,我想大家可能都听过这个东东吧,那我就讲讲如何来实现多表情况下的全文检索.1、新建winform项目,把.dll添加到该项目中来2、创建一个类,类名可以自己取public class Indexer{private IndexWriter writer;//在指定路径下创建索引文件public Indexer(string directory){writer = new IndexWriter(directory, new StandardAnalyzer(), true); writer.SetUseCompoundFile(true);}//将信息添加到索引文件中/*Field.Text:为索引+读取Field.UnIndexed:不需要做索引*/public void AddHtmlDocument(string path,string title,string content) {Document doc = new Document();doc.Add(Field.Text("text", content));doc.Add(Field.UnIndexed("path", path));doc.Add(Field.Text("title", title));writer.AddDocument(doc);}//解析HTML,过滤HTML代码private string parseHtml(string html){string temp = Regex.Replace(html, "<[^>]*>", "");return temp.Replace(" ", " ");}//从页面中获取文章标题private string getTitle(string html){Match m = Regex.Match(html, "<title>(.*)</title>");if (m.Groups.Count == 2)return m.Groups[1].Value;return "(unknown)";}//添加新闻到索引public void AddNews(){//从数据库获取记录(这部分略过)for (int i = 1; i <= PageSize; i++){RootId =int.Parse(dr["ClassId"].ToString().Substring(0, 2));// 写入索引parseHtml(dr["Content"].ToString()));}/info/}//关闭索引public void Close(){writer.Optimize();writer.Close();}}以上就是建立索引的过程,在数据读取的时候最好分披读,比如一次300条,这样效率会比较高.。
数据库查询是数据库中一个最重要也是最基本的功能,它是从数据库中检索符合条件的数据记录的选择过程。
SQL Server 2005的数据库查询使用T-SQL语言,其基本的查询语句是SELECT 语句。
SELECT [ALL|DISTINCT] [ TOP <operator> ][<column_name >] [AS< column_name >] [, [<column_name >] <Select operator >[AS < column_name >]…]FORM[<database_name >] < table_name >[[AS]Local_Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER]JOIN[ <database_name>] <table_name> [[AS]Local_Alias][ON<联接条件> ]][INTO <select> |TO FILE <file_name> [ADDITIVE]| TO PRINTER [PROMPT] | TO SCREEN][PREFERENCE PreferenceName][NOCONSOLE][PLAIN][NOW AIT][WHERE < operator 1> [AND < operator 2>…][AND | OR < operator >…]][GROUP BY < operator > ][, < operator > …]][HA VING ]< operator > ][UNION [ALL] <SELECT column_name > ][ORDER BY < column_name > [ASC |DESC] [, < column_name >8.1.1 选择列选择列指的是通过限定返回结果的列组成结果表。
本章主要介绍SQL Server 2005的相关基础知识,包括:●SQL Server的发展历史;●SQL Server 2005各版本的应用环境与功能比较、SQL Server 2005的新特性;●安装Microsoft SQL Server 2005的硬件条件和软件环境;●Microsoft SQL Server 2005的安装与卸载;●Microsoft SQL Server 2005工具的简介。
2.1 SQL Server 2005简介Microsoft的SQL Server作为众多数据库软件的一种,是网络世界的一个支撑。
从20世纪80年代后期开发SQL Server,到2005年底SQL Server 2005的发布,Microsoft历经十几年的磨练,使SQL Server从无到有,从小到大,而且新一代的SQL Server 已经开始逐渐成为Windows操作系统未来的核心,成为主流数据库软件。
2.1.1 SQL Server的发展历史1987年,由Microsoft、Sybase和Aston-Tate三家公司共同开发了Sybase SQL Server。
1988年,由Microsoft公司、Sybase公司和Aston-Tate公司共同开发了运行于OS/2平台的SQL Server。
1992年,由Microsoft公司和Sybase公司共同开发了运行于Windows NT平台,包含较少的功能,与Windows集成,提供了易于操作的用户界面的桌面数据库系统SQL Server。
1994年,Microsoft公司与Sybase公司,各自开发自己的SQL Server。
前者开发基于Windows NT平台上的SQL Server,而后者开发基于UNIX平台上的SQL Server。
随后Microsoft公司推出了其独自开发的SQL Server 6.0。
本书所提的SQL Server若无特别说明,则专指Microsoft 公司开发的产品。
sqlserver management studio 2005中文【原创版】目录1.SQL Server Management Studio 2005 简介2.SQL Server Management Studio 2005 的功能3.SQL Server Management Studio 2005 的使用教程4.SQL Server Management Studio 2005 的优点与不足5.总结正文【1.SQL Server Management Studio 2005 简介】SQL Server Management Studio(简称 SSMS)是微软公司推出的一款用于管理和操作 SQL Server 数据库的图形化工具。
SQL Server Management Studio 2005 是其早期版本,虽然现在已有更新的版本,但仍然有许多用户使用它。
本文将为您介绍 SQL Server Management Studio 2005 的基本情况。
【2.SQL Server Management Studio 2005 的功能】SQL Server Management Studio 2005 具有强大的功能,可以帮助用户轻松地管理和操作 SQL Server 数据库。
主要功能包括:(1)查询和修改数据:可以使用 SQL 语句直接查询和修改数据库中的数据。
(2)设计数据库:可以创建、修改和管理数据库的结构,包括表、视图、索引等。
(3)数据同步:可以实现不同数据库之间的数据同步,方便数据共享和迁移。
(4)备份和恢复:可以对数据库进行备份和恢复,确保数据安全。
(5)性能监控:可以监控数据库的性能,发现并解决性能瓶颈。
【3.SQL Server Management Studio 2005 的使用教程】(1)连接数据库:首先需要连接到 SQL Server 数据库,可以使用“连接”菜单下的“服务器”选项,输入服务器名称、IP 地址和登录信息。
Sqlserver 全文检索功能浅解全文索引和全文检索是sql server 7.0的新增功能,它能够对数据中的字符类型列(如varchar、text等类型列)进行检索,并通过索引实现全文搜索查询。
sql server常规索引与全文检索相比,二者的区别如下:常规索引全文索引使用create index或约束定义创建通过删除或执行drop index语句删除使用全文索引存储过程创建和删除当插入、修改或删除数据时,sql server能够自动更新常规索引内容只能通过任务调度或执行存储过程来填充全文索引每个表可以建立多个常规索引,索引不能分组每个表只能有一个全文索引,同一个数据库中的多个全文索引可以组织为一个全文目录常规索引存储在数据库文件中全文索引存储在文件系统中为了支持全文索引操作,sql server 7.0新增了一些新存储过程和transact-sql语句,使用这些存储过程创建全文索引的SQL SERVER数据库全文索引的示例,以test数据库为例。
首先,介绍利用系统存储过程创建全文索引的具体步骤:1) 启动数据库的全文处理功能(sp_fulltext_database)2) 建立全文目录(sp_fulltext_catalog)3) 在全文目录中注册需要全文索引的表(sp_fulltext_table)4) 指出表中需要全文索引的列名(sp_fulltext_column)5) 为表创建全文索引(sp_fulltext_table)6) 填充全文目录(sp_fulltext_catalog)---------********示例********-------------说明:下面所用到的test为数据库名,dbo.T_FX_DRM_20为test数据库中的一张表,FX_D20_ID是表dbo.T_FX_DRM_20中的一个列名以对test数据库的表dbo.T_FX_DRM_20的FX_D20_ID列建立全文索引,之后使用索引查询FX_D20_ID列中包含有"*****"字符串的数据:在这之前,需要安装Microsoft Search 服务,启动SQL server全文搜索服务。
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端的异步入库。