登陆注册
7538600000017

第17章 SQL Server的全文搜索(4)

3.查看获取注册全文索引的列

获取注册全文索引的列的SQL语句如下:

use North Wind

exec sp help fulltext columns"products"

4.通用方法

使用下面的SQL语句可以返回全文目录的名称和整数标识符,全文目录根目录,全文目录的填充状态,链接到此全文目录的表的数目。

use North Wind

exec sp help fulltext catalogs

在企业管理器中,右键单击“Products”表,在弹出的快捷菜单中依次选择“全文索引表”和“编辑全文检索”,将运行全文索引向导,可以查看于全文目录有关的一切信息。

4.5.5删除和重建全文索引

1.删除全文索引的元数据

删除全文索引的元数据有两种方法:

(1)使用SQL语句

执行下面的SQL语句,取消将products表注册为用于全文处理。这将除去该表有关全文索引的元数据。直到下一次完全填充或除去全文目录之前,现有的全文索引保持原样,但处于不使用状态。

use North Wind

exec sp fulltext table"products","drop"

(2)使用企业管理器

在企业管理器中,右键单击“Products”表,在弹出的快捷菜单中依次选择“全文索引表”和“从表中删除全文索引”。

2.删除全文目录

删除全文目录的方法有两种。

(1)使用SQL语句

执行下面的SQL语句,从文件系统中删除全文目录,并从系统表中移除元数据。注意:要删除全文目录,必须首先删除它里面的索引。

use North Wind

exec sp fulltext catalog"pro Catalog","drop"

(2)使用企业管理器

在企业管理器中,右键单击全文目录“pro Catalog”,在弹出的快捷菜单中选择“删除”。

如果要删除系统中所有在SQL Server里不含元数据的全文目录,要执行下面语句:

use North Wind

exec sp fulltext service"Clean Up"

(3)重建全文目录

执行下面的SQL语句,从文件系统中重建全文目录。

use North Wind

exec sp fulltext catalog"pro Catalog","Rebuild"

4.6利用SQL Server全文搜索实现搜索引擎

有了前面学习的知识,下面就可以利用SQL Server全文检索来开发一个全文搜索引擎。

这个程序是非常好写的,也是非常简单的,因为它只是起到了传递SQL语句和显示搜索结果的作用。使用的技术是ASP.NET1.1(基于VB.NET)+SQL Server2000。

4.6.1数据库准备

这个全文搜索引擎基于SQL Server内置的全文搜索功能,应用程序上只需要做一个检索界面即可。

这里使用前面建立的tianen数据库作为检索数据库,检索的表格是test。采用CONTAINS谓词进行检索。

4.6.2桌面应用实现的全文搜索

建立一个WinForm工程,只含有一个窗体Form1.vb。关键代码如以下案例所示。

案例名称:桌面应用实现的全文搜索

程序名称:Form1.vb

Imports System.Data

Imports System.Data.SqlClient

PublicClass Form1

Inherits System.Windows.Forms.Form

"注:此处略去Windows窗体设计器生成的代码,程序的核心代码在单击按钮的事件中

Private SubButton1Click(ByVal senderAs System.Object,ByVal eAs System.EventArgs)

HandlesButton1.Click

Dim soAs String=input.Text.Trim

Dim connAs New

SqlConnection("server=localhost;database=tianen;uid=sa;pwd=;")

Dim sqlAs String=

"select*from test whereCONTAINS(content,′"""&; so &;"""")"

Dim dsAs NewDataSet

Dim adpAs New SqlDataAdapter(sql,conn)

adp.Fill(ds,"good")

DG.DataSource=ds.Tables("good").DefaultView

End Sub

EndClass

4.6.3Web应用实现的全文搜索

与桌面应用同理,这里只包含一个文件search.aspx,下面是它的后置代码文件片断。

案例名称:Web应用实现的全文搜索

程序名称:search.aspx.vb

Imports System.Data

Imports System.Data.SqlClient

PublicClass search

Inherits System.Web.UI.Page

"注:此处略去Web窗体设计器生成的代码,程序的核心代码在单击按钮的事件中

Private Sub Page Load(ByVal senderAs System.Object,ByVal eAs System.EventArgs)HandlesMyBase.Load

′在此处放置初始化页的用户代码

End Sub

Private SubButton1Click(ByVal senderAs System.Object,ByVal eAs System.EventArgs)HandlesButton1.Click

Dim soAs String=input.Text.Trim

Dim connAs New

SqlConnection("server=localhost;database=tianen;uid=sa;pwd=;")

Dim sqlAs String=

"select*from test whereCONTAINS(content,′"""&; so &;"""")"

Dim dsAs NewDataSet

Dim adpAs New SqlDataAdapter(sql,conn)

adp.Fill(ds,"good")

DG.DataSource=ds.Tables("good").DefaultView

DG.DataBind()

End Sub

EndClass

提示:

如果要实现这样的功能,在搜索框中输入“大禹、涂山氏”,表示搜索同时含有“大禹”和“涂山氏”这两个词的记录,该如何实现呢?

根据CONTAINS的语法,要构造出CONTAINS(content,′"大禹"AND"涂山氏""),这就涉及对输入的词语进行切分了。笔者建议的一个方法是:先对输入的搜索词汇进行验证,避免对数据库不利的字符混入,然后将输入的词汇除去两边的空格,然后剩下的内容按照中间的空格切分,使其分成多个词语,然后构造成“AND”连接的字符串传递给程序,由CONTAINS实现。

或者,直接采用FREETEXT搜索,这个更加简易一些,只是人工控制性差些。

4.7文件数据的搜索

4.7.1文件数据搜索的概述

前面曾经提到过,使用SQL Server的全文检索组件可以对一些文件实现检索,这项功能是非常重要的。因为有大量数字化信息并不以结构化的形式存储在数据库中,大量的数据依然处于非结构化状态,以文档形式存储在文件系统中。对它们实现检索是非常重要的。SQLServer全文检索支持的文件包括Office系列的Word文档,Powerpoint文档和HTML文档等。

本节介绍如何去执行对文件建立索引和执行检索。

对文件执行的检索包括以下两种。

①属性检索:对文档应用筛选来提取属性,如作者、主体、字数等,然后对这些属性进行检索。

②全文检索:从文档中提取出全部文本信息,然后过滤掉干扰词,建立全文索引。

第一种检索比较简单,应用也少,遍历文件读取属性即可,方法俯拾即是。第二种检索在SQL2000中有完善的解决方案,只需把文件存储到image类型的列中,然后对这一列启用全文检索。

4.7.2文件数据搜索的实现

下面实现一个程序,把文件存入数据库的image类型字段中,然后对数据库启用全文检索,执行搜索。

使用的技术是ASP.NET1.1(基于VB.NET)+SQL Server2000。

1.建立数据库

在SQL Server中建立数据库,名为“tianen Image”,内含一个表格,名为“test”。这个表格用来存储二进制文件。此表格包含4列:id,int类型,为主键,自动增长,记录文件序号;fname,varchar(20)类型,存储文件名称;fext,varchar(20)类型,存储文件扩展名;fcontent,image类型,存储二进制文件的内容。

2.编写文件上传器

下面实现一个程序,用来将文件上传到数据库中,将文件名写入fname字段,扩展名写入fext字段,文件的二进制内容写入fcontent字段。

程序只包含一个文件,tianenImage.aspx。

案例名称:二进制文件的全文搜索

程序名称:tianenImage.aspx

<%@ page language="vb"%>

<%@ Import Namespace="System.Data"%>

<%@ Import Namespace="System.Data.SqlClient"%>

<%@ Import Namespace="System.IO"%>

< runat="server">

SubButton1Click(ByVal senderAs System.Object,ByVal eAs System.EventArgs)

"数据库连接串

dimConnStr as String=

"server=localhost;uid=sa;pwd=;database=tianenImage;"

′文件名

Dim fnameAs String=Path.GetFileName(up.PostedFile.FileName)

"扩展名

Dim fextAs String=Path.GetExtension(up.PostedFile.FileName)

"二进制文件内容

Dim fcontent(up.PostedFile.ContentLength)AsByte

"将二进制文件内容读入fcontent

up.PostedFile.InputStream.Read(fcontent,0,up.PostedFile.ContentLength)

"将数据插入数据库

Dim connAs New SqlConnection(ConnStr)

Dim commAs New SqlCommand("insert into test(fname,fext,fcontent)values(@ fname,@ fext,@ fcontent)",conn)

comm.Parameters.Add("@ fname",fname)

comm.Parameters.Add("@ fext",fext)

comm.Parameters.Add("@ fcontent",fcontent)

Try

conn.Open()

comm.ExecuteNonQuery()

Dim tempAs String

temp="file name:"&; fname

temp &;="<br>file extension:"&; fext

l.Text=temp

Catch exAs Exception

l.Text=ex.Message

Finally

If Not conn Is Nothing Then

conn.Close()

End If

End Try

End Sub</>

<!——上传文件界面——>

<FORM id="Form1"method="post"runat="server">

上传文件到数据库中:<INPUT id="up"type="file"name="File1"runat="server"> ;

<asp:button id="Button1"runat="server"Text="上传"

OnClick="Button1Click"></asp:button><BR>

<asp:label id="l"runat="server"Height="14px"Width="432px"></asp:label>

</FORM>

单击“浏览”按钮,然后从打开的“选择文件”对话框中选择文件。选择后单击“上传”按钮,即可将文件上传到数据库中。

查看数据库,文件果然上传成功了。

同类推荐
  • 飞鸟集·新月集(新课标同步课外阅读)

    飞鸟集·新月集(新课标同步课外阅读)

    《飞鸟集》与《新月集》是文学巨匠泰戈尔最具美感和欣赏性的代表作,也是世界上最杰出的诗集和散文集之一。白太和黑夜、海洋和河流、自由和背叛、哲学和宗教,都在泰戈尔的笔下合二为一。短小的语句阐述了深刻的人生哲理,引领读者在读完后探寻真理和智慧,是他诸多文集中最适合青少年阅读的作品,对陶冶他们的情操和激发他们对文学的热爱有着不可估量的作用。本书为《飞鸟集》与《新月集》的合订本,由我国著名的翻译家郑振铎翻译,附录中收录了泰戈尔生平、泰戈尔访华记及1913年诺贝尔文学奖获奖致辞,具有很高的文学价值和收藏价值。
  • 学校防火安全与教育活动

    学校防火安全与教育活动

    校园安全与每个师生、家长和社会有着切身的关系。从广义上讲,校园安全事故是指学生在校期间,由于某些偶然突发因素而导致的人为伤害事件。就其特点而言,责任人一般是因为疏忽大意或过失失职造成的,而不是因为故意而导致事故发生的。
  • 建筑设备作业集

    建筑设备作业集

    《中国建筑教育》2010是全国高等学校建筑学专业指导委员会主办的2010年全国大学生建筑设计作业观摩和评选活动的优秀作品集,该活动是以促进全国各建筑院系间的建筑设计教学交流、提高各校的本科教育水平和教学质量、激发建筑学专业学生学习热情和竞争意识为目标。一年一度的全国性的作业观摩和评选活动作为建筑设计教与学的一个重要交流平台,亦不断完善与成熟。这本作品集是全国建筑学专业师生的一份共同财富,可以籍此了解全国建筑设计教学的现状,而对莘莘学子来说,学习上亦是一个赶超的目标。
  • 中国电影百年(1977-2005)

    中国电影百年(1977-2005)

    中国电影诞生已经整整一百个年头了。一百年前,中国人靠自己的聪明才智拍成了第一部中国电影《定军山》。从那时到现在,中国已经拍摄了近7000部电影。当我们仔细回望中国电影百年历程中每一季搏动的时候,我们都能真切地感受到代代相传的中国电影人的热血和信念。正是他们的赤诚、智慧和创造,才使中国电影毫无愧色地融进了中华民族不屈不饶、顽强奋进的奔涌之河,绘就了波澜壮阔、憾人心弦的史诗,令我们每一个中国人都有充分的理由为之自豪,为之骄傲!
  • 孤独的小螃蟹

    孤独的小螃蟹

    《孤独的小螃蟹》是教育部统编《语文》教材二年级上的推荐书目,本书中收录了当代儿童文学名家冰波先生的多篇广为人知的童话作品:《孤独的小螃蟹》《蛤蟆的明信片》《桃树下的小白兔》《秋千,秋千》等。冰波的童话故事,有时会带上丝丝的伤感,但在结尾却都有着一个温情暖心的底,对于二年级的学生而言,在实现良好的性格养成方面会有很好的效果。
热门推荐
  • 你是我专属限定的糖

    你是我专属限定的糖

    ——始于初见,止于终老。——你还是你,让我一见倾心的你。
  • 未忘星辰

    未忘星辰

    天才林珞岚一步小心把自己炸死了,她悲摧的穿梭时光,去未来找穿梭机。一路上遇到了很多人:好友唐晓晓,萧燕绥,还救了未来,救着救着就不想回去了,因为她遇到了喜欢的人:翰杭,还有一个疼自己的哥哥(认的):易瑾漾……
  • 我是大药神

    我是大药神

    少年得到药神传承,自此开始修行之路。世间草木,没有一株是废材,皆可为我所用!药石无医,我可医。看少年药神,行医天下。……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 才懂得自己

    才懂得自己

    十几岁的年龄,遇见不同的人,有了不同的自己。
  • 甜治愈快穿:拯救怪物男神

    甜治愈快穿:拯救怪物男神

    仅剩一天寿命,千曦绑定了一个治愈系快穿系统。任务是治愈各个世界里身体产生异变属性的怪物男神。【元气少女VS怪物男神】被囚禁在地下室的不死少年/携带病毒的哥哥/会变成猫的金主大人/半人半兽的钢琴家/只能吸食最爱之人鲜血的吸血鬼伯爵千曦:说好的我治愈,为什么他们自己痊愈了。男人唇角带笑,分裂成四个人:因为,我爱你啊。千曦:系统,救...救我。
  • 嗣奕日记

    嗣奕日记

    日常生活,校园之内,一切皆有可能。真正的好友,能有几何?羞涩的感情该如何说起?孤独的人生,你我来和!
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 重生之末世之主

    重生之末世之主

    一个前文明高级工程师重生在末世,变成了一个孤儿,这是一个混乱、愚昧、落后,但又在开始觉醒的世界……
  • 宇宙科技生物系统

    宇宙科技生物系统

    宇宙万物,生于一点,科技之树,生物之花,超级进化,神之幻脑。打造极限生命,探索无穷奥秘。看得到系统的方宇如何进化,开启全新世界!