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

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

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

同类推荐
  • 课本上读不到的生物故事

    课本上读不到的生物故事

    李琳编著的《课本上读不到的生物故事(适读于 10-15岁)》编著的植物、动物、人、微生物……这些 生物奇迹般地生长着、繁育着、构成了世界上如此生 机勃勃的自然景象,他们既是我们的亲密伙伴,又是 我们的良师益友。《课本上读不到的生物故事(适读于10-15岁)》 将把你带进神奇的生物世界,让你知道世界上**粒 种子是怎样来的,谁是**只飞上天空的鸟,黄鳝为 什么先当妈妈后当爸爸,我们的身体是怎样工作的, 小小微生物的妙用……这些妙趣横生的生物故事一定 让你大开眼界、叹为观止,让你轻轻松松爱上生物、 学会生物。
  • 学生主题阅读空间(自然人文卷)小博士讲海港

    学生主题阅读空间(自然人文卷)小博士讲海港

    “学生主题阅读空间(自然人文卷)”系列丛书,是一套介绍全世界自然人文地理的丛书。内容包括世界遗产、公园、城堡、瀑布、广场、剧院等。该丛书图文并茂,分类详细,更加方便学生的阅读,是一套很有实用价值的阅读读物。
  • 世界宫廷史速读

    世界宫廷史速读

    本书将世界古代宫廷中发生的对历史进程有较大影响的事件加以收集整理,做成一专题史。详细地阐述事件的过程和对历史产生的影响。
  • 语文新课标课外必读第一辑——雷锋的故事
  • 小学数学课题研究与论文写作

    小学数学课题研究与论文写作

    本书从小学数学教师应开展怎样的研究,如何开展研究,研究成果的形成等方面,给小学数学教师开展研究提供参考和借鉴。根据小学数学教师开展研究的需要,结合我们开展课题研究和论文写作的体会,选择小学数学教育中具有代表性的素材,采撷不同层次水平的研究案例,并注重典型案例的分析。启示一线教师研究要从自己身边的事做起,从解决教学实践中的问题入手,研究数学教学中的现象与规律。本书各章节重点阐述“如何开展研究”,“如何形成研究成果”,在保证研究结果的科学性的前提下,侧重于研究方法的可行性,研究过程的规范性。
热门推荐
  • 无异遵

    无异遵

    少年白尘在残忍的都外生存。意外获得一个通玉系统,从都外脱颖而出。双王试炼只是开始,亡灵屠城只是小事。狠辣卑鄙,只是为了大一统。自有随性,方才是我的王道!看白尘一统异都,创造无异遵的神话!交流群:467567928
  • 权倾天下

    权倾天下

    后主刘禅被迫迁到魏都洛阳,一日权臣司马昭请他赴宴,极尽戏耍,由此引出“乐不思蜀”典故。回到后宫之后,因伤心哭倒于地,头痛欲裂,精神恍惚,差点被人夺舍。后经努力,基本守住一丝清明,与对方,来自现代的府兵,被枪决的吴仁义(无仁义)展开殊死搏斗。数载之后,两个魂魄既斗争又联合,各取所长,终于搞出了一些奇异光怪,歪打正着之下,收拾了权臣司马氏,恢复了大汉王朝的辉煌。
  • 天巡

    天巡

    一位小镇子里出生的普通青年,意外被发现是大陆上罕见的灵修者。强大的魔兽,高深的法决,成仙的渴望,宿命的对决,当然,怎么能少得了红粉佳人,情浓意切。这是一片光怪陆离的大陆,且看杜殇如何代天巡狩,步入巅峰。
  • 穷小子的妖孽发迹史

    穷小子的妖孽发迹史

    出生小渔村的何木大学毕业就迎来了失业,穷得蛋疼的他不得不窝到海滩救生队等机会。风水轮流转,在一次例行救生任务中,何木意外的发现了一艘明代沉船。于是,阳光、海岸、沙滩,美女如云、美腿成林、有容奶大……所有的这些就跟何木扯上了关系,穷小子终于走上了发迹之路。网罗香车美女、玩转黑白两道?发迹之路当然不会如此简单,前有千难万险,穷小子自有妖孽手段——谁想让老子回到从前,老子就让谁没有未来!反正都是烂命一条,小人物怕个鸟!新开本书读者群——《穷开心》都市群,群号373509,欢迎各路朋友进群畅谈~~
  • 方世玉任侠传

    方世玉任侠传

    所谓任侠,是道之所在,虽千万人吾往矣,是义之所当,千金散尽不后悔,是情之所钟,世俗礼法如粪土,是兴之所至,与君痛饮三百杯。是十步杀一人,千里不留行,事了拂衣去,深藏功与名,是三杯吐然诺,五岳倒为清,纵死侠骨香,不惭世上英。是荆轲,是聂政,是专诸,是李白,是我方世玉!PS:美女和恶霸快闪啊,方世玉来了!
  • 明媚不悲伤

    明媚不悲伤

    那时的林辞以为这就是结局。苏明媚明媚了他的生活,然后走的决绝。却又以学校请来的访学团负责人的身份再次出现。“苏明媚,你先说了分开,你不是说你不爱我了,那你现在是在做什么呢?”“明媚,我太了解你,你骗不了我”“明媚,回来吧”
  • 末世重生之召唤师

    末世重生之召唤师

    末世生活了十年的觉醒者罗天重生能否降临巅峰
  • 特工狂妃:绝代女将军

    特工狂妃:绝代女将军

    她是将门孤女,孤高清绝,他是战神王爷,铁血冷酷,当她与他雪原相遇,谁入了谁的眼,谁又入了谁的心?当她被异世灵魂取代,当她风华绽放,当她素手揽风云,当她袖手转乾坤,当她浴血成凰,谁又敢说女儿不如男?当他们强强携手,忘川大陆,谁与争锋?
  • 盛世佳颜,卿本红妆

    盛世佳颜,卿本红妆

    重活一世,董宁誓要前世辱她负她之人血债血偿!(简介废啊大家还是看正文吧)
  • 恋凯

    恋凯

    他总是那么遥不可及,她很普通。但她开朗,可爱,乐观