登陆注册
19122000000017

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

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

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

同类推荐
  • 中小学生综合实践活动-日常行为的规范

    中小学生综合实践活动-日常行为的规范

    综合实践活动是现代教育中的个性内容、体验内容和反思内容,与传统教育片面追求教育个体的发展、共性和知识有所不同,综合实践活动提供了一个相对独立的学习生态化空间,学生是这个空间的主导者,学生具有整个活动绝对的支配权和主导权,能够以自我和团队为中心,推动活动的进行。在这个过程中,学生更谋求独立完成整个活动,而不是聆听教诲和听取指导。教师在综合实践活动这个生态化空间里,只是一个绝对的引导者、指导者和旁观者。
  • 北大人生规划

    北大人生规划

    本书从学习、为人处世、创新、创业、心理调理、出国留学、求职面试、管理、入世9个方面分别阐述北大人的人生规划。所有的内容都是北大的学子们亲手操笔,把他们的秘密归纳总结。可以这么说,本书是学生的稀世之宝,是交际学中的霸王花,是创新者必读之本,是创业者的指南针,是心理调整者的瑰宝,是考研出国者的铺路石,是求职者的最好老师,是管理者的灵魂。
  • 组织行为学教程

    组织行为学教程

    全书贯彻案例教学的思想,编入了许多国内外组织行为学的案例。教材结构完整,每章附有开篇案例、学习要求、思考题及,有助于读者理解课程知识和掌握课程的重点与难点。教材还附有一些研讨案例,便于组织案例讨论。本教材适合高等院校本科生、MBA类课程教学使用,也适合经济管理类专业教学及各类管理干部培训使用,还可供政府部门及企事业单位从事经济管理工作的相关人员参阅。
  • 经济法(第二版)

    经济法(第二版)

    合伙企业是指自然人、法人和其他组织依照本法在中国境内设立的普通合伙企业和有限合伙企业。《合伙企业法》于2006年修订,修订后的《合伙企业法》扩大了合伙人的范围,允许自然人、法人和其他组织设立合伙企业,并扩大了合伙企业的种类,分为普通合伙企业、特殊的普通合伙企业、有限合伙企业。
  • 引导青少年学习语文数学的故事

    引导青少年学习语文数学的故事

    本书系教学课外辅助读物,选取适合青少年阅读的,启迪青少年智慧,增长知识的感恩故事,补充学生课外知识。本册选取伟人名人学习过程中具有启发意义的故事作为主题。
热门推荐
  • 闪婚:墨砚之恋

    闪婚:墨砚之恋

    没有搞错吧,她又不是什么天仙,也不是什么富二代,更不是什么高端人才,她只是一个普通到大街上随手一抓一大把的平凡女人。而他却是帅到令女人疯狂、男人嫉妒的黄金单身汉。他居然要为了那一夜情负责,要娶她这个二十九岁了也一无所有的剩女。
  • 劫星苍天

    劫星苍天

    【Awaken文学社】,群号码:36458579身具三灾六难九劫的苍羽,轮回加身,修无上霸体,习杀生之术,毁灭之眼,一念生死。圣主笔,封尊封帝封大道。人皇印,帝御山河,万灵臣服,天命的归宿,是劫难的起始。生来天命,却是劫星之体,这无量量劫下,一切都将覆灭。天地不容,大道难存,既然如此,我便成天主道,让这天地大道唯我独尊。充满绝望的逆流之路,苍羽该如何寻找“真一”,超脱生死!
  • 逼婚36计:高冷老公太傲娇

    逼婚36计:高冷老公太傲娇

    她本应成为一个幸福的新娘,可是婚礼上却播放着未婚夫出轨的视频。她大受打击,不敢相信相恋五年的男友就这么轻易的背叛了她。恍惚中,却是未婚夫的小叔把她带离了现场。——某日霍先生向简小姐坦白婚礼上的事,对她抱怨道,“简小姐,你可知道为了追你我耗费了多少人力物力!”简汐气的不要不要的……可是为了她在床上的生命安全,她不得不装作严肃且认真的回答,“对不起霍先生,我知道您辛苦了。”霍先生点点头,对简小姐的回答相当满意,于是大发慈悲的对她说,“晚上奖赏你。”简汐:“......”她能否拒绝?!
  • 火影之木叶虫师

    火影之木叶虫师

    仓岚,有史以来最年轻的昆虫学博士,一次意外,被剧毒蜘蛛咬伤,意识穿越到了火影忍者的世界,成为了油女一族的成员,和纲手等人同一时期。利用自己的昆虫学知培养忍虫进行战斗,蝴蝶,毒蝎,甚至蚂蚁都是他的战斗伙伴,木叶虫师之名响彻忍界。仓岚:大蛇丸,虽然你叛逃了,但我仍然视你为知己,毕竟在这个世界里,唯一讲科学的人就只剩下你和我了。大蛇丸:……仓岚:昆虫是我们的好朋友,人类的生存生活都离不开昆虫的帮助,是人类可以利用的良好生物资源,所以我们应该善待昆虫。泷隐村:这就是你来抢七尾的理由?忍术?看是你结印,还是我的音速忍蜂更快。尾兽?食尾虫们的食物而已。体术?被我的咒术蜈蚣咬后,残疾人都能用八门遁甲。
  • 重生之逆天学霸

    重生之逆天学霸

    二十八岁的苏晴突然重回十二岁,看着周围一切熟悉的场景,苏晴发誓既然人生能够重来,那么这辈子,她一定要活出自己的精彩,那些欺负过她的人,她一定要让她们知道花儿为啥会那样红。昔日学渣变学霸,丑女居然也有女神的一刻,窝囊女苏晴慢慢蜕变着,惹来桃花不断,却被眼前这傲娇的白面小生一朵一朵的掐断,苏晴不可思议,话说这位傲娇男,咱还小,老师说不能早恋。秦正羽:苏晴,我愿陪你从校服到婚纱。
  • 快穿系统之男配深得我心

    快穿系统之男配深得我心

    母上大人由于嫁的个老公是话唠,便希望她生的女儿惜字如金,故赐名惜言。陌惜言人如其名一年半载没说几句话,被车撞时才说了句:“卧槽”然后翘了辫子。可是……她被一个名为零的系统所救,从此就踏上了去各个世界勾搭……啊呸,疼爱男配的不归路。什么?黑帮头头要和她谈恋爱?!抱歉!毛主席说过,不以结婚为目的的谈恋爱都是耍流氓!嘿!老婆我在这儿!喂,那边的智障你喊谁啊你?!
  • 宫心计②:中宫无后

    宫心计②:中宫无后

    他修葺太液宫恩宠于她,为她空置中宫,诏示天下:“朕之所爱,唯有珍妃。”三年之内,平五关、斩六将,她步步惊心,斗破宫墙,累下满身伤。只为他曾许诺,这一生,只做她的箫郎。三年之后,天下纷争,血染莲花。她为他倾覆了所有,包括爱情与亲情,却换得他亲手打落了她的骨血,置了他锦绣河山。
  • 谁人不识君:凰腾阁

    谁人不识君:凰腾阁

    誰,一生只为了守护二字,守护不变的情愫,守护苍白的誓言。誰,一世只为天下耗尽年华,却只得繁华一场,孤独终老。他无情地说着:“我是个没有感情的冷血之人,没必要浪费你的滥情。”她亦坚定的笑道:“我不在乎。”邶离与清何惜是沧海桑田,情深缘浅。情深是她,所以可以毫无怨言的伴他左右,甘愿等待,等到日出日落,等到卑微放弃。缘浅是他,所以才会孤傲转身离去,不留一丝情意,到最后却撕心裂肺的与天争夺奄奄一息的她。所以,缘浅不怪他,情深不怨她,怪只怪生不逢时,怨只怨爱恨纠葛。她安静的躺在他的怀中,问道:“我,是不是你心尖上的人?”他紧紧将她圈在怀里,落下了一滴泪。“是,一直都是。以前是,现在是,将来,也是。”
  • 自从有了你

    自从有了你

    本书分为“枝叶之间”、“亲情再现”、“心灵赞助”、“不见霓虹的探寻”四辑,收入散文67篇,包括“疼痛的河滩”、“犹豫的一刀”、“胡杨的黄与怪”、“大漠戈壁的隐士”等。
  • 武禁烽烟

    武禁烽烟

    太平教,以民义为先,却为正道所不容。菩萨低眉,所以慈悲六道。金刚怒目,所以降伏诸魔。