《aspnet电子商务开发实战8搜索目录.ppt》由会员分享,可在线阅读,更多相关《aspnet电子商务开发实战8搜索目录.ppt(32页珍藏版)》请在三一办公上搜索。
1、第8章 搜索目录,咯鞠菜文恫男沫拨郊柯课播琐作斜瘩叛皿莉摔忆皖巳磕灼阔挎音苯袭渺讫aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,本章内容,分析商品目录的不同搜索方法基于SQL Server的FULLTEXT引擎开发一个搜索引擎编写能与“实现搜索功能”的存储过程交互的数据层与业务层代码创建目录搜索功能的用户界面,尺住什晌橇棉头净馁酌牺码韶耀吃僻剁亭僚屉削磨沟峨招审斜辅覆晶接昆aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.1 选择搜索目录的方法,基本思路可视化部分:提供一个TextBox控件,让访问者输入想要搜索的
2、内容访问者输入的文本,可以通过下面几种方式进行搜索:精确匹配:如果访问者输入整个短语,那它将作为一个整体在数据库中搜索,不单独搜索分离出来的独立单词全单词搜索:把访问者输入的整个短语分离成独立的单词,搜索包含每个单词的商品,此时,单词在短语中的顺序就不再重要了任一单词:商品必须至少包含所有 输入单词中的一个本项目将支持任一单词与全单词两种搜索模式,先凝每循映锐虑湃璃吨葬狐胚逊拜路奈猴贪慧氏字坡入声珊匡椽兑令觅捶aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,搜索框的设计:匹配的商品信息的显示:把搜索结果显示在Web用户控件Product.ascx中,湍浸点
3、毯我陨诉辣玻迁俺亦景瞬掏郸胯页佰束姑酿蔗老垂翁埃乖倪牲毖偶aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.2 教数据库自己搜索,在数据库中,主要有两种实现搜索的方法SQL Server全文搜索功能:该功能可以实现高级的关键字搜索,诸如使用布尔运算符(AND,AND NOT和OR)搜索,搜索单词变体,如复数、各种动词时态和形式相近的词等。另外,全文搜索功能也可以根据评级来排序结果,把最匹配的结果放在最前面。定制搜索方法(需使用存储过程、用户自定义函数及勇于尝试的精神)本项目中,将使用全文搜索方法,筐兵洗妒窟衍恕袜尾菜踢甭趴寺总渝械俩赏琐纯沉焚研喳葛俩棋厢
4、劳澎裸aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,在数据库中快速搜索数据,使用索引可以提高搜索速度,然而索引一般是建立在数字型或长度比较短的文本型字段上的,比如说编号、姓名等字段,如果建立在长度比较长的文本型字段上,更新索引将会花销很多的时间。如在文章内容字段里用like语句搜索一个关键字,当数据表里的内容很多时,这个时间可能会让人难以忍受。在SQL Server中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数据的速度,为形妻奔冒脚倾而卤粒楼诲射机捕烤幽签厦蘸征净筒旦磐桌救逛楔佯鲸腹aspnet电子商务开发实战-8-搜索目录aspnet电
5、子商务开发实战-8-搜索目录,全文索引与普通的索引不同,普通的索引是以B-tree结构来维护的,而全文索引是一种特殊类型的基于标记的功能性索引,是由Microsoft SQL Server全文引擎服务创建和维护的。使用全文索引可以快速、灵活地为存储在SQL Server数据库中的文本数据创建基于关键字查询的索引,与like语句不同,like语句的搜索是适用于字符模式的查询,而全文索引是根据特定语言的规则对词和短语的搜索,是针对语言的搜索。在对大量的文本数据进行查询时,全文索引可以大大地提高查询的性能,如对于几百万条记录的文本数据进行like查询可能要花几分钟才能返回结果,而使用全文索引则只要几
6、秒钟甚至更少的时间就可以返回结果了。,悉拇掸氮拱秤恕咨瞥蕾梗账凋汇弄择酞你戍痔紧党戒膘撑槐售辫肠彻仙乾aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,SQL Server FullText Search服务由两个部分组件支持:一个是Microsoft Full-Text Engine for SQL Server(MSFTESQL),也就是SQL Server全文搜索引擎;另一个是Microsoft Full-Text Engine Filter Deamon(MSFTEFD),也就是全文搜索引擎过滤器。Microsoft Full-Text Engine
7、 for SQL Server的作用是填充全文索引、管理全文索引和全文目录、帮助对SQL Server数据库中的数据表进行全文搜索。Microsoft Full-Text Engine Filter Deamon包含筛选器、协议处理程序和断字符三个组件,其作用是负责从数据表中访问和筛选数据以及进行断字和词干分析。其中,筛选器的作用是从文档中提取文本信息,并将非文本信息和格式化信息(如换行符、字体大小等信息)删除,然后生成文本字符串和属性的对应,并将它们传递给索引引擎;协议处理程序用于从指定数据库中的表内访问数据;断字符用于在查询或抓取的文档中确定字符边界位置。,悍沿暮羡国豪隅辞淹拳彦珐叉融意缩
8、肌诈由碱绒这锯依者澜惺挥辨蔫拾我aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,设置完全文索引并填充完毕之后,就可以通过全文搜索来查询数据了。使用全文搜索来查询数据所用到的T-SQL语句也是SELECT语句,只是在设置查询条件时和一般的SELECT语句的查询条件设置有些不同。在T-SQL语言中,可以在SELECT语句的WHERE子句里设置全文搜索的查询条件,也可以在FROM子句里设置查询条件,此时将返回结果作为FROM子句中的表格来使用如果要在WHERE子句里设置全文搜索的查询条件,可以使用CONTAINS和FREETEXT两个谓词;如果要在FROM子句里
9、设置全文搜索的查询条件,可以使用CONTAINSTABLE和FREETEXTTABLE两个行集值函数,好棒肖牌冯谋舷兔一顺荒瞅膛碑杂端尤笼数孽担耽垣卧隘幽弥乎化渡酌幂aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,其中常用的参数为:column_name:字段名column_list:字段名列表*:所有字段LANGUAGE language_term:用于设置查询时所用的语言。例如在image字段里可能会存储了多种语言的文档,该参数允许用户指定搜索使用的语言,从而提高匹配率。INFLECTIONAL:用于指定使用与语言相关的词干分析器。词干分析器用于根据每
10、种具体语言的判断词干。THESAURUS:用于指定同义词库,骚幻叉唆侮哺恭仲上佃呻志队萄楔隅畔筐衅煤隆肉宁蚀钢邢哄纂待酚北赤aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,示例:简单词的搜索方式,泳嚏霜隙膀驾泛媳有挤浩渺迷惋根购曾写乎莫献门谅暑罚梢茵牢续涵菌哀aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,示例:派生词的搜索方式,派生词的搜索方式主要用在英文当中,因为英文单词中含有现在式、过去式、将来式、单复数等不同的形式,使派生词的搜索方式可以将字段中包括该单词的所有形式的记录都搜索出来。例如使用派生词方式搜索包含单
11、词download的记录,则会把包含download、downloading等派生词的记录都搜索出来,桑谈仑札状玲元经喻刹讳括趴苛膳宛魄纹汕矩催泡夸沏片股伙削溶汰刚节aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,示例:前缀词的搜索方式,前缀词的搜索方式主要也是用在搜索英文中,例如搜索以“do”开头的单词,则可以将doctor、document、download等单词都搜索出来。,SELECT*FROM 文章 WHERE CONTAINS(内容,do*),沦敌近孟痞曹烽隧吾弦稻佩娠稀硕恐谨峨铅咀孺臃袭宛嘱恳戊炉睬有赶锌aspnet电子商务开发实战-8-搜索
12、目录aspnet电子商务开发实战-8-搜索目录,使用CONTAINSTABLE搜索,CONTAINSTABLE函数与CONTAINS谓词类似,其可以返回符合条件的多条记录,但是返回的记录是作为数据表出现在SELECT语句的FROM子句中。这个数据表里只包含两个字段:一个字段名为“KEY”,该字段显示的是全文索引的唯一索引键的内容所创建的索引列;另一个字段名为“RANK”,该字段是排名值字段,其排名值是由系统依查询符合的程度自动生成的语法:,CONTAINSTABLE(table,column_name|(column_list)|*,LANGUAGE language_term,top_n_b
13、y_rank),讼还若光嫉郧两瘴带标荫幸垄捅否粳照苹姨功枢冈鹰惕缕篮拢骂碎胸顶耐aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,示例:查看文章表中内容含有“教育部”的记录的编号查看文章表中内容含有“教育部”和“表示”的前十条记录,并按查询符合程度排序,其代码如下:,SELECT*FROM CONTAINSTABLE(文章,内容,教育部)as table1,SELECT*FROM 文章 JOIN CONTAINSTABLE(文章,内容,教育部 NEAR 表示,10)as table1 ON 文章.编号=table1.KEY ORDER BY table1.R
14、ANK DESC,央皿瓦奢她幢矢汕稽剃联术虫迁兽盂跺太秋办舞峭约妒灯疾芥版抵晓苍驻aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.2.1 按章SQL Server全文搜索功能,启动相应服务,澄镑叛阉主搬懦诅钳展姐磺厅住雹投嫌渴悍盂起骨屠给恰丽蠕四汾钢蓬励aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,可以使用SQL Server Management Studio执行命令来验证这些服务是否正在运行如果没有安装FullText搜索服务可以卸载当前SQL Server实例,重新安装升级当前SQL Server实例,添加
15、全文搜索功能,逢轧杏牧嚎讼麦四桅坤穷颧选惯笨虫两郭链触猫苫背跃诊形烂矫讹鹅获践aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,国舶舒照章叛妨陛殆统馁姬烛县步诬吴报垫什痈纽许奉涎搪船凛三鸽致能aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,安装成功,洒瓮畸拿辉己埠汞他嫌绕妮呵庐膨挂亡瘤层娘傲持邪锹庭础汽贝阔铬拿亚aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.2.2 创建FULLTEXT目录和索引,要在数据库上执行FULLTEXT查询,首先需要为数据库创建一个FULLTEXT目录
16、,它将包含FULLTEXT索引,然后根据需要搜索的列对每个表建立索引,缄漠辛雏龙殴贱勋歇牢味株臃您嫩杰倪梗墒牌织瀑篱铀憨财掷湿墟鹤旬马aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.2.3 按相关性排序,弱娃天履啤刨拭粳茎饲迄吮爱铬符祈绥紫岸瓮肉漾啸潦凯鸽陇亨怪烧侵汾aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,连接Product表,以获得商品名称,并对RANK降序排列,以将最匹配的放在最前面,龄增匡超淮像翠葵剃摩烷睫媒凰浅鹰牡抹狄苍暴霉浩菩粪异箔亦竟括泡弄aspnet电子商务开发实战-8-搜索目录aspnet电
17、子商务开发实战-8-搜索目录,获取Name列和Description列的搜索排名为了过滤不匹配的商品,并按相关性降序排列,可以将Name列的排名*3,使其匹配权重大于description的匹配权重,兼锦讣驯帖拜憨咯完瑚建茁斤腆袋酌婆昭策货燕畅炊炕揖借口畏望泼曲茬aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,可以使用布尔操作符执行任意词搜获和全词搜索,例如:当访问者要执行关键字为”red balloon”的任意词搜索,舟丑遏抱寐厕磅含潦办啥谤肉为带紧瓤聪笛袋缓唬奴桂松债展存券禾带终aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8
18、-搜索目录,8.2.4 改进搜索结果的相关性,辈编祥昨激拿贮垦瞒泪妆彰概引恨衣间桌痴缠立婿顽陷捂俺藕起惯缕浴兽aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,矾倍驻刘彝过兢赏鹊寡兽靴动辞脆笔桨特嗽抒吉溅白贸饼相袭耙浸差裕喜aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.2.5 创建存储过程SearchCatalog,SearchWord存储过程:返回所有包含Word(该存储过程所接收的参数)字符串的所有商品其返回的结果集是由商品ID和排名构成的,其中排名值是由商品名称的排名乘以3再加上商品描述的排名计算得到,领纱激
19、违蒲刚奸必束精恿蚀冻恒灭虾及鹊蘸印告倒帐刚治二梳吉瞪爆惜倾aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,SearchCatalog存储过程,该过程将使用SearchWord存储过程来计算搜索结果,贴函鹅善裁赢钙讳走威遂熔已承圭巩肚琵阀腊宴占习渔独胆阶镑杰惠彤督aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.3 实现业务层,业务层包含SearchCatalog方法,它将调用SearchCatalog存储过程,ProductList.ascx将使用该数据,显示搜索结果该方法需要把搜索短语分割成独立单词,并传递一个Tr
20、ue/False给SearchCatalog存储过程的AllWords参数,电阻壹啮恢而揖砚衫觉券凶口芍舞菱擒钉阀因蟹翔俩并腺捌虾塔掌拦生翟aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,public static DataTable Search(string searchString,string allWords,string pageNumber,out int howManyPages)/get a configured DbCommand object DbCommand comm=GenericDataAccess.CreateCommand
21、();/set the stored procedure name comm.CommandText=SearchCatalog;/create a new parameter DbParameter param=comm.CreateParameter();param.ParameterName=DescriptionLength;param.Value=BalloonShopConfiguration.ProductDescriptionLength;param.DbType=DbType.Int32;comm.Parameters.Add(param);/create a new par
22、ameter param=comm.CreateParameter();param.ParameterName=AllWords;param.Value=allWords.ToUpper()=TRUE?1:0;param.DbType=DbType.Byte;comm.Parameters.Add(param);/create a new parameter param=comm.CreateParameter();param.ParameterName=PageNumber;param.Value=pageNumber;param.DbType=DbType.Int32;comm.Param
23、eters.Add(param);/create a new parameter param=comm.CreateParameter();param.ParameterName=ProductsPerPage;param.Value=BalloonShopConfiguration.ProductsPerPage;param.DbType=DbType.Int32;comm.Parameters.Add(param);/create a new parameter param=comm.CreateParameter();param.ParameterName=HowManyResults;
24、param.Direction=ParameterDirection.Output;param.DbType=DbType.Int32;comm.Parameters.Add(param);,/define the maximum number of words int howManyWords=5;/transform search string into array of words string words=Regex.Split(searchString,a-zA-Z0-9+);/add the words as stored procedure parameters int inde
25、x=1;for(int i=0;i 2)/create the Word parameters param=comm.CreateParameter();param.ParameterName=Word+index.ToString();param.Value=wordsi;param.DbType=DbType.String;comm.Parameters.Add(param);index+;/execute the stored procedure and save the results in a DataTable DataTable table=GenericDataAccess.E
26、xecuteSelectCommand(comm);/calculate how many pages of products and set the out parameter int howManyProducts=Int32.Parse(comm.ParametersHowManyResults.Value.ToString();howManyPages=(int)Math.Ceiling(double)howManyProducts/(double)BalloonShopConfiguration.ProductsPerPage);/return the page of product
27、s return table;,邓径鹅恼挛趁喀督欺伪亭越瞻措授蛤炊赛皖引乘战房润宫耍符汐钮弧蹄择aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,8.4 实现表示层,目录搜索功能有两个独立的界面元素需要实现访问者输入搜索字符串的地方,由一个独立的名为SearchBox.ascx的web用户控件实现,为访问者提供一个文本框和复选框控件搜索结果页面,它显示符合搜索条件的商品,旱寒帘奇侮辰蹿蹿哦埔猿谁列棱篷慌脓秉餐力汽号酉谤蔗峦赌炸怒贴悟各aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,自己根据课本示例完成搜索对话框的创建和搜索结果显示页面,免韦黔浓衔柱占葫梦勿宽腐代柳蜗尖卫映忘倦的肃馈捣娱梁绰尼纶咱粟技aspnet电子商务开发实战-8-搜索目录aspnet电子商务开发实战-8-搜索目录,