中科院站内搜索引擎课程设计报告二.ppt
中科院网站站内搜索引擎课程设计报告需求分析与项目设计报告1.封面及个人贡献的分解,a)i.ii.iii.iv.,第一页课程名称高级软件工程项目名称中科院网站站内搜索引擎提交日期2010 年 1 月 22 日项目组成员列表,小组成员均来自软件研究所,学号200928015029038200928015029047200928015029041200928015029012200928015029046200928015029017,姓名许利杰赵占平张灿高蕾赵鑫李奇原,手机号152109096471500127025415210631362152109021771521090217015210909712,邮箱,i.,b),第二页个人贡献分解表,成员,小组成员姓名,职责项目管理(10)4:用户需求说明(7),许利杰60%20%,高蕾10%20%,赵占平20%20%,赵鑫10%,张灿20%,李奇原20%,5:术语表(3),100%,6:功能需求详述(10)7:非功能需求(2)8:领域分析(5),25%,15%50%,30%50%50%,30%,50%,9:交互图(协作图)(10),20%,10%,50%,20%,10:类图和接口规范(20)11:系统体系结构和系统设计(10)12:算法和数据结构(10)13:用户界面设计(10),20%30%20%20%,20%30%10%50%,20%10%20%,25%10%20%,15%30%,20%30%,14:工作历史(2)16:参考文献(1),100%,100%,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,2.目录,中科院网站站内搜索引擎课程设计报告.1需求分析与项目设计报告.1,封面及个人贡献的分解.1目录.3更改说明.4用户需求说明.4,4.1.项目背景.44.2.项目目的.44.3.已有的解决方法.54.4.具体用户需求.5术语表.6功能需求详述.6非功能需求.12领域分析.13交互图(协作图).15类图和接口规范.19系统体系结构和系统设计.25算法和数据结构.27用户界面设计.31工作历史.37结论和未来工作.39参考文献.41,3.更改说明需求方面变更:1、将分类检索从可选功能改为比做功能。2、增加了搜索建议功能。3、支持中文语句搜索,不仅能够进行中文解析,还要能处理用户输入的中文语句。4、增加了站点查询功能。,用例图变更:除了用户分类检索图以外,其他的用例图重新进行了分析与绘制。序列图变更:,绘制了系统序列图,除了用户分类检索图以外,其他的用例图重新进行了分析与绘制。4.用户需求说明,4.1.,项目背景,目前高校网站或者一般网站中使用的站内搜索引擎基本有三大类:一种是使用 Google的站内搜索引擎服务(由 Google Search Appliance 驱动)。例如:清华大学、上海交大、浙江大学等等,Google 提供这种搜索服务是要收费的。一种是使用原始的文件索引技术,类似于在 word 中查找关键字的方法对文档进行搜索,因此只能搜索一些办公通知(如:中科院研究生院)。最后一种是只能搜索校内各个下属网站主页(如:武汉大学,相当于查询一个主页名字和网站地址的映射表)。后两种不能称之为真正意义上的站内搜索引擎。比较特殊的是北京大学的站内搜索使用了自己开发的天网搜索引擎,属于真正意义上的站内搜索引擎。,4.2.,项目目的,针对中科院旗下网站,部署一个类似 Google 站内搜索和北大天网搜索引擎的站内式搜索引擎。用户通过输入关键字能够检索到内容相关的站内网页、文档等多种文件,并能够对搜索结果进行排序、分类和整理,最终通过浏览器将结果返回给用户。另外,根据中科院的特点,站内搜索引擎提供分类检索功能,用户可以选择对人员、科研、招生等信息进行专题搜索。,。,4.3.,已有的解决方法,从目前调查结果来看,北大天网搜索引擎返回结果中不能直接提供 MS word、pdf 等文件的直接链接,也就是不能对这些文件进行有效解析和搜索。Google 站内搜索可以(通过点击返回的结果标题,可以直接下载 doc、pdf 等文件)。但 Google 站内搜索没有提供网页快照功能,天网提供了。其他高校如华中科技大学的站内搜索也能够对站内的网页进行搜索,但是也只能处理网页,不能处理其他类型的文件。中科院目前的站内搜索也是同样的情况。除了 Google 的站内搜索服务,目前另一位比较优秀的站内搜索引擎是基于开源检索工具改造和搭建的。如:美国俄勒冈州立大学的站内搜索引擎(http:/search.oregonstate.edu/),不仅能够对校内网页进行索引,而且能够对内容进行分类检索,支持多种格式文件的检索。其检索界面如下图:,4.4.,具体用户需求,1)站内搜索引擎是一个大型网站提供的一种网络服务,是为了方便用户快速检索到自己想要访问的网页或文件。因此在网站首页应包含简洁、醒目的搜索框,用户直接在搜索框中键入查询关键字,点击确认或回车后,网站应能够快速响应请求,并将符合用户搜索的结果通过网页形式反馈给用户。2)用户希望返回结果中,除了相应结果的链接,还要有对网页的简单摘要,如商业搜索引擎中一般有 3 到 4 行对搜索结果的描述,便于用户鉴别是否是自己想要访问的链接。另外,返回的结果应该按照查询关键词的相关度排序,越符合查询要求的应该放的越靠前。第一页显示 10 条左右的查询结果,如果过多的查询结果放在同一页,会令用户感觉复杂繁多。如果查询结果多于 10 条,可以让用户通过点击下一页等方式来访问。3)搜索引擎要能够定期自动更新,因为不断地有新的网页或者文件加入到网站中,定期更新搜索结果,能够保证用户能够及时地通过站内搜索引擎访问到新加入的资源。最好还能够提供网页快照功能,便于用户快速访问已经关闭或者暂时不能访问的网页。4)能够提供基于内容分类的检索服务。例如:商业搜索引擎可以为用户提供不同内容的检索服务(如:图片、mp3、视频、博客等等)。由于本项目针对中科院内部网站,用户,可能需要检索中科院内人员、科研、招生等相关信息,所以本项目应能够提供这些分类检索服务。,5)搜索框内相关搜索结果提示。为了方面搜索引擎与用户之间的交互,当用户在搜索,框中键入关键字时,搜索引擎最好能够提供搜索提示。如当用户在搜索框中键入“科”时,搜索框能够动提示以“科”为前缀的短语及包含该短语的搜索结果个数。,6)良好的语言识别能力。由于用户可能在搜索框中键入中文或英文,而中文在自然语言处理领域是比较难以处理的语言。搜索引擎应该能够正确地理解用户输入,在理解的基础上进行检索,并能够根据词语的相关性对搜索结果进行有效地排序输出。,5.术语表,爬虫:将web网页自动下载到本地的网络程序。,URL:统一资源定位符(英语Uniform Resource Locator的缩写)也被称为网页地址,是因特,网上标准的资源的地址。,分词:将一段文字分割成一组符合日常用语的词语。类别词:对网页分类起作用的关键词。,布尔查询:说明各个关键词是否要在查询结果中出现,“+”表示出现,“-”表示不出现。站点查询:只搜索含有 URL 中含有特定字符的网页。,增量抓取:提取原有索引中的 URL,利用这些 URL 抓取更多的新网页或者是修改过的网页,并将这些网页加入到索引中。,B/S 模型:浏览器/服务器模型,用户只需要通过浏览器与服务器进行交互,不用下载安装客户端软件。,API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是,提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节1。,Hash:把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。搜索建议:在用户输入关键字时,系统预联想以关键字为前缀的词语,方面用户补全关键词。,6.功能需求详述,a)利益相关者(stakeholders),提供站内搜索引擎服务的网站所有者,b)角色(Actors)和目标(Goals),在本系统中角色主要是一般用户(通过 web 来使用站内搜索服务),类型是参与者,主,。,要参与系统功能需求描述和系统测试。另外一个角色是网站管理员,管理员负责将开发好的系统部署到网站上,配置搜索引擎所需配置文件,并监控和维护系统运行。c)用例(Use Cases),i.ii.,简要描述用户输入关键词查询:用户选择一个分类搜索(如网页搜索)后,在搜索框中输入关键字,关键字可以有多种格式,如使用引号括起关键字。系统对不同格式的关键字有不同的处理方式。管理员建立索引文件:管理员通过配置网络爬虫各项参数,中文分词插件,各类文件解析器以及索引合并参数来建立索引文件,提供后续搜索服务的底层支持。管理员配置搜索服务:管理员配置搜索服务运行时所需的主要参数,摘要长度是对搜索结果的简要说明。每页的结果数代表在每页中出现的搜索结果条目数。分类搜索对应的索引文件用来建立分类标签与分类索引文件的映射。用户分类检索:针对不同的用户需求,提供不同的标签,用户可以选择搜索网页、搜索院内人员信息、搜索招生或者科研信息,这样可以使结果更具有领域相关性和准确性。用户搜索建议:用户在输入关键字的同时,可以获知出现该关键字的搜索结果数目,及以该关键字开头的且在索引中出现的关键词。完整描述,用户输入关键词查询:1、普通多关键词查询:只输入关键词,关键词之间不用空格隔开,表示采用系统默认分词方式分隔关键词;用空格隔开表示按照用户指定的分词方式分词。2、精确查询:输入带有引号的关键词,如“Chinese Academy of Sciences”,表示精确匹配引号内的关键词,引号内的关键词不被分词。3、大小写不敏感查询:输入的英文单词不区分大小写,如“Beijing”等同于“beijing”4、布尔查询:在关键词前面加上“+”表示出现搜索结果要出现关键词,加上“-”表示不出现关键词5、站点查询:在域名前加上“url:”表示只搜索在该域名下出现的网页。例如 url:表示只搜索 url 中出现 的网页。管理员建立索引文件:,1、设置爬虫各项参数:设置 url 过滤策略:通过定义网络爬虫抓取网页的 url 过滤策略来限制爬取网页的类型,其语法与正则表达式大致相同,以”+”表示接受后面定义的地址类型,”-”表示拒绝。如果只想让爬虫抓取 url 中含有 的网页,可如下定义:+http:/.*url 设置:起始 url 地址是让爬虫从该地址开始抓取网页并处理信息。如可从以下地址开始抓取:http:/建立中文分词插件:利用 ICTCLAS 的中文分词器,制作成插件。在对文本内容进行解析时,调用中文分词插件。3、配置不同类型文件解析器:不同类型的文件解析方法不同,使用的解析器也不同。如 doc、pdf 由于采用文本格式与 txt 不同,而索引文件能处理的文本格式与 txt 相同。因此,需要配置不同类型文件的解析器来提取或转化文本。4、合并优化索引文件:设定每个文档的最大字段数和设定合并因子等配置信息,在索引文件增大到一定程度时,进行合并优化,功能类似于对普通文件的压缩。合并后的索引文件仍能保证索引的完整和正确性。管理员配置搜索服务:1、设置搜索结果摘要长度:搜索结果摘要是指对返回结果中一个条目的简要说明。摘要来自关键字在网页中的上下文。通过设置搜索结果摘要长度,可以控制对返回结果描述的完整性。2、设置每页返回结果数:由于大部分用户只对搜索结果第一页返回的内容感兴趣,因此可以根据用户需求设置每页返回的结果数,其他结果通过下一页的方式来访问。3、设置分类搜索对应的索引文件:不同的标签对应不同的索引文件。如:人员标签对应只包含人员信息的索引文件。用户选择人员搜索时,只能在人员索引文件下进行查询。,用户分类检索,搜索引擎提供分类检索功能,其中有首页有 4 个标签,分别为:网页、人员、招生、科研。不同的标签提供更为详细和准确的搜索结果。1、网页检索:与“用户输入关键词查询”的用例一致。2、人员检索:检索中科院内相关人员介绍和与该人员相关的网页信息。3、招生检索:检索最新和历史招生信息,招生信息来自中科院研究生院的各个院系和中科院所属的各个研究所。,iii.,4、科研检索:主要检索最新的科研进展和状态新闻,以及目前承担的项目和发表的论文等信息。,用户搜索建议,用户在输入关键字时,系统自动匹配到以关键字开头的且在索引中出现的关键字信息。该信息包含索引中关键字本身以及关键字在索引中对应的索引结果数。这样可以方便用户选择搜索结果数比较多的关键字进行查询。用例图(Use Case Diagram)普通多关键词查询,精确关键词查询,一般用户,关键词查询,大小写不敏感查询,布尔查询,站点查询图 1 用户查询用例图,设置爬虫各项参数,建立搜索引擎索引文件,建立中文分词插件,管理员,配置不同类型文件解析器,合并优化索引文件图 2 管理员建立索引文件用例图设置搜索结果摘要长度,配置搜索服务,设置每页返回的搜索结果条目数,管理员设置分类搜索对应的索引文件图 3 管理员配置搜索服务,检索人员信息建立类别词典,一般用户,检索招生信息,网页分类,获取网页特征信息检索科研信息图 4 用户分类检索图读取索引文件,获取搜索建议,统计词频,一般用户关键词前缀匹配图 5 用户搜索建议图,d)系统序列图(System Sequence Diagrams)系统序列图,一般用户,管理员,:Configure,:Crawler,:Index,:Search,setConf()crawlWebPage()genIndex()indexReadysearchInputWords()searchInIndexsortResult()sortedResults图 6 系统序列图7.非功能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,系统应该满足以下的性能需求:系统的易用性和易维护性搜索引擎直接面对终端客户,这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。另外,系统要提供方便的手段供系统维护人员进行日常的管理。系统的开放性和可扩充性本项目在开发过程中,应充分考虑以后的可扩充性。例如对于 doc、pdf 文件的解析处理等工作是要不断完善和更新的。这些要求系统提供足够的手段进行功能调整和扩充。而要实现这一点,应通过系统的开放性来完成,即系统应是一个开放系统,可以通过简单的加入和减少系统的模块来更新系统,而不必在原有系统上大费周折。,系统的响应速度响应速度指用户检索时提交关键字后等待系统回复的时间。用户提交检索内容后,系统应尽快匹配查找,返回相关内容,响应速度是搜索引擎系统的一个重要性能指标。系统的检索质量检索质量指用户期望检索内容与系统实际返回内容的匹配程度。搜索引擎系统作为帮助用户查找特定信息的工具,检索质量直接反应了搜索引擎的实用性程度,是考量一个搜索引擎系统的重要标准。,系统的健壮性,对于用户不规范的操作,系统应提供足够的容错能力,在最大程度上不影响用户正常使用。对于系统运行过程中自身产生的错误,应保留相关错误信息以供后续的修改维护工作。系统的查全率和查准率查全率和查准率是考虑评价网页自动分类算法需要两个重要指标:查全率指通过分类算法被正确分类的文本数目与未分类文本前属于该类的文本数总数的比率,查准率为通过分类算法被正确分类的文本数目与通过分类算法被分为该类的文本数目的比率。8.领域分析,爬虫爬取策略,爬虫的工作策略一般则可以分为累积式抓取(cumulative crawling)和增量式抓取(incremental crawling)两种。累积式抓取是指从某一个时间点开始,通过遍历的方式抓取系统所能允许存储和处理的所有网页。在理想的软硬件环境下,经过足够的运行时间,累积式抓取的策略可以保证抓取到相当规模的网页集合。但由于 Web 数据的动态特性,集合中网页的被抓取时间点是不同的,页面被更新的情况也不同,因此累积式抓取到的网页集合事实上并无法与真实环境中的网络数据保持一致。增量式抓取是指在具有一定量规模的网络页面集合的基础上,采用更新数据的方式选取已有集合中的过时网页进行抓取,以保证所抓取到的数据与真实网络数据足够接近。进行增量式抓取的前提是,系统已经抓取了足够数量的网络页面,并具有这些页面被抓取的时间信息。一般地,累积式抓取一般用于数据集合的整体建立或大规模更新阶段;而增量式抓取则主要针对数据集合的日常维护与即时更新。在确定了抓取策略之后,如何从充分利用网络带宽,合理确定网页数据更新的时间点就成了网络蜘蛛运行策略中的核心问题。总体而言,在合理利用软硬件资源进行针对网络数据的即时抓取方面,已经形成了相对比较成熟的技术和实用性解决方案,这方面目前所需解决的主要问题,是如何更好的处理动态网络数据问题(如数量越来越庞大的 Web2.0 数据等),以及更好的根据网页质量修正抓取策略的问题。,建立初始 URL 集合分析初始 URL 集的建立有两种方式:超链接和站长提交。超链接是指机器人程序根据网页链到其他网页中的超链接,从少数几个网页开始,连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超链接,机器人便可以遍历绝大部分网页。站长提交是指在实际运行中,爬虫不可能抓取到所有站点,为此,网站站长可以向搜索引擎进行提交,要求收录,搜索引擎经过核查之后,便将该网站加入到 URL 集合中,进行抓取。,爬取过程,在爬取过程中,要维护一个爬取链接数据库,该库中存有等待爬取的链接信息。Inject 操作:爬虫将 URL 集合进行格式化和过滤,消除其中的非法 URL,并设定 URL状态,按照一定方法把 URL 集合进行初始化分值。期间,要将某些 URL 进行合并,以消除重复的 URL 入口。当有新的 URL 信息时,将其状态等信息存入爬取链接数据库,与原数据库中重复的则删除旧数据,更换为新数据。Generate 操作:该操作从抓取链接数据库中将 URL 取出并进行过滤;通过域名、链接数等信息对 URL 进行排序;将排序后抓取列表信息保存。Fetch 操作:该操作按照抓取列表进行链接抓取,在抓取过程中,页面的 URL 地址肯能因为链接发生改变,则需要更新 URL 地址;可采用多线程方式提高抓取速度;抓取过程中调用parse 操作。Parse 操作:该操作解析 fetch 得到的页面并进行整理,将页面信息按照页面的主题、链接等信息和页面的文本内容分别保存。Updatedb 操作:该操作根据 parse 操作保存的内容,对抓取链接数据库进行更新,增加新的URL,更换旧的 URL。,索引过程分析,在索引之前,首先将数据转换成纯文本格式,这就要求系统能够对 html 文件以外的文件进行解析,如 doc 文件、pdf 文件等。格式转换后,还需要进行预处理,对数据进行分析使之更加适合被索引。分析数据时,先将文本数据分成一些大块的字符流,然后对它们执行一些操作,如去掉一些无实际意义的词(停止词),而后对数据进行分词操作。分词在索引和搜索时都会用到。对输入的数据处理完成之后,就可以把结果采用“倒排索引”的方式写入到索引文件中。,分词技术分析,信息检索的基础是对文本的分析。对文本分析的最主要的处理就是能够对完整的语句进行分词。分词,即将一段文本拆分成多个词单元。在建立索引的时候,写入索引并能够被用户检索的是一个个的词条,所谓词条即通过分词处理后的文本。因此对于用户的检索输入也需要进行分词,这样可以让信息检索系统更贴切的理解用户的检索请求,进而为其搜索相关,内容。对于中文分词,有以下一些处理方法。单字分词:将中文语句划分成一个字来处理。双字分词:将中文语句划分成两两的词语来处理。词库分词:基于一些已知词汇对中文语句进行断句分词处理。本 项 目 采 用 中 科 院 计 算 所 的 汉 语 词 法 分 析 系 统 imdict-chinese-analyzer,imdict-chinese-analyzer 是基于 imdict 智能词典的智能中文分词模块,算法基于隐马尔科夫模型,可以直接为 Lucene 搜索引擎提供中文分词支持。,网页排序,用户提交检索请求后,服务器将以一定次序返回与用户请求匹配的结果,优先将最相关的内容呈现给用户。最简单的一种排序方式为相关度排序。所谓相关度,就是文档的得分。Lucene 计算文档得分的方法如下:score=sum(tf(t in d)*idf(t)*boost(t.field in d)*lengthNorm(t.field in d)其中 score 表示文档得分,sum 表示对于每个词条的求和,t 表示词条,d 表示用户检索关键字,tf(t in d)表示检索的词条在某个文档中总共出现的次数,idf(t)表示反转文档频率,通过包括当前检索的词条的文档总数与索引中总共的文档数量的比值计算,boost(t.field in d)表示词条的激励因子,一般默认为 1,lengthNorm(t.field in d)表示词条的长度。Nutch 使用了 OPIC 作为默认的 URL 调度策略,但是当前版本的 OPIC 实现与 Abiteboul在论文提出的 OPIC 并不完全相同,具体表现为:Nutch 中并没有区分当前页面的 cash 和在计算过程中页面 i 累计收到的 cash 的总数,使用score 一个变量记录页面累积的分数,在分配过程中也是将这个累积的分数全部平均分配给子页面,分配完毕后分数也并不清零2。Nutch 中并没有 virtual root page,也就是说叶子页面(即没有 outlink 的页面)的分数将会丢失。另一方面,Nutch 的排序算法针对的是 Internet 上大量网页的情况,而对于像站内搜索这种页面内容重复度小、某些常用关键词(如:中科院)在各个网页出现频率较高,以至于可以降低这个关键词的权值的情况,需要对算法进行相应修改。9.交互图(协作图)a)完整交互图,用户基本查询,:QueryAnalyzer,:GeneralQuery,:PreciseQuery,BoolQuery,siteQuery,一般用户KeyWordwordAnalyze,optoptoptopt,GeneralWordquotationmultiWordscontainUrl,generQuery()preciseQuery()boolQuery()siteQuery(),图 7 用户查询协作图管理员建立索引文件,:CrawlConf,:ChineseAnalyzer,:parserPlugin,:MergeConf,管理员configureCrawl()succeedaddChineseAnalyzer()addParsePlugin()setMergeArguments()done,图 8 管理员建立索引文件协作图管理员配置搜索服务,:Summary,:PageResultNum,:IndexDir,管理员setSummaryLength()setPageResultNum()setGeneralIndexDir()setPeopleIndexDir()setResearchIndexDir()setAdmissionIndexDir()图 9 管理员配置搜索服务协作图,用户分类检索,personSearch,admission,research,classification,Dictionary,pageFeature,管理员inputKeywordclassifyPage()searchDict()dictionaryIndexserachFeature(),sortedPageAs same as aboveAs same as above用户搜索建议,classifieddPage图 10 用户分类检索协作图,pageMetaInfo,:SearchSuggestion,:Term,:TermFrequency,一般用户getSuggestion()searchTermStartWithWord()getTermFrequency()returnTermAndFrequency()wordSuggestion图 11 用户搜索建议协作图b)对象责任分配原则,。,1、信息专家模式3,将职责分配给拥有履行一个职责所必需信息的类,即信息专家。(也就是将职责分配给,一个类,这个类必须拥有履行这个职责所需要的信息。)2、创建者模式,如果符合下面的一个或多个条件,则将创建类 A 实例的职责分配给类 B.,类 B 聚合类 A 的对象。类 B 包含类 A 的对象。,类 B 记录类 A 对象的实例。,类 B 密切使用类 A 的对象。,类 B 初始化数据并在创建类 A 的实例时传递给类 A(类 B 是创建类 A 实例的一个,专家)。,在以上情况下,类 B 是类 A 对象的创建者。,3、控制器模式,当类代表下列一种情况时,为它分配处理系统事件消息的职责。,代表整个系统、设备或子系统(外观控制器)。,代表系统事件发生的用例场景(用例或回话控制器),4、低耦合,分配职责时使(不必要的)耦合保持为最低。,5、高内聚,分配职责时使内聚保持为最高。,6、多态模式,当类型变化导致另一个行为或导致行为变化时,应用多态操作将行为的职责分配到引起,行为变化的类型。7、纯虚构模式,将一组高内聚的职责分配给一个虚构的或处理方便的“行为”类,它并不是问题域中的,概念,而是虚构的事务,以达到支持高内聚、低耦合和重用的目的。8、中介模式,分配职责给中间对象以协调组件或服务之间的操作,使得它们不直接耦合。,9、受保护变化模式,找出预计有变化或不稳定的元素,为其创建稳定的“接口”而分配职责。,10.类图和接口规范,a)类图,0.*,-,-,-,-,-,+,+,+,+,+,QueryAnalyzer+wordAnalyze():String+generQuery():Query0.1Query+query():ResultsGeneralQuery-keyWord:String+generQuery():Results,BoolQuery-keyWord:String+boolQuery():Results,SiteQuery-url:String+siteQuery():Results,PreciseQuery-keyWord:String+preciseQuery():ResultsResult,title,:String,Results,content:Stringdate:Date,-resultList:ArrayList+getResult():Result+next():Result,0.1,0.*,url:Stringanchor:StringgetTitle():StringgetContent():StringgetDate():DategetUrl():String,getAnchor():String图 12 用户查询模块类图ChineseAnalyzer,+tokenStream(),:TokenStream,+getPositionIncrementGap():void,TokenStream,Token,+close():void+next():Token+reset():void,+0.*+,Token()termText():StringsetTermText():voidsetPostitionIncrement():void,0.1,Tokenizer,TokenFilter,#Tokenizer()+close(),:void,#TokenFilter()+close(),:void,-,-,-,-,-,+,+,+,+,+,-,-,-,:,+,+,+,-,-,-,+,+,-,-,+,+,+,+,+,-,+,+,+,+,-,-,-,-,-,-,+,+,+,+,-,+,+,+,+,+,图 13 中文分词解析器类图CrawlConfstartURL:StringindexDir:String,depth,:int,totalPage:int,threads,:int,setStartUrl():voidsetIndexDir():void,ParsePlugin,setDepth(),:void,setTotalPage():void,+addParsePlugin():void,setThreads(),:void,crawlInfo,Crawl:CrawConf,MergeConf,parsePlugin:,ParsePlugin,mergeConf,MergeConf,+setMergeIndexNum(),:void,crawl()parse()mergeIndex(),:void:void:void,+setMergeIndexFactor():void,图 14 爬虫抓取与索引建立类图IndexDir,DirectoryindexDIr:IndexDIrgetDirectory():FSDirectorysync():void,generIndexPath:StringadmisIndexPath:StringpeopIndexPath:StringresearIndexPath:String,getFile(),:File,setGenerIndexDir():voidsetAdmisIndexDir():voidsetPeopIndexDir():voidsetResearIndexDir():void,IndexSearcher,Results,directory:Directoryintsearch():ResultsdocFreq():intmaxDoc():intdoc():Document,0.10.*,-resultList:ArrayList+getResult():Result+next():Result,Summary,Document+add():void+getField():Field+getFields():ListField,Resulttitle:Stringcontent:Stringdate:Dateurl:Stringanchor:StringgetTitle():StringgetContent():String,summaryLength:intsummary:StringsetSummaryLength():voidgetSummaryLength():intgetSummary():StringsetSummary():void,+Index+Store,:class:class,getDate()getUrl(),:Date:String,+TermVector:class,getAnchor():String,-,-,+,+,+,+,图 15 查询结果类图Classification+classifyPage():void+getSearcher():Searcher0.10.*Searcher,+searchDict(),:String,+searcherFeature():String,+search(),:Results,PersonSearcher,AdmisSearcher,ResearSearcher,图 16 分类查询类图SearchSuggestion+getSuggestion():TermFrequencyTerm-termFreqMap:Map+searchTermStartWithWord():TermFrequencyTermFrequency-termFreqList:List+getTermFrequency():TermFrequency0.10.*WordAndFrequency,keyWord,:String,frequency:int,setKeyWord(),:void,setFrequency():void,getKeyWord(),:String,getFrequency():int图 17 搜索建议类图,b)数据类型和操作签名1、用户查询类图签名,类名QueryGeneralQueryPreciseQueryBoolQuerySiteQueryResultsResultsResultResultResultResultResult,方法名QuerygenerQuerypreciseQueryboolQuerysiteQuerygetResultsnextgetTitlegetContentgetDategetUrlgetAnchor,参数String keywordString keywordString keywordString keywordString keywordnullnullnullnullnullnullnull,返回值ResultsResultsResultsResultsResultsResultResultStringStringDateStringString,2、中文分词解析器类图签名,类名ChineseAnalyzer,方法名tokenStream,参数String fieldname,返回值TokenStream,Reader reader,ChineseAnalyzerTokenStreamTokenStreamTokenStreamTokenTokenTokenTokenizerTokenFilter,getPositionIncrementGapclosenextresettermTextsetTermTextsetPositionIncrementcloseclose,String fieldNamenullnullnullnullString textint incrementnullnull,voidvoidTokenvoidStringvoidvoidvoidvoid,3、爬虫抓取与索引建立类图签名,类名CrawlConfCrawlConfCrawlConfCrawlConfCrawlConfCrawlCrawlCrawlParsePluginMergeConfMergeConf,方法名setStartUrlsetIndexDirsetDepthsestTotalPagesetThreadscrawlparsemergeIndexaddParsePluginsetMergeIndexNumsetMergeIndexFactor,参数String urlString fieldNameString depthString totalPageString threadsCrawlConf confParsePlugin pluginMergeConf confString pluginint numberInt factor,返回值TokenStreamvoidvoidvoidvoidvoidvoidvoidvoidvoidvoid,4、查询结果类图签名,类名DirectoryDirectoryDirectoryIndexSearcherIndexSearcherIndexSearcherIndexSearcherDocumentDocumentDocumentSummarySummarySummarySummary,方法名getDirectorySyncgetFilesearchdocFreqmaxDocdocaddgetFieldgetFieldssetSummaryLengthgetSummaryLengthgetSummarysetSummary,参数nullnullnullQuery querynullnullInt docIdnullnullnullint lengthnullnullString summary