登陆注册
7538600000018

第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 &"""")"

同类推荐
  • 历史的天空

    历史的天空

    蓝桥埠镇被日军占领,战火中逃出四个年轻人:梁大牙和朱一刀欲投奔国民党,却误入八路军阵营;陈墨涵和韩秋云想寻找八路军,却被国民党强征入伍。命运的阴差阳错,使他们开始跌宕起伏的人生:梁大牙因敢打硬拼屡立战功,却也因不拘小节的草莽英雄性格,屡犯纪律;陈墨涵被分在非蒋介石嫡系部队的79军,目睹国难当头军队却派系林立,互相倾扎和迫害,于慷慨悲壮中成为79军继任者,最终率部起义……
  • 语文新课标课外必读第一辑——呐喊
  • 智能建筑环境设备自动化

    智能建筑环境设备自动化

    全书以建筑设备自动化系统(BAS)对建筑设备的监控原理和初步设计为中心内容,共分为6章,内容包括:智能建筑和建筑设备自动化系统概述、建筑设备及其自动化技术所需的基础知识、暖通空调系统及其监控、给排水系统及其设备自动化、其他建筑设备的自动化、建筑设备自动化的系统集成等内容。
  • 中学英语同步阅读精编(高一上)

    中学英语同步阅读精编(高一上)

    本书以教材的编写体系为主线,以单元话题为中心、相关话题为基本点去选择文章。所选文章都是围绕中心话题去展开,既帮助学生更好地去了解单元的话题内容,又拓宽了学生的视野。本书所选择的阅读材料大多数出自于近期出版的英文图书、杂志、报纸和一些知名英语网站。内容涉及名人趣事、文娱体育、旅游环境、科普知识、政治经济、历史地理、文学艺术、饮食文化等。本书主要“着重提高学生用英语获取信息、处理信息、分析问题和解决问题的能力”。本书的阅读理解题主要以选择型题目和任务型题目为主。这是目前英语考试中最常见的两种阅读理解题型。相信同学们通过强化训练,能有效地提高阅读理解能力。
  • 学校美术项目的训练与比赛(上)

    学校美术项目的训练与比赛(上)

    本书是学校文化娱乐活动项目训练与比赛系列之一,学校的文化娱乐活动项目包括音乐、美术、舞蹈、文学、语言、曲艺、戏剧、表演、游艺等多方面内容,在这些文化娱乐活动中,广大青少年通过接受不同形式、不同内容的有益教育,能够受到潜移默化的作用,这对造就和培养有理想、有道德、有纪律、有文化、适应时代腾飞的新一代人才有着十分重要的作用。
热门推荐
  • 光年战争

    光年战争

    本书不是一部纯粹的科幻小说,其中掺杂了一些魔幻元素。全书讲述的是一场未来时间由宇宙众多文明参战关于保卫宇宙文明多元化的一场战争,全书人物众多,关系复杂,关于战争场面的描写气势恢宏,情节跌宕起伏。是一部描写未来宇宙战争的史诗巨作。ps:这本小说是我在高中时代就开始构思的作品,随着阅历的不断增长逐渐丰富内容。故事的主要线索和小说框架早已构思完成,绝不烂尾!
  • 古代农门贵子

    古代农门贵子

    理工科女博士萧莫然穿越古代架空王朝,一看家徒四壁,得了,先研究植物扎染,卖染料脱贫,再搞香料方子致富,生活美滋滋。然而原身具灭门之仇,这身世谜团如何解开?女扮男装科举,萧莫然披荆斩棘,一路秀才,举人,进士,再下场搞政治。一手掌工部,一手握户部,若问首辅大人可满足了?萧莫然看向疆域图:我要这天下,大一统!某皇帝很无奈:夫人只想搞事业,何时能正眼看看他?(这是一个现代女博士到古代做女学霸,一步步登上权利巅峰,构建政治蓝图的故事)本文1v1,大女主文,坑品有保障,可放心入坑
  • 蓝色寓言

    蓝色寓言

    走近神祇此时此刻,我把自己关在烟雾缭绕的书斋里,正在绞尽脑汁冥思苦想,试图写一部前无古人后无来者的《寓言》。我不知道已经在电脑面前坐了多久,抑或是五年、十年甚至是一个世纪吧!无奈却连一段像样的文字都写不出来。
  • 2009短篇小说卷(中国当代文学经典必读)

    2009短篇小说卷(中国当代文学经典必读)

    这里其实就涉及了我们编选这套书的目的。我认为,文学的经典化过程,既是一个历史化的过程,又更是一个当代化的过程。文学的经典化时时刻刻都在进行着,它需要当代人的积极参与和实践。文学的经典不是由某一个“权威”命名的,而是由一个时代所有的阅读者共同命名的,可以说,每一个阅读者都是一个命名者,他都有命名的“权力”。而作为一个文学研究者或一个文学出版者,参与当代文学的进程,参与当代文学经典的筛选、淘洗和确立过程,正是一种义不容辞的责任和使命。
  • 天尾帝尊

    天尾帝尊

    天尾乱世,圣纳德莱大陆空间脉修强者集结,覆灭第八代天尾。一国将军痛失亲子,战场之上得一孤儿,却是世间难容的石脉之体。为之恢复形脉感知力,将军不惜叛国,以边防布置图交换开启石脉之体的方式。却是开启了这属于第九代天尾的传奇..极恶凶兽善良本性,无上邪法,正义存心,终将何去何从。
  • 念.奴娇

    念.奴娇

    据江湖传闻,潇湘妃子祖上乃是高句丽文史官,后来家中遭难,祖上携家带口,颠沛流离,逃到了辽东。那潇湘妃子不知是那史官几代后人,亦不知受到何人指点,竟练得一身绝世奇功,于是开宗建派,在紫竹林里创下紫竹斋,但是门规却是奇特狠毒:凡男子入得紫竹林,一概杀之。又因江湖上传言,这潇湘妃子容颜绝世,实乃盘古开天辟地以来天下第一美人,于是乎引得天下英雄豪杰竞相奔往,一来考量其武功到底如何,二来想一睹其绝代风姿。殊不知,潇湘妃子容颜绝世,但是心肠却是极为狠毒,凡是斗胆到紫竹林的男子,一概按门规处置。
  • 星与空之转

    星与空之转

    曾被外星文明侵略过的地球,至今仍笼罩在早已离去的恐怖中。无知的民众们渴求着真相,世界的高层则竭力隐瞒着真相。这样的现状,却被突然降临地球的外星人少女所打破。拥有神秘力量的少年,地球所拥有的来自异星文明的超乎想象的技术,皆因她的出现而登场。一场将整个世界都卷入其中的争斗,能否将这个世界所隐瞒的真实揭开?
  • 约翰与镜像之海

    约翰与镜像之海

    约翰是一位海盗,在神秘的大海上,约翰遇见了一个又一个的传说。
  • 凤求凰:绝色邪王逆天妃

    凤求凰:绝色邪王逆天妃

    妖孽年年有,今年特别多。长江后浪推前浪,前浪死在沙滩上!上至亲爷爷,下至扫地大妈,都当她好欺负是吧,她颜值负数?那京城第一美人是癞蛤蟆!她是废材,那第一天才是蚂蚁,一大一个死!丹药师很稀少?偏偏她不小心炼了个神级皇级,召唤师几乎没有?她大把大把神兽当狗骑!符咒师很吃香?她符咒多多当厕纸擦!美男全到碗里来,谁还稀罕你这个三皇子!我家美男特别多,闷骚的活泼的英俊的潇洒的风流的专一的可爱的严肃的,上至大叔长腿欧巴,下至正太萌萌哒!
  • 我真是编剧

    我真是编剧

    王野一直认为,他的真实身份,是一名编剧。别的身份,都是被迫的。