好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

aspnet电子商务开发实战8搜索目录ppt课件.ppt

32页
  • 卖家[上传人]:新**
  • 文档编号:593576482
  • 上传时间:2024-09-26
  • 文档格式:PPT
  • 文档大小:1.08MB
  • / 32 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第8章 搜索目录; 本章内容•分析商品目录的不同搜索方法•基于SQL Server的FULLTEXT引擎开发一个搜索引擎•编写能与“实现搜索功能〞的存储过程交互的数据层与业务层代码•创建目录搜索功能的用户界面; 8.1 选择搜索目录的方法•根本思绪•可视化部分:提供一个TextBox控件,让访问者输入想要搜索的内容•访问者输入的文本,可以经过下面几种方式进展搜索:•准确匹配:假设访问者输入整个短语,那它将作为一个整体在数据库中搜索,不单独搜索分别出来的独立单词•全单词搜索:把访问者输入的整个短语分别成独立的单词,搜索包含每个单词的商品,此时,单词在短语中的顺序就不再重要了•任一单词:商品必需至少包含一切 输入单词中的一个•本工程将支持任一单词与全单词两种搜索方式; •搜索框的设计:•匹配的商品信息的显示:把搜索结果显示在Web用户控件Product.ascx中; 8.2 教数据库本人搜索•在数据库中,主要有两种实现搜索的方法•SQL Server全文搜索功能:该功能可以实现高级的关键字搜索,诸如运用布尔运算符〔AND, AND NOT和OR〕搜索,搜索单词变体,如复数、各种动词时态和方式相近的词等。

      另外,全文搜索功能也可以根据评级来排序结果,把最匹配的结果放在最前面•定制搜索方法〔需运用存储过程、用户自定义函数及勇于尝试的精神〕•本工程中,将运用全文搜索方法; •在数据库中快速搜索数据,运用索引可以提高搜索速度,然而索引普通是建立在数字型或长度比较短的文本型字段上的,比如说编号、姓名等字段,假设建立在长度比较长的文本型字段上,更新索引将会花销很多的时间如在文章内容字段里用like语句搜索一个关键字,当数据表里的内容很多时,这个时间能够会让人难以忍受•在SQL Server中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数据的速度; •全文索引与普通的索引不同,普通的索引是以B-tree构造来维护的,而全文索引是一种特殊类型的基于标志的功能性索引,是由Microsoft SQL Server全文引擎效力创建和维护的•运用全文索引可以快速、灵敏地为存储在SQL Server数据库中的文本数据创建基于关键字查询的索引,与like语句不同,like语句的搜索是适用于字符方式的查询,而全文索引是根据特定言语的规那么对词和短语的搜索,是针对言语的搜索•在对大量的文本数据进展查询时,全文索引可以大大地提高查询的性能,如对于几百万条记录的文本数据进展like查询能够要花几分钟才干前往结果,而运用全文索引那么只需几秒钟甚至更少的时间就可以前往结果了。

      •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 for SQL Server的作用是填充全文索引、管理全文索引和全文目录、协助对SQL Server数据库中的数据表进展全文搜索•Microsoft Full-Text Engine Filter Deamon包含挑选器、协议处置程序和断字符三个组件,其作用是担任从数据表中访问和挑选数据以及进展断字和词干分析其中,挑选器的作用是从文档中提取文本信息,并将非文本信息和格式化信息〔如换行符、字体大小等信息〕删除,然后生成文本字符串和属性的对应,并将它们传送给索引引擎;协议处置程序用于从指定数据库中的表内访问数据;断字符用于在查询或抓取的文档中确定字符边境位置 •设置完全文索引并填充终了之后,就可以经过全文搜索来查询数据了。

      运用全文搜索来查询数据所用到的T-SQL语句也是SELECT语句,只是在设置查询条件时和普通的SELECT语句的查询条件设置有些不同•在T-SQL言语中,可以在SELECT语句的WHERE子句里设置全文搜索的查询条件,也可以在FROM子句里设置查询条件,此时将前往结果作为FROM子句中的表格来运用•假设要在WHERE子句里设置全文搜索的查询条件,可以运用CONTAINS和FREETEXT两个谓词;假设要在FROM子句里设置全文搜索的查询条件 ,可以运用CONTAINSTABLE和FREETEXTTABLE两个行集值函数; •其中常用的参数为:•column_name:字段名•column_list:字段名列表•*:一切字段•LANGUAGE language_term:用于设置查询时所用的言语例如在image字段里能够会存储了多种言语的文档,该参数允许用户指定搜索运用的言语,从而提高匹配率•INFLECTIONAL:用于指定运用与言语相关的词干分析器词干分析器用于根据每种详细言语的判别词干•THESAURUS:用于指定同义词库; 例如:简单词的搜索方式; 例如:派生词的搜索方式•派生词的搜索方式主要用在英文当中,由于英文单词中含有如今式、过去式、未来式、单复数等不同的方式,使派生词的搜索方式可以将字段中包括该单词的一切方式的记录都搜索出来。

      例如运用派生词方式搜索包含单词download的记录,那么会把包含download、downloading等派生词的记录都搜索出来; 例如:前缀词的搜索方式•前缀词的搜索方式主要也是用在搜索英文中,例如搜索以“do〞开头的单词,那么可以将doctor、document、download等单词都搜索出来SELECT * FROM 文章         WHERE CONTAINS〔内容,' "do*" '〕; 运用CONTAINSTABLE搜索•CONTAINSTABLE函数与CONTAINS谓词类似,其可以前往符合条件的多条记录,但是前往的记录是作为数据表出如今SELECT语句的FROM子句中•这个数据表里只包含两个字段:一个字段名为“KEY〞,该字段显示的是全文索引的独一索引键的内容所创建的索引列;另一个字段名为“RANK〞,该字段是排名值字段,其排名值是由系统依查询符合的程度自动生成的•语法:CONTAINSTABLE 〔 table , { column_name | 〔column_list 〕 | * } , ' < contains_search_condition > '      [ , LANGUAGE language_term]   [ ,top_n_by_rank ]    〕 ; •例如:查看文章表中内容含有“教育部〞的记录的编号•查看文章表中内容含有“教育部〞和“表示〞的前十条记录,并按查询符合程度排序,其代码如下:SELECT * FROM          CONTAINSTABLE〔文章,内容,'教育部'〕 as table1SELECT * FROM 文章 JOIN         CONTAINSTABLE〔文章,内容,' "教育部" NEAR "表示" ',10〕 as table1         ON 文章.编号= table1.[KEY]         ORDER BY table1.RANK DESC; 8.2.1 按章SQL Server全文搜索功能•启动相应效力; •可以运用SQL Server Management Studio执行命令来验证这些效力能否正在运转•假设没有安装FullText搜索效力•可以卸载当前SQL Server实例,重新安装•晋级当前SQL Server实例,添加全文搜索功能; ; 安装胜利; 8.2.2 创建FULLTEXT目录和索引•要在数据库上执行FULLTEXT查询,首先需求为数据库创建一个FULLTEXT目录,它将包含FULLTEXT索引,然后根据需求搜索的列对每个表建立索引; 8.2.3 按相关性排序; •衔接Product表,以获得商品称号,并对RANK降序陈列,以将最匹配的放在最前面; •获取Name列和Description列的搜索排名•为了过滤不匹配的商品,并按相关性降序陈列,可以将Name列的排名*3,使其匹配权严重于description的匹配权重; 可以运用布尔操作符执行恣意词搜获和全词搜索,例如:当访问者要执行关键字为〞red balloon〞的恣意词搜索; 8.2.4 改良搜索结果的相关性; ; 8.2.5 创建存储过程SearchCatalog•SearchWord存储过程:•前往一切包含@Word〔该存储过程所接纳的参数〕字符串的一切商品•其前往的结果集是由商品ID和排名构成的,其中排名值是由商品称号的排名乘以3再加上商品描画的排名计算得到; •SearchCatalog存储过程,该过程将运用SearchWord存储过程来计算搜索结果; 8.3 实现业务层•业务层包含SearchCatalog方法,它将调用SearchCatalog存储过程,ProductList.ascx将运用该数据,显示搜索结果•该方法需求把搜索短语分割成独立单词,并传送一个True/False给SearchCatalog存储过程的@AllWords参数; public static DataTable Search〔string searchString, string allWords,    string pageNumber, out int howManyPages〕    {        // get a configured DbCommand object        DbCommand comm = GenericDataAccess.CreateCommand〔〕;        // set the stored procedure name        comm    mandText = "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 parameter        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.Parameters.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";        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 index = 1;        for 〔int i = 0; i <= words.GetUpperBound〔0〕 && index <= howManyWords; i++〕            // ignore short words            if 〔words[i].Length > 2〕            {                // create the @Word parameters                param = comm.CreateParameter〔〕;                param.ParameterName = "@Word" + index.ToString〔〕;                param.Value = words[i];                param.DbType = DbType.String;                comm.Parameters.Add〔param〕;                index++;            }        // execute the stored procedure and save the results in a DataTable        DataTable table = GenericDataAccess.ExecuteSelectCommand〔comm〕;        // calculate how many pages of products and set the out parameter        int howManyProducts =      Int32.Parse〔comm.Parameters["@HowManyResults"].Value.ToString〔〕〕;        howManyPages = 〔int〕Math.Ceiling〔〔double〕howManyProducts /                       〔double〕BalloonShopConfiguration.ProductsPerPage〕;        // return the page of products        return table;    }; 8.4 实现表示层•目录搜索功能有两个独立的界面元素需求实现•访问者输入搜索字符串的地方,由一个独立的名为SearchBox.ascx的web用户控件实现,为访问者提供一个文本框和复选框控件•搜索结果页面,它显示符合搜索条件的商品; •本人根据课本例如完成搜索对话框的创建和搜索结果显示页面; 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.