登陆注册
19122000000018

第18章 SQL Server的全文搜索(5)

重复刚才的上传文件的过程,上传多个文件。

3.建立全文索引

下面对tianenImage的test表的fcontent列进行全文索引。由于它的类型是image,所以建立全文索引的方式与普通的字符串类型不同。

使用SQL语句来实现建立索引的方法如下所示:

——启用全文支持

use tianenImage

Exec sp fulltext database"enable"

——创建全文目录

Exec sp fulltext catalog"imageCatalog","create"

——注册用于全文检索的表

Exec sp fulltext table"test","create","imageCatalog","PK test"

——指定fcontent列为全文索引列fext是类型列

Exec sp fulltext column"test","fcontent","add",0x0804,"fext"

——激活全文索引

Exec sp fulltext table"test","activate"

——执行全文目录的填充

Exec sp fulltext catalog"imageCatalog","start full"

这里要注意黑体标注的语句。在SQL Server中,要对image类型列进行全文索引,就需要给它绑定一个列来标识类型。微软让我们采用扩展名的方式,其实不是很科学。想要标识一个文件的类型应使用MIME类型或者CLSID才可以。扩展名是很不准确的。

在查询分析器中执行了上面的SQL语句之后,就可以对fcontent列执行全文搜索了。运行以下语句:

use tianenImage

select*from test where contains(fcontent,′"大禹"")

那么,刚才的过程,如果使用企业管理器可视化操作,应该如何去做呢?

在企业管理器中,右键单击test表,从弹出的快捷菜单中依次选择“全文索引表”和“在表上定义全文索引”,打开“全文索引引导向”。

单击“下一步”,在“选择索引”对话框中选择唯一索引“PK test”,单击“下一步”。

在弹出的“选择表中的列”对话框中选择“fcontent”列用于全文检索,在“单词断字符的语言”列中选择“中文(中国)”,在“文档类型”列选择“fext”,这样就把两个列绑定到一起了。

单击“下一步”,在弹出的“选择目录”对话框中设置新建目录,名称为“imageCatalog”。

单击“下一步”,略过“调度”的设置,单击“完成”按钮完成全文索引的建立。

系统弹出成功建立全文索引的提示信息,单击“确定”。

在企业管理器中,右键单击tianen Image数据库的test表,从弹出的快捷菜单中依次选择“全文索引表”和“启动完全填充”即可实现完全填充。

4.8综合案例

4.8.1概要说明

本章的最后一个案例,将综合使用本章所学知识,开发一个在线文件管理系统。系统具有这样的功能:

上传文件到数据库中;

对二进制文件进行全文搜索;

可以将文件显示和下载;

可以查看系统中已经上传的文件。

在这个案例中,我们建立一个工程项目。使用的技术是ASP.NET1.1(基于VB.NET)+SQL Server2000。

工程包含三个文件,web.config用于存储数据库连接串;save.aspx是系统主界面,也用来上传文件;show.aspx用来提取数据库中的二进制数据并显示出文件。

4.8.2数据库结构

系统的数据库名为“love”,在这个数据库中建立一个表格,名为“yuanyuan”,其中含有五个字段。

id为int类型,自动增长,是表格的主键,主键约束名为loveyuanyuan。

fname为varchar(20)类型,是上传文件的名称。

ftype为varchar(20)类型,是上传文件的MIME类型。

fext为varchar(20)类型,是上传文件的扩展名。

021做自己的搜索引擎——搜索引擎精解案例教程fcontent为image类型,存储上传的文件。

通过在查询分析器中运行下面的SQL语句可以建立完成数据库。

create database love

use love

create table yuanyuan

id int identity(1,1)not null,

fname varchar(20)not null,——file name

ftype varchar(20)not null,——file MIME type

fext varchar(20)not null,——file extension

fcontent image not null,——file stored here

constraint loveyuanyuan primary key(id)

4.8.3程序和代码

web.config的代码如下:

<?xml version="1.0"encoding="gb2312"?>

<configuration>

<appSettings>

<add key="dsn"value="server=localhost;uid=sa;pwd=;database=love;"/>

</appSettings>

<system.web>

<trace enabled="false"/>

<compilation defaultLanguage="vb"debug="false"/>

<customErrors mode="RemoteOnly"/>

<authentication mode="Windows"/>

<authorization>

<allow users="*"/><!——允许所有用户——>

</authorization>

<identity impersonate="true"/>

<sessionState timeout="60"mode="InProc"cookieless="false"/>

<globalization requestEncoding="gb2312"responseEncoding="gb2312"/>

</system.web>

<startup>

<requiredRuntime version="v1.1.4322"/>

<supportedRuntime version="v1.1.4322"/>

</startup>

</configuration>

save.aspx的代码如下:

Imports System.Data

Imports System.Data.SqlClient

Imports System.IO

PublicClass save

Inherits System.Web.UI.Page

# Region"Web窗体设计器生成的代码"

"该调用是Web窗体设计器所必需的

<System.Diagnostics.DebuggerStepThrough()>Private Sub InitializeComponent()

End Sub

Protected WithEventsDGAs System.Web.UI.WebControls.DataGrid

Protected WithEvents Form1As System.Web.UI.HtmlControls.HtmlForm

Protected WithEventsButton1As System.Web.UI.WebControls.Button

Protected WithEvents upAs System.Web.UI.HtmlControls.HtmlInputFile

Protected WithEvents lAs System.Web.UI.WebControls.Label

Protected WithEventsButton2As System.Web.UI.WebControls.Button

Protected WithEvents inputAs System.Web.UI.WebControls.TextBox

"注意:以下占位符声明是Web窗体设计器所必需的

"不要删除或移动它

Private designerPlaceholderDeclarationAs System.Object

Private Sub Page Init(ByVal senderAs System.Object,ByVal eAs System.EventArgs)Handles

MyBase.Init

′CODEGEN:此方法调用是Web窗体设计器所必需的

"不要使用代码编辑器修改它

InitializeComponent()

End Sub

# End Region

PrivateConnStr=System.Configuration.ConfigurationSettings.AppSettings("dsn")

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

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

BindGrid()

End Sub

SubBindGrid()

Dim connAs New SqlConnection(ConnStr)

Dim commAs New SqlCommand("select*from yuanyuan",conn)

Dim drAs SqlDataReader

Try

conn.Open()

dr=comm.ExecuteReader

DG.DataSource=dr

DG.DataBind()

Catch exAs Exception

If Not dr Is Nothing Then

dr.Close()

End If

If Not conn Is Nothing Then

conn.Close()

End If

End Try

End Sub

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

HandlesButton1.Click

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

Dim ftypeAs String=up.PostedFile.ContentType

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

Dim fcontent(up.PostedFile.ContentLength)AsByte

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

Dim connAs New SqlConnection(ConnStr)

Dim commAs New SqlCommand("insert into yuanyuan(fname,ftype,fext,fcontent)values

(@ fname,@ ftype,@ fext,@ fcontent)",conn)

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

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

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 type:"& ftype

l.Text=temp

BindGrid()

Catch exAs Exception

l.Text=ex.Message

Finally

If Not conn Is Nothing Then

conn.Close()

End If

End Try

End Sub

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

HandlesButton2.Click

Dim soAs String=input.Text.Trim

Dim sqlAs String="select* from yuanyuan whereCONTAINS(fcontent,′"""& so &"""")"

同类推荐
  • 大学修养观

    大学修养观

    当代大学职能在不断扩展,大学不但是知识传承的圣地,还是民主自由的殿堂;不但是科学研究机构,还是服务社会场所;不但是社会发展的工具,还是社会发展的目的地。大学乃大师之学,大学乃人才之学。大学教师既是经师,更为人师;大学学生既要学养丰厚,更要品行高尚。大学要履行社会职能,实现自身价值;教师要忠诚教业,具备良好的职业素质;学生要成为合格的社会主义建设者和接班人,都应该不断加强修养。涵养大学文化,健全大学人格,要熔炼大学精神。
  • 成语接龙

    成语接龙

    本书精选了近五百个人们常用、常见的成语,并且以接龙的方式进行串联,在成语接龙之后配用精炼的文字、精准的诠释、精彩的论点,之后再对重点成语进行详细论述,配备历史典故等。
  • 学生完善人格教育与班级主题活动

    学生完善人格教育与班级主题活动

    为了指导班主任搞好班级文化建设,我们在有关部门的指导下编辑了这套“班主任班级文化建设与主题活动指南丛书”图书10册。本套书除了论述班级文化建设的各种方法外,还提供了可供参照的各类班级主题活动的案例,具有很强的系统性、实用性、实践性和指导性,非常适合各级学校的班主任老师及学校辅导员阅读,也是各级图书馆陈列和收藏的最佳版本。
  • 语文新课标课外必读第十辑——呼啸山庄

    语文新课标课外必读第十辑——呼啸山庄

    国家教育部颁布了最新《语文课程标准》,统称新课标,对中、小学语文教学指定了阅读书目,对阅读的数量、内容、质量以及速度都提出了明确的要求,这对于提高学生的阅读能力,培养语文素养,陶冶情操,促进学生终身学习和终身可持续发展,对于提高广大人民的文学素养具有极大的意义。
  • 青少年提高逻辑思维能力训练集——数学思维法训练

    青少年提高逻辑思维能力训练集——数学思维法训练

    当今时代是一个知识爆炸的时代,也是一个头脑竞争的时代;在竞争日益激烈的环境下,一个人想要很好地生存,不仅需要付出勤奋,而且还必须具有智慧。随着人才竞争的日趋激烈和高智能化,越来越多的人认识到只拥有知识是远远不够的。因为知识本身并不能告诉我们如何去运用知识,如何去解决问题,如何去创新,而这一切都要靠人的智慧,也就是大脑思维来解决。认真观察周围的人我们也会发现,那些在社会上有所成就的人无不是具有卓越思维能力的人。
热门推荐
  • 物流美女

    物流美女

    一个最普通的大学毕业生,安静的生活被父亲的去世突然打破,转行做自己最擅长的汽车司机,于是,废材悄悄上演逆袭金钱地位美女……打造出蓝领司机的物流帝国神话
  • 我的心好冷

    我的心好冷

    这是一部青春题材的小说。女主人公夏沫是一个豆蔻芳华的少女,小说描写了夏沫在亲情、友情和朦胧的暗恋之间徘徊的故事。小说旨在为这个年龄段的女孩子提供青春生活指南,具有积极的现实意义。
  • 六界冥神

    六界冥神

    神魔大战,六界动荡生灵哀怨,天降神婴一人之力,平息万劫经万载,祸重生诞方云,得神剑奉天命,救苍生持剑柄,闯魔宅斩恶灵,灭妖魔纵天下悟道,修仙,成神,得涅槃…他是魔是神??隐藏在深处的记忆,是否能够将他吞噬?而一直神龙见首不见尾的黑袍人,他究竟是谁?他的用意到底为何???让我们一起期待!!
  • 论企业创新

    论企业创新

    创新是人类的本能,创新无所不在。人类社会进步与发展的历史,是一部持续动态创新发展的历史。人类社会从必然王国到自由王国,必须不断有所发现、有所发明、有所创造、有所前进。创新是一个民族进步的灵魂,是国家兴旺发达的不竭动力。中华民族是勤劳智慧的民族,也是富于创新的民族。在经济全球化、科技日新月异的新世纪,我们更要十分重视创新。要树立全民族的创新意识,建立国家创新体系,增强企业的创新能力。我们力求以新的视野,理性思考企业创新;立足新的发展,指导企业创新。从理念、知识、机制、产品组织、文化等方面研究企业创新问题。
  • 夜冷夕未暖

    夜冷夕未暖

    幼时的初遇,彼此的笑留在了对方的内心深处,N年后的雨中他们再次邂逅,她对上了他深蓝色的眼眸......“黄昏盛开,翌朝凋谢,悄然含英,阒然零落。”"永远的爱;易碎易逝的美好;暮光中永不散去的容颜;生命中永不丢失的温暖。"这美好的誓言,会打破“夕颜花”薄命的凄美传说吗?
  • 六道之麒麟墓

    六道之麒麟墓

    这些狼群蹲在树下一夜都没离开,我的姥爷在树上呆了一宿,到了半夜的时候看到半山腰上有一块绿光,看了一宿不知道是什么东西,到了快天亮的时候,由绿色的光变成了红的光,又慢慢变成蓝色,接下来就消失不见了。
  • 恶魔BOSS的纯情小恋人

    恶魔BOSS的纯情小恋人

    初见时她说:“你是我见过的人中长得最好看的,我准许你做我的王子。”一次离别,一场动乱,改变了所有人的命运。当命运的齿轮再次将她转到他的面前,他紧紧捏住她的下巴说:“说你喜欢我。”她怒吼:“神经病!”他慢悠悠的笑道:“你说错了。是精神病,这两者间有着本质上的不同。”
  • 笙艾随笔

    笙艾随笔

    以个人生活经历和感悟,写的随笔散文、书影评论等
  • 请许我尘埃落定

    请许我尘埃落定

    张爱玲《小团圆》的愿望,我们《尘埃落定》的期许——期待有人,能许我们一室温暖的幸福……张爱玲曾说,孤单不是与生俱来的,而是由你爱上另一个人开始的。
  • 穿越盗墓笔记之冥羽

    穿越盗墓笔记之冥羽

    关于《盗墓笔记》同人《穿越盗墓笔记同人小说》月夜蔷薇所写的同人作为基础而写成的《穿越盗墓笔记之冥羽》。世界臣服于他,与他交流。他第一次倒斗,没想到还会有第二次,第三次......