登陆注册
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>

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

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

同类推荐
  • 班级图书角系列:我的第一本国学经典

    班级图书角系列:我的第一本国学经典

    国学。又称“汉学”、“中国学”。是指以儒学为主体的中华传统文化与学术。以学科分,分为哲学、史学、宗教学、文学、礼俗学、考据学、伦理学、版本学等;以思想分,分为先秦诸子、儒道释三家等;以《四库全书》分,分为经、史、子、集四部;以国学大师章太炎《国学讲演录》为标准,分为小学、经学、史学、诸子和文学。学者认为。国学首先是自然国学(一阴一阳谓之道),其次是生命国学(路漫漫其修远兮,吾将上下而求索),再次是家庭国学(家和万事兴).最后是公益国学(周乎万物道济天下)。总之,国学乃是“为往圣继绝学”、“究天人之际”的学问。
  • 教育创新与应用型创新人才培养

    教育创新与应用型创新人才培养

    本书基于浙江万里学院应用型创新人才的探索与实践,从致力于教育创新到培育应用型创新人才,分为“教育创新篇”和“应用型创新人才培养篇”。“教育创新篇”,集成了浙江万里学院十年教育创新和教学改革之精华,是本书的核心和主体。“以能力为核心,创新高素质应用型人才培养模式”所提出的“面向社会,一核心、双符合、三体系、四途径”的高素质应用型人才培养模式,为应用型创新人才培养提供了思路,树立了范本。
  • 成功班主任案头必备-班主任新型工作方法精选

    成功班主任案头必备-班主任新型工作方法精选

    班主任理论是伴随着教育改革不断发展的。针对庞大的班主任队伍和他们极为重要的工作,班主任理论应该是争奇斗艳,应该有它的深度,应该成为推动班主任工作的有力武器。多年来教育改革取得了很大的进步,然而在艰难进行中,也时时有着迷惘、困惑和浮躁。班主任工作的改革虽有很大的成绩,但也常常是步伐不大、步履不整,呈走向不坚实的状态。新的教育理念还没有完全卸下班主任背负的“因袭”重担。这既要归因于理论的力度不强和影响不深,也要寻找其他原因。教育改革的关键是教师,从各方面提高教师的整体素质,才是教育改革的重中之重。班主任与学生成长的每一个方面、每一个环节、每一个步骤都息息相关。
  • 2009年中考满分作文

    2009年中考满分作文

    本书是品牌作文书“金笔尖作文工具书”最新品种。由具有丰富教学经验的名校名师搜罗2009年全国各地中考优秀作文,精选具有示范作用的满分作文100多篇加以编辑而成。全书体例精当,包括“中考回放”、“满分作文”、“点评”三部分;内容新鲜丰富,可以窥见最新中考作文命题趋势,可以借鉴各地优秀作文的写法;点评部分尤其精当,切中要点,不仅指出该篇作文的满分原因,且对可进一步提高之处给予了准确剖析。本书是一部实用性和针对性极强、可以作为全国各地初中师生备战中考作文的最佳参考辅导书。
  • 无声的课外老师:人生健康中遇到问题怎么办

    无声的课外老师:人生健康中遇到问题怎么办

    人生只有一次,健康不容忽视。我们愿尽最大的努力帮助学生们拥有健康,从而让学生们拥有一个美好的未来,让民族拥有一个辉煌的明天。
热门推荐
  • 无极之霸世龙枭

    无极之霸世龙枭

    亘古大战,天帝陨落,谁又知道这不是天帝自己的谋划呢?大道回归,规则现世,地球末世降临,人类何去何从?人类的穿越,是谁在操作?乱世之中,大道规则之下,跨越时空,所有历史上的人物同存一个时代,盛世?乱世?谁是幕后的黑手呢?北冥寒,一个地球人,在九洲界,如何在这个诸国并列,强国虎视的大陆上,掌握自己的生死,带领人族走上人族复兴之路。君不见,霸王项羽铁骑霸州称雄,虎视八洲。君不见,秦皇君临天下,指点江山,挥斥方遒,大秦虎卫横扫九洲。君不见,汉武雄才伟略,意图称霸九洲,大汉羽林卫天下雄踞九洲,无人敢当。君不见,唐宗宋祖虎踞中原,八方来袭,神策军出,天下大惊。君不见,元祖明宗,谈笑间樯橹灰飞烟灭,怯薛锦衣万军难挡。君不见,凰邪大军兵出潜龙,天下皆降????
  • 造圣者

    造圣者

    侯门庶子林棠,因修炼平平,而被家族轻视,连自己身边婢女亦卖于烟花之地!他立志要一雪陈耻,夺回尊严!林棠因意外而获得识别功法契合度的能力,从而修炼速度大增。横扫诸邪,惩恶扬善!木为舟之本,民为国之本,圣师为天下之本!
  • 开门

    开门

    娜彧,女作家,南京大学戏剧专业硕士研究生毕业,江苏省作协会员,江苏省70后签约作家,曾在《收获》《花城》《人民文学》《十月》等杂志发表中短篇小说若干,部分入年选。
  • 王仨儿

    王仨儿

    修仙十万年终要圆寂,一丝成仙契机让人疯狂,夺造化,揣人心,阴谋已经开始。
  • 吾炼星空

    吾炼星空

    天下动荡,乱世渐起。问苍茫茫大地何主沉浮!天命之陨被视为不详之人,自小便为家族所弃的他如何能在强者林立的大陆上脱颖而出?大世将危他又将何去何从?他姓南宫,单名一个陨字。
  • 瑾年亦久瞳色未褪

    瑾年亦久瞳色未褪

    第一次写文章总之不虐提建议加QQ2271519307
  • 离帝

    离帝

    王诩刚开始隐居鬼谷,庄子还是翩翩少年,孟子尚在各国找工作,商鞅的变法进行得如火如荼,孙膑、庞涓、慎到、申不害……诸子百家粉墨登场!在这个战争纷繁的世界,尔虞我诈充斥着天地之间。陆离从天而降,搅乱了这个乱世风云!列国之间的格局因为他发生改变,从亡国公子到一方霸主,秦楚燕齐纷纷拥他称帝!“七百年来为帝者,唯我陆离一人!”
  • 帝王之武修都市

    帝王之武修都市

    一个纵横商界的奇葩人物,意外邂逅一块奇异石头,从此攻城略地崔营拔寨,钱财滚滚美女缠身,成就都市逍遥帝王!
  • 微雨落心

    微雨落心

    你三千青丝化我两世情愁,千年轮回却不及你半步爱恨。。。若你还在,请记得我依然爱你。。。
  • 全才娱乐家

    全才娱乐家

    有了全民偶像系统,在这个陌生的世界我还怕谁?天王?影帝?文豪?富豪?那都不是事。从此,这个世界里,多了一个神级的娱乐人物。