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

同类推荐
  • 语文新课标必读-孟子选注

    语文新课标必读-孟子选注

    孟子(约公元前372—前289年),战国时期的思想家、政治家、教育家。名轲,字子舆,邹(今山东邹县)人。幼年丧父,靠母亲抚育成人。年轻时曾从孔子之孙子思的门人学习,30岁左右收徒讲学,为了推行自己的政治主张,44岁时开始周游列国,先后到齐、宋、滕、魏等国,游说诸侯,宣扬“仁政”“王道”,始终不受重用。晚年返回家乡,讲学著述,直到去世。汉武帝时“罢黜百家,独尊儒术”,孟子和孔子一样,成为封建统治者尊崇的偶像;到唐代,已将孟子和孔子并称;元、明时称为“亚圣”。均不被采纳。
  • 启迪青少年的语文故事集——青少年应知文学名著的故事

    启迪青少年的语文故事集——青少年应知文学名著的故事

    本丛书重视语文的基础知识训练,选编了常用词语、好词好句、古文名句解读,谚语、歇后语集萃,还有语文趣味故事、语文之谜以及语文大家的故事等等,目的是使中小学生在快乐的阅读中逐步提高语文知识,增加文学素养,为将来走出社会自立人生打下坚实的基础。
  • 学生热捧的当代名家散文:小号小号在呼唤

    学生热捧的当代名家散文:小号小号在呼唤

    本作品集精选了作者近年来发表在各种报刊、杂志等媒体上的优秀散文、随笔,共分两辑。第一辑是作者在国内工作生活期间的所见、所闻、所思、所感;第二辑是作者在境外、海外的见闻、感触和体验。作者见多识广,非常具有文化价值。
  • 政治经济学概论

    政治经济学概论

    本书以马克思主义政治经济学基本理论为核心和主线,系统地介绍了自由竞争资本主义时期和垄断资本主义时期的经济现象、经济范畴和经济规律。本书在参照国内优秀同类教材基础上,力图实现创新,体现自己的特色。在方法上,力图实现理论与实践、逻辑与历史、规范与实证的结合;在内容安排上,注重对当代资本主义经济现象的介绍与分析,以体现理论对现实的关注和解释力。本书适用于高等院校经济学与管理学各专业,也适用子自学考试、函授等成人高等教育。
  • 培养学生心灵成长的经典故事——扫除成长心理障碍

    培养学生心灵成长的经典故事——扫除成长心理障碍

    在这套丛书里,我们针对青少年的心理特点,专门选择了一些特殊的故事,分别对他们在这一时期将会遭遇的情感问题、生活问题、学习问题、交友问题以及各种心理健康问题,从心理学的角度进行剖析和讲解,并提出了解决问题的方法和措施,以供同学们参考借鉴。
热门推荐
  • 生而向死

    生而向死

    人生不过是一段迈向死亡的历程,它不是一个人的传奇,只是一个人为了活下去的奋斗史。都市小说,烂俗桥段。如有雷同,纯属巧合。
  • 脂粉城市

    脂粉城市

    老街依旧,街面上店铺林立,美女如云,浓郁的脂粉香盖过了汽油味儿。她梦幻般地静静地躺在那里,她感到有一只温柔的贪婪的手,在探索着爱抚她的身体,她感到从未有过的无限的平和,无限的镇静和无限的欣慰。
  • 校花的至尊狂少

    校花的至尊狂少

    身怀绝世武功,又会针灸奇术!姜奇下山找老婆,不料艳遇众女,从此一个个性格各异、妩媚妖娆的美女统统都朝他扑了过来。空姐、护士、幼师、校花、警花、明星、模特等等,只有你想不到的,没有本书没有的!本书的主题就是:大开后宫,御女三千!希望大家投票加收藏一下,多多支持我!本书群号是:163—576—360【群里有单身美女哦!】
  • 武屹天下

    武屹天下

    年到十六无法修炼,他该如何抉择?身世之谜杳无音信,他该何去何从?家族被灭,亲人被杀,他会去报仇吗?万雷淬体,非生即灭,他又该怎样?这是一个充满神奇的空间,这是一个强者为尊的世界。闯遗迹,夺至宝,报血仇,他曾经无数次跌倒,凭借着自己的执着,他一步一步走向巅峰,屹立天下,谁与争锋!
  • 闲王追妻

    闲王追妻

    他,是北国的王爷,她,是月家的废物,那一日她的特别吸引了他
  • 掌生御死

    掌生御死

    只手掌生御死,医人笑傲风云,医己长生永存!他日登高凌云时,天下苍生若微尘。PS.新人新书,多有不足,请耐心看下去,求包养。
  • 名牌腹黑妻.名门的私宠

    名牌腹黑妻.名门的私宠

    简介:她,是和他结婚四年的老婆,他,是和她结婚四年的老公,在这婚姻四年里,见面的次数5根指头都数地出来!他对她无情冷漠,某日“老婆觉得老公我养不起你?嗯?”“废话,你这么穷,这么养的起我!”她一脸不屑。“那老婆要不要试试看我会不会穷?”“……”十亿的项链!六千万的车!三十万的鞋子!五十万的名牌!……“老婆,等我穷了你再走好不好?”某人耍无赖道,某人翻了个白眼,“你何时会穷!”她要什么,他给她便是。[多多关照]
  • 戮尸帝国

    戮尸帝国

    这是一个由于生化泄露所致的破碎世界,传统文明的秩序被打破,主人公生逢乱世,从鲜血中磨练出钢铁般的意志,与兄弟出生入死,为红颜毁天灭地,在这混乱的世界之中建立一个属于自己的戮尸帝国
  • 梦思凡

    梦思凡

    以架空历史为背景,两个学生一个老师,后事待续
  • 囧囧的童话

    囧囧的童话

    灰姑娘丢掉水晶鞋,钓到好帅的一枚王子,然后和王子一起坐在幸福的摩天轮里,美满得昏头转向了;青蛙王子情深一吻,一索得一美艳公主,轰轰烈烈地相爱了一辈子;睡美人百年孤寂,只为等到合适的王子令其苏醒,继而和吻醒她的王子成为天造地设的一对;古堡里的贵妇人无忧无虑、华丽丽地生活着……