




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)题目聚焦搜索引擎的设计与开发查询系统设计与实现
前言随着Internet的迅速发展,人们的工作、学习和生活都已经离不开网络,网上信息正以爆炸性的速度增长,其资源内容几乎涉及所有领域,已经成为知识、信息的集合体,是人们获取信息的基本工具。发展到现在,我们可以通过计算机在网上进行点餐、逛街、娱乐、购物、聊天等等,这些都是面对个人层面而言的计算机技术所带来的便利。对企业而言,许多公司都有着属于自己的网站用来介绍公司信息以及产品介绍,或者公司的业务也会放在网站上以便与其它公司进行合作。总而言之,网络的迅猛发展给社会带来了极大的便利。在Internet网上进行浏览和搜索自己想要的资讯,就好比进入了世界上最大的图书馆,而这个图书馆里的书刊、杂志、广告、新闻及各种形式的文献信息全都没有规律地排放着,没有1个中心目录将这些信息组织起来。正是因为Internet资源既丰富又分散且处于无序状态,使得人们在网上查找自己所需的信息并非易事。这时为满足人众信息检索的需求,搜索引擎便应运而生。搜索引擎是指使用某些自动索引软件来发现、收集网络上的信息,然后对收集的网页进行标引,建立1个可供查询的大型数据库。开发搜索引擎便是解决用户对网络上杂乱无章的信息进行筛选得出用户想要的信息的当下的最好办法。
本篇论文中开发的中文搜索引擎的原理为:首先是用爬虫进行全网搜索,抓取网页;然后将抓取到的网页进行索引,同时也会记录该网页相关的属性;最后后台获取前台的查询请求并调用中科院ICTCLA2013进行分词提取关键字,然后运用关键字检索索引文件并按照各种参数进行复杂的计算,产生结果并返回给用户。此搜索引擎的功能为:在页面上可显示当地的天气情况,包括本地温度、PM2.5、污染情况、地理位置、天气信息;显示当日的热点新闻,即热搜榜;将新闻的种类进行分类(“热点”、“推荐”、“社会”……),用户可根据类别查看自己喜欢的新闻;用户可在页面上的输入框输入自己想要查询的问题并得到解答。结合当下,各种搜索引擎的出现,流氓插件的盛行,大多搜索引擎包含了大多用户不需要的功能,导致加载缓慢,而此系统的推出,能在一定程度上满足用户快速的查询的问题。
目录 摘要 第1章绪论1.1引言本章首先介绍课题研究背景、聚焦搜索系统相关研究现状,然后阐述本文主要研究内容和组织结构设计。1.2什么是搜索引擎搜索引擎[1]的英文为SearchEngine。搜索引擎是一个对互联网信息资源进行搜索整理和分类,并储存在网络数据库中供用户查询的系统,包括信息搜集、信息分类、用户查询三部分。从使用者的角度看,搜索引擎提供一个包含搜索框的页面,在搜索框输入词语,通过浏览器提交给搜索引擎后,搜索引擎就会返回跟用户输入的内容相关的信息列表。其实,搜索引擎涉及多领域的理论和技术:数字图书馆、数据库、信息检索、信息提取、人工智能、机器学习、自然语言处理、计算机语言学、统计数据分析、数据挖掘、计算机网络、分布式处理等,具有综合性和挑战性。搜索引擎的用途,对普通网民而言,搜索引擎则仅仅是一种查询工具,作为工具,使用者要了解搜索引擎的功用、性能,探讨并掌握其使用方法和技巧。对商家来说,搜索引擎是一种赢利的产品或服务,而作为产品,搜索引擎商要研制、改进和创新其搜索技术;作为服务,搜索引擎营销商要研究搜索引擎优化和推广。利用搜索引擎的目的不同,构成了搜索引擎研究的不同群体和对搜索引擎不同角度不同侧重的研究。1.3聚焦搜索引擎提出的背景如今,在信息爆炸的互联网时代,人们如何在海量的互联网信息资源中尽快找到自己真正想要的信息?人们当然会选择网络搜索服务。伴随着互联网的不断发展和网络信息资源的爆炸性式的增长,网络搜索已经成为人们从互联网“海量”信息中获得有效信息十分便捷的途径,成为仅次于电子邮件的最成功的业务应用。面对搜索引擎这块金矿,诸如Google、百度、雅虎等互联网巨头纷纷跑马圈地,相继推出了音乐、图片、新闻、本地搜索等服务。作为互联网搜索技术与移动通信技术相结合的产物,近两年来,移动搜索技术在日益走向成熟,应用前景十分看好。移动搜索服务的最大优势在于它打破了电脑的线缆约束,让用户能通过随身携带的手机即时获取所需的信息。从实际应用的角度看,手机搜索和PC搜索采用的基本原理相似,但手机搜索并不是网络搜索的简单翻版,其不同之处体现在两个方面:首先,PC搜索强调的是“海量”,搜索结果多多益善;而手机屏幕小,因此需要对多余的图片、超级链接、Flash等内容进行过滤,为用户提供最精确、最有价值的内容。其次,手机搜索可以随时随地进行,这决定了搜索内容和搜索过程具有更强的人性化色彩。从全球来看,近三年来,诸如Google、雅虎等传统互联网搜索引擎提供商加快进军移动搜索领域,相继推出了基于短信和WAP的移动搜索引擎,开始提供移动搜索服务。从欧洲到北美和亚洲,一些主流的移动运营商也逐步推出了移动搜索服务。移动搜索已经成移动运营商大理推广的热点业务应用。移动搜索市场发展迅速,随着移动搜索逐渐走出市场培育期以及未来4G商用带来的增值应用的丰富,移动和互联网融合的发展趋势注定了移动搜索是未来的发展方向,而且这个搜索技术的出现已经开始引发一场新的竞争硝烟。1.3.1国内外的研究现状随着互联网技术的快速发展,我们可以在网络中获取自己想要的信息,但与此同时,面对浩瀚无边的信息也给我们带来了困扰,我们往往不能精确地、快速的定位信息,即遭受着“信息过载”和“信息迷航”的困扰。在这样的背景下,聚焦搜索引擎应运而生,且聚焦搜索引擎的研究热点正逐渐由过去的通用搜索引擎向聚焦搜索引擎转变。聚焦搜索引擎技术最先是在国外开始进行研究和应用的。目前,聚焦搜索引擎已经得到了广泛的研究和应用,涉及到很多领域,例如:购物、旅游、求职等领域,较为有代表性的聚焦搜索引擎有:(1)伯克利大学(Berkeley)的FocusedProject系统是由科学家S.Charkrabarti带头从事开发的。其主要是通过两个程序来指导主题网络蜘蛛工作,一个程序是专门用来计算下载的网页文档与预定主题的相关程度,这个程序叫做主题分类器(Classifier);另一个程序是用来确定哪些链接指向了主题相关的网页信息,这个程序称之为净化器(Distiller)。(2)美国国家科学数字图书馆的CBP(即CollectionBuildingProgram),这个项目的目的是为科学、技术、数学和工程建设一个超大规模的在线数字图书馆,并试图研究在某一主题领域上信息资源自动建设的可能性。CBP由于只面向教学和教育,因而,它具有主题精确度高的特点,同时,其只提供URL并不存储资源原文。该系统还可以根据少量的输入自动将有限数量的与该主题最相关的URL列表返回给用户。(3)Elsevier公司的Scirus系统,Scirus是一个面向科学领域的聚焦搜索引擎,其搜索出来的科学信息具有较高主题相关度。目前,Scirus系统被认为是互联网上综合性最强且最全面的科技文献门户网站,它只检索有关科学内容的网站,且过滤掉与科学无关的信息,将与科学内容相关的信息呈现给用户。(4)LIBClient-IRISWeb,该系统由TheAmericanAssociationofLawLibraries(AALL)在1997年2月发布,是美国北卡罗莱纳州大学信息与图书学院的BertDempsey和南卡罗莱纳州法学院的RobertVreeland共同开发的一个在互联网上专门搜索与法律相关的信息系统。该系统很大幅度提高了法律工作者在互联网上搜索与法律相关的专业信息的效率。(5)经济类专业搜索引擎(WallStreetResearchNetwork),该搜索引擎是由美国WSRN公司开发的,其主要用于检索工商企业、投资中介商、市场新闻、经济研究以及经济研究出版物等各类与经济财经类相关的信息。(6)Zillow是于2006年开发的服务于房地产领域的搜索引擎,是为房产拥有者、房产买卖方、租赁者、房产经纪人等提供的一个虚拟的信息平台。这些用户可以通过Zillow来搜索了解当地房地产相关信息。国外技术相对先进,很早就有了比较成熟的产品,国内技术相对落后,但是近年来随着对搜索技术的不断探索,涌现出了很多可喜的成果,具有代表性的面向特定主题的聚焦搜索引擎系统主要有以下一些应用。①赛迪网的“IT罗盘”是国内最具有代表性聚焦搜索引擎,目前收录了2万多条IT网址和数百万IT网页数据,涵盖了IT领域的绝大多数网络信息资源。赛迪“IT罗盘”为用户提供经过人工处理和筛选的网页搜索服务,其网站目录也都经过人工分类和整理,收录了大量经过严格过滤和人工加工的网站。其有很多优点:分类精确合理,查询便捷;使用人性化的设计,为用户提供开放的接口;支持包括GBK、GB2312、BIG5等主流的中文编码标准,并且可以在不同的编码之间进行转换;支持布尔逻辑搜索模式;搜索速度快,平均响应时间低于0.15秒。②奇虎问答主要专注于BBS信息领域,其独创的社区搜索技术(PeopleRank)主要用来抓取和识别论坛和博客中的信息,最终以利于人们阅读的方式展现给搜索用户。基于这一强大的社区搜索技术,目前,奇虎问答已成为国内答案数量最多最全的问答网站。③酷讯搜索是专业的旅游搜索引擎,专注于为国内旅行者提供机票、火车票、酒店、旅游和度假等领域的搜索服务。酷讯搜索采用领先的数据挖掘和智能推荐等技术,对海量旅行产品数据进行实时整合、辨识以及处理,为旅行者提供最新最准确的旅行产品价格和相关信息,以达到可以帮助旅行者对旅行产品进行高效地比较,并选择适合自己的旅行产品的目的。酷讯最初只专注于火车票领域的搜索服务,与百度、谷歌等通用搜索引擎不同,是一款以实时的生活信息为搜索对象的聚焦搜索引擎,能够对全部航空公司官方网站进行实时搜索,目前,其搜索范围已超过2000家专业机票、火车票、酒店、以及度假产品等供应商网站,用户可以一站式获取全面的旅游产品相关信息。目前,酷讯搜索月访问记录已突破5,500万。④房老大是2006年5月正式上线的中国首个房地产行业的聚焦搜索引擎。其搜集了100个城市的房源信息,包括新房、别墅、二手房、写字楼、租房、商铺以及厂房等七种不同的房源信息。由于全部房源信息都是由房源供应方进行填写,信息内容包含地理位置、面积、户型、价格等基本信息,因而,其搜索结果与通用的搜索引擎相比,房老大的搜索结果更精确、实用、全面,搜索用户可以在短时间内查找到自己想要的真实房源信息。⑤“去哪儿”是2005年5月上线的全球最大的中文旅行平台,且是目前旅游行业被人们所熟知的聚焦搜索引擎代表。其通过网站及移动客户端的全平台覆盖,随时随地为游客提供国内外机票、旅游团购、度假、酒店和旅行等信息的聚焦搜索,帮助他们找到性价比最高的旅行产品和最优质的信息,聪明地安排旅行。凭借其便捷、先进的智能搜索技术对互联网上的旅行信息进行整合,为用户提供实时、可靠、全面的旅游产品查询和信息比较服务。综上,尽管国内的聚焦搜索引擎发展速度相对较快,但与国外相比,在数据挖掘、信息共享、开放接口等技术层面以及行业经验上都还存在着很多差距,从而阻碍了聚焦搜索引擎的快速发展,而且中文词汇组合变化是非常复杂的,也在一定程度上限制了中文搜索引擎的发展速度,因此,国内的聚焦搜索引擎的发展潜力是很大的,存在着很大的发展空间。1.3.2目前研究工作中存在的问题(1)建立索引是检索的根本,索引技术是检索系统性能的重中之重。不同的数据库存储量都是巨大的,良好的索引对提高检索效率非常的重要,对中文来说尤其如此。但如何建一个最优秀的索引仍是现在研究工作中需要去研究的。(2)相比较英文,英文只有24个字母,但是中文拥有上千个字,就体现到中文索引面临一个分词问题,如何按字按词自动索引,一直是目前情报界与语言界研究的热点,当然最后应该走的还是计算机自动分词之路。其次,如何实现自动跟踪索引,是又一个难题。(3)凡是发布到网上的系统,都会考虑到一个信息安全的问题,在系统处理能力提高的同时,系统的连接能力也在不断的提高。但在连接能力信息、流通能力提高的同时,基于网络连接的安全问题也日益突出,如何保证此系统的网络安全也是研究工作中一大难题。1.4系统开发的意义此次开发的系统是聚焦搜索引擎系统。系统的功能包括:天气查询,新闻查询,用户中文语句查询。所有查询都是系统的前台服务,即面向用户的,方便乘客了解自己想要的信息。对于尚在象牙塔中的莘莘学子,搜索正在悄无声息地改变他们的学习方式。Internet
与全球电信的迅猛发展使信息资源的“生产”“传播”与“消费”出现了新的格局,信息在网络上的传播速度迅速提升,这使得上网用户获取真正有用的信息越来越难,而开发此搜索引擎就能帮助用户解决从目前种类繁多的信息中找到用户真正有用的信息。1.5本文主要研究内容和组织结构本文的主要研究内容是聚焦搜索引擎查询系统的设计、分析和实现情况,主要包括页面的天气查询和新闻分类和用户普通查询方面等内容,并对实现各个功能的模块的技术进行了研究探讨。论文内容按以下结构安排:(1)开发环境和相关技术介绍(第2章)(2)系统需求分析(第3章)(3)查询系统的设计(第4章)(4)系统编码(第5章)(5)测试(第6章)(6)结论与展望(第7章)其中第2章对与课题研究相关的技术作了简要介绍,包括系统开发的集成环境、Servlet技术、JDBC数据库连接技术等,本章是后面各章的铺垫。第3章对于系统进行了完整的需求分析。第4章是系统设计部分,包括系统逻辑思路设计、系统逻辑结构设计、物理结构设计、系统各功能模块设计以及数据库设计。第5章为系统的关键编码。第6章为系统实现后的测试,对系统各个模块和整体进行功能测试。第2章相关技术概述本文研究的聚焦搜索引擎系统基于B/S模式,利用MyEclipse集成开发环境和MySQL数据库管理系统,采用的技术有:JavaServletAPI技术,JDBC数据库连接技术,汉语分词技术。2.1MyEclipse集成开发环境作为一套完整的开发工具集,MyEclipse[4](MyEclipseEnterpriseWorkbench,简称MyEclipse)企业级工作平台是对EclipseIDE的扩展,利用它我们就可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,JavaScript,SQL,Hibernate。在结构上,MyEclipse的特征可以被分为7类:1.J2EE模型2.WEB开发工具3.EJB开发工具4.应用程序服务器的连接器5.J2EE项目部署服务6.数据库服务7.MyEclipse整合帮助对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错,MyEclipse6.0以前版本需先安装Eclipse。MyEclipse6.0以后版本安装时不需安装Eclipse。2.2JDBC数据库连接JDBC[6](JavaDataBaseConnectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。它可向相应数据库发送SQL调用,将Java语言和JDBC结合起来使程序员只须写一遍程序就可以让它在任何平台上运行。Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。JDBC主要做三件事:与数据库建立连接、发送SQL语句并处理结果[10]。2.3ServletServlet是一个服务器端的组件,是J2EE中比较关键的组成部分(其实学到现在J2EE里面的13个标准才接触了3个,他们分别是EJB,Servlet,JSP),Servlet技术的推出扩展了Java语言在服务器端开发的功能,巩固了Java语言在服务器端开发过程中的地位,而且现在使用非常广泛的JSP技术也是基于Servlet的原理,JSP+JavaBeanstalk+Servlet成为实现MVC模式的一种有效的选择。Servlet本质上也是Java类,编写Servlet需要遵循java的基本语法,但是与一般的Java类不同的是Servlet是只能运行在服务器端的Java类,而且必须遵循特殊的规范,在运行过程中有自己的生命周期,这些特性都是Servlet所独有的。另外Servlet和HTTP协议是紧密联系的,所以使用Servlet几乎可以处理HTTP协议所有方面的内容,这也正是Servlet受到开发人员青睐的最大原因。Servlet是对支持Java的服务器的一般扩充。它最常见的用途是扩展Web服务器,提供非常安全的、可移植的、易于使用的CGI替代品。它是一种动态加载的模块,为来自Web服务器的请求提供服务。它完全运行在Java虚拟机上。由于它在服务器端运行,因此它不依赖于浏览器的兼容性。Servlet是一种服务器端脚本,它是一个特殊的Java类,继承自HttpServlet,开发中主要用于处理和响应客户端的请求。Servlet在容器中运行,其实例的和销毁创建由容器进行控制。每个Servlet的运行都拥有生命周期:首先,(1)(容器)创建Servlet实例。然后,init(初始化,显示相关Servlet实例信息)。再是,Service(处理和响应请求)。最后,destroy(销毁,释放资源)[9]。2.4MySQLMySQL[5]是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.对于Mysql的前途,没有任何人抱乐观的态度.目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。与其他的大型数据库例如Oracle、DB2、SQLServer等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQLCluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本[5]。本系统中用的是MySQL5.6.24版本。2.5汉语分词NLPIR汉语分词系统(又名ICTCLAS2013),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取;张华平博士先后倾力打造十余年,内核升级10次。在各位ICTCLAS用户强烈的要求下,张华平博士正式发布ICTCLAS2013版本,为了与以前工作进行大的区隔,并推广NLPIR自然语言处理与信息检索共享平台,从本版本开始,系统名称调整为NLPIR汉语分词系统。张博士先后倾力打造十余年,内核升级10次,全球用户突破20万,先后获得了2010年钱伟长中文信息处理科学技术奖一等奖,2003年国际SIGHAN分词大赛综合第一名,2002年国内973评测综合第一名。NLPIR汉语分词系统(又名ICTCLAS2013),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取;全球用户突破20万,先后获得了2010年钱伟长中文信息处理科学技术奖一等奖,2003年国际SIGHAN分词大赛综合第一名,2002年国内973评测综合第一名。本系统需要对用户输入的查询语句进行分词,所以采用了网上免费提供的中科院分词系统,本系统使用的版本为:2013年UTF8编码版。2.6开放API平台API[8](ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用。对外提供的API调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值。开放是目前的发展趋势,越来越多的产品走向开放。目前的网站不能靠限制用户离开来留住用户,开放的架构反而更增加了用户的粘性。在Web2.0的浪潮到来之前,开放的API甚至源代码主要体现在桌面应用上,而现在越来越多的Web应用面向开发者开放了API。具备分享、标准、去中心化、开放、模块化的Web2.0站点,在为使用者带来价值的同时,更希望通过开放的API来让站点提供的服务拥有更大的用户群和服务访问数量。站点在推出基于开放API标准的产品和服务后,无需花费力气做大量的市场推广,只要提供的服务或应用出色易用,其他站点就会主动将开放API提供的服务整合到自己的应用之中。同时,这种整合API带来的服务应用,也会激发更多富有创意的应用产生。为了对外提供统一的API接口,需要对开发者开放资源调用API的站点提供开放统一的API接口环境,来帮助使用者访问站点的功能和资源[9]。当然,开放API的站点为第三方的开发者提供良好的社区支持也是很有意义的,这有助于吸引更多的技术人员参与到开放的开发平台中,并开发出更为有趣的第三方应用。本系统的天气模块调用的是百度APISTORE里提供的天气信息与PM2.5与城市名开放平台。第3章系统需求分析3.1用户需求分析用户需求分析分为两个方面,一个是搜索词分析,另外一个是用户搜索意图分析,通过搜索词的分析可以返回一个可能是用户需求的结果列表,通过用户搜索意图的分析并对搜索结果进行调整,可以获得此用户更加想要的结果列表。3.2系统可行性分析在开发一个系统时,需要对可行性进行分析。可行性分析可从环境可行、经济可行、技术可行3方面进行分析。通过方方面面的分析,得出开发此系统的难度几何,开发出来后有没有市场。若是没有进行可行性分析就匆匆地进行开发,可能导致大问题。如:开发完系统,并在调试通过正式投入使用后,却发现用户对系统的需求并不大,根本用不到开发的系统,导致系统被淘汰,这样既浪费时间又浪费人力。又如:系统的市场着实存在,人们对系统的需求大,但是却没有考虑到自己的水平、技术能否应对此类系统的开发,在没有进行技术可行性分析就进行开发,导致开发到一般发现自己的水平有限,无法完成系统的开发,结果就是开发出一个半成品,而半成品的实际使用意义几乎为零,毕竟顾客看的只是最后的结果,只看系统的功能如何,使用起来方不方便。顾客并不关心开发人员使用了什么技术。因此若是因为自己的技术不过关而导致系统开发的夭折在顾客看来就是没有完成任务。诸如此类的情况都是浪费时间和人力的表现。由此可见,在真正着手开发系统前,对系统进行可行性分析是相当重要的。3.2.1环境可行性分析搜索引擎是网站建设中针对“用户使用网站的便利性”所提供的必要功能,同时也是“研究网站用户行为的一个有效工具”。高效的站内检索可以让用户快速准确地找到目标信息,从而更有效地促进产品/服务的销售,而且通过对网站访问者搜索行为的深度分析,对于进一步制定更为有效的网络营销策略具有重要价值。所以搜索引擎是利国利民的,在环境上,可行。3.2.2技术可行性分析开发此系统使用的是Java语言,使用到的技术包括HTML,Servlet,JDBC等。对于Java语言方面,本人在校期间主要学习的就是Java语言,基本掌握Java的知识点。而开发网页所用到的技术在毕业实习期间由老师带着进行了学习、巩固,课余时间也从网上下载了相关的视频进行学习,借鉴,对于基础的技术掌握的较为扎实。在本系统中应用到的技术都有一定的掌握,技术层面可以实现。3.2.3经济可行性分析开发本系统使用的工具为MySQL+Tomcat+Myeclipse三种工具。这三种工具全部都是免费的开发工具,只需从网上下载自己所需要的对应的开发的版本,然后进行配置,在配置成功后就可以进行开发。至于人力成本,该系统都是作者与小组成员一起进行开发,都是同学,不存在人力成本超标的情况。综上,开发此系统的成本将是较低的,后期进行再次开发或维护的成本也不会很高。经分析:开发此系统经济方面不存在大问题,可行。第4章查询系统的设计4.1系统设计的指导思想聚焦搜索引擎系统是一个基于B/S模式的应用系统,基于互联网信息的种类多,数量大,数据访问需要时效性,用户使用需要简单性等特点,在开发系统时需要考虑到用户实际应用中的具体情况,便于今后对系统进行扩展,增加功能或进行与其他系统的业务之间的联系。4.2系统逻辑思路设计用例图是指用来帮助开发团队以一种可视化的方式来理解整个系统的功能需求。总的来说,用例图就是软件系统的功能模块,也是项目开发的起点,从这个点开始,设计人员根据需求来设计系统。也只有画好了用例图,才算是真正了解系统,才能真正意义上做出客户希望的系统。对于此系统各个模块的实现,都是按照如下用例图的逻辑来设计,对于用例图的逻辑分析将在本章4.2小节介绍,如图所示:图4.1系统逻辑用例图4.2系统逻辑结构设计聚焦搜索引擎系统作为B/S应用系统,采用的是目前比较流行的三层架构模式来进行开发,即表示层、业务逻辑层、数据访问层。4.2.1表示层表示层,即客户端访问层,是用户在使用系统时进行直观操作的页面,其具体表现为HTML的Web页面。表示层位于最外层(最上层),最接近用户。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。表示层还要负责浏览器端的数据验证和信息安全处理,为用户提供前端安全服务。AJAX异步通信技术的应用使得表示层的功能增强,给用户以更好的界面体验。4.2.2业务逻辑层业务逻辑层主要负责处理表示层和数据访问层的交互,它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候也将业务逻辑层称为领域层。具体来说,由于业务操作的特性,系统中会出现对某个业务规则的反复使用,而在业务逻辑层中封装了各种业务操作类,可以有效地通过接口来实现上层(表现层)对下层(业务逻辑层)的调用,避免前端代码过多影响效率。同时作为中间层来调用数据访问层来进行对数据库增删查改的操作,提高系统性能,减少前端对底层数据库的操作,增加安全性。4.2.3数据访问层数据访问层是系统访问数据库系统的接口,它封装了所有的数据访问操作,向上层的业务逻辑层提供了调用方法,有效的减少了代码冗余,在数据操作过程中简化了开发的复杂度,避免了在客户端对数据库进行操作。4.3系统物理结构设计聚焦搜索引擎系统是一个B/S系统,所以在物理结构上可以分为三个部分:客户端,应用程序服务器和数据库服务器。本系统的具体物理结构如图4.1。图4.2物理结构图终端用户可根据需要选择浏览器,客户端无需安装软件也无需技术维护,相关操作只需在服务器上进行即可。数据库使用MySQL数据库,具有数据存储和管理的功能,提供数据访问。4.4系统功能模块划分聚焦搜索引擎系统分为前台和后台两个子系统,而后台维护子系统主要包括三个模块:天气模块,新闻模块,分词模块。各个模块有不同的功能,用户登录后可以根据需求得到不同的功能体验,如图4.2。图4.3系统功能模块4.4.1天气模块天气信息模块分为通过本地IP地址直接获取本地天气信息和通过输入城市名查询该城市的天气信息。天气信息的内容包括:该地当日的温度、PM2.5、污染情况、地理位置、天气情况、风速、湿度、PM2.5等级、天气发布的时间。获取天气信息的方式为调用百度提供的免费天气开放平台接口,该平台提供了根据IP地质查询IP所属城市名、根据城市名查询天气、根据城市编号查询天气、根据城市名查询PM2.5相关信息。我们判断是否为城市天气查询的依据是:判断用户输入的查询语句中是否有“天气”这个词,如果有则对语句采用中科院分词系统进行分词提取关键字,依个对关键字进行判断是否为城市,如果为城市则查询该城市的天气,如果不是城市则转为普通分词查询。4.4.2业务管理模块在新闻模块中,主要有:页面显示热搜榜,用户根据新闻属性分类新闻,用户根据关键字查询相关新闻、页面根据新闻的类别显示所属新闻。热搜榜的定义为当日用户搜索最多的新闻,在页面上显示九条热搜新闻,在页面上有“换一换”按钮可更换当日的其它九条热搜新闻;分类新闻的定义为根据新闻的属性进行分类并显示在页面上,用户可根据新闻的类别查看自己喜欢的新闻,类别种类例如:热点、推荐、社会……根据关键字查询相关新闻的定义为用户可在页面输入自己想看的新闻从而浏览到自己想要的信息;页面根据新闻的类别显示所属新闻的定义为不同类别的新闻被分类起来了,例如用户想看娱乐类的新闻,只需要点击娱乐一选项便可看到所有跟娱乐相关的新闻等等。4.4.3分词模块在此模块中,分词模块的主要功能为查询系统服务器从前台获取到用户输入的语句并对其进行分词提取关键字。此模块是采用了中科院ictclas2013版分词系统,现在改为Nlpir汉语分词系统,功能上能够中文分词、词性标注、命名实体识别、用户词典功能等,在本模块中,经过对该分词系统的简化,只选取了中文分词一功能。业务流程为:提取关键字后,再对关键字分别进行查询,最后对查询出来的新闻进行统计并排序返回给前台。4.5数据库表说明本系统使用的数据库为MySQL。此次系统的数据库名为sokrs。由于本系统主要是针对新闻来设计的,所以对新闻模块的数据库设计进行主要介绍,其中新闻模块数据库的物理设计如下图4.4所示:图4.4物理设计图其中,day_news(每日热点新闻)表的设计如表4-1所示。表4-1day_news表的设计如表4-1所示:day_news_id为表的主键,代表的意思为新闻的ID。site_name为新闻站点名。day_search_id代表的意思为相同新闻的搜索ID。day_news_title代表的是新闻的标题。day_news_summary代表的意义为新闻的内容。day_news_avatar代表的意义为新闻的图片网址。day_news_url代表的意义为新闻的网址。day_news_sub_url的意义为新闻的二级网址。day_news_pub_time代表的意义为新闻的发表时间。day_news_remark代表的意义为新闻备注。day_search(热搜榜)表的设计如表4-2所示。表4-2day_search表的设计如表4-2所示:station_id为热搜表的主键,代表的意义为新闻的ID,设计时将新闻都编了个ID。day_search_word代表的意义为新闻的标题。day_search_date代表的意义为新闻发表的时间。day_search_frequency代表的意义为新闻的搜索的频率。day_search_state代表的意义为新闻内的相关数据。day_search_remark代表的意义为新闻的备注。News(新闻)表的设计如表4-3所示表4-3transfer表的设计如表4-3所示:news_id为表的主键。news_cat_id代表的意义为相关新闻的id。news_title代表的意义为新闻的标题。news_summary代表的意义为新闻的内容。news_avatar代表的意义为新闻图片的网址。news_url代表的意义为新闻的主网址。news_sub_url代表的意义为新闻的二级网址。news_pub_time代表的意义为新闻的发表时间。news_remark代表的意义为新闻备注。news_site代表的意义为新闻所属的网站。related_searches(相关新闻)表的设计如表4-4所示:表4-4related_searches表的设计如表4-4所示:keyword为表的主键,代表的意义是关键字。Key_keyword为表的外键,代表的意义是关键字相关的新闻。inverted_index(倒排索引)表的设计如表4-5所示:表4-5inverted_index表的设计如表4-5所示:word_id为表的主键,代表的意义是倒排索引的id。word代表的意义是新闻的关键字。document_frequency代表的意义是关键字所属文档的个数。inverted_index代表的意义是关键字所属新闻的倒排索引。inverted_index_file代表的意义是关键字所属的文档。city(城市)表的设计如表4-6所示:表4-6city表的设计如表4-6所示:areaid为表的主键,代表的意义是城市ID。district代表的意义是城市的县。city代表的意义是城市的区、市。province代表的意义是城市所属的省份。document(文档)表的设计如表4-7所示:表4-7document表的设计如表4-7所示:document_id为表的主键,代表的意义是文档ID。document_title代表的意义是文档的标题。document_summary代表的意义是文档的摘要。Document_avatar1与document_avatar2代表的意义是文档图片的网址。document_url代表的意义是新闻的网址。document_sdm代表队意义是新闻的二级网址。document_tdm代表的意义是新闻的三级网址。document_time代表的意义是新闻的所属的时间。document_pub_time代表的意义是新闻的发表时间。document_code代表的意义是新闻文字的编码格式。document_remark代表的意义是新闻备注。document_site代表的意义是新闻所属的站名。document_rdm代表的意义是新闻网址的后缀。document_cat代表的意义是新闻的类别。news_category(新闻类别)表的设计如表4-8所示:表4-8news_category表的设计如表4-8所示:news_cat_id代表的是新闻类别所属的ID。news_cat代表的是新闻类别。第5章查询系统编码与实现聚焦搜索引擎系统在MyEclipse集成环境下开发,结合Servlet等技术使用Java语言编程。利用三层模式开发,该查询系统设计流程上主要是以从页面获取参数开始直到从数据库获取数据返回给页面结束,作为查询系统的初始,根据用户的操作需要设计了很多相对应功能的接口供上层(表现层)调用。其中,根据是否从上层(表现层)获取数据分为两种接口。除此之外,根据聚焦搜索引擎系统中的业务流程,整合了若干类在Util类库中,供逻辑调用。综合的来说,根据表现层的需求在此层进行逻辑判定,再调用下一层(数据访问层)相对应的方法查询数据最后返回给前台。下面将对各个功能实现的编码进行详细的介绍。5.1天气接口在介绍本系统的接口之前,我首先介绍编写各类接口的基础:为了连接百度开放平台里的各类API,我写了一个工具方法,以后想调用相类似的API时便可轻松调用,代码如下:publicstaticStringconnect_api(Stringurl){ DefaultHttpClienthttpclient=newDefaultHttpClient(); HttpGethttpget=newHttpGet(url); Stringbody_json=""; HttpResponseresponse=httpclient.execute(httpget); HttpEntityentity=response.getEntity(); body_json=EntityUtils.toString(entity); returnbody_json;} 根据此工具方法便可根据你API的网络地址格式要求得到API提供的信息。以此作为编写各类接口的基础。在主页面中,有一个显示本地天气模块,在加载主页面的时候自动显示你当地的天气,包括PM2.5值;如何获得你当地的地址是根据你客户端访问主页所在的IP地址决定的,其中IP地址是从你访问主页时主页向后台发送数据的请求头里得到的。之后就要根据你得到的IP地址访问百度开放平台里提供的地址API获取当地名,然后根据地名再次访问百度开放品台里提供的天气API获取天气信息,因为百度提供的API中有一个就是根据你的地名获得天气信息,最终获得本地天气信息。其中获得本地地名的代码如下://根据ip获取本地地址 Stringurl_area="/microservice/iplookup?ip=" +cip; StringjsonStr_area=Connect_API .connect_api(url_area) .replace("{\"errNum\":0,\"errMsg\":\"success\",\"retData\":{", "{").replace("}}","}"); JSONObjectjsonob2=JSONObject.fromObject(jsonStr_area); Stringcity=jsonob2.getString("city");//获取城市 Stringdistrict=jsonob2.getString("district");//获取地级市 获得了地名之后,如之前所说根据地名再次访问百度提供的天气API最终才能获得地名所在的天气,根据地名获取天气信息的代码如下://以下根据获取的城市开始查天气 StringBufferjson_weather=newStringBuffer(); Stringurl_weather="/microservice/weather?cityname=" +district; StringjsonStr_wt=Connect_API.connect_api(url_weather); JSONObjectjsonob_wt=JSONObject.fromObject(jsonStr_wt); Stringerrnum=jsonob_wt.getString("errNum");由于获得了地址,所以只要访问百度提供的PM2.5API就可得到地址所在地的PM2.5值,代码如下://根据城市获取PM2.5值 Stringurl_pm="/microservice/aqi?city=" +city; StringjsonStr_pm=Connect_API .connect_api(url_pm) .replace("{\"errNum\":0,\"retMsg\":\"success\",\"retData\":{", "{").replace("}}","}"); JSONObjectjsonob_pm=JSONObject.fromObject(jsonStr_pm);通过以上方法最终获得了本地天气信息以及PM2.5值,但是此处还需考虑到一个问题,即百度提供的天气查询API中不包含某些小地名的天气,比如我查询涪陵天气,可能百度API无法查询到涪陵天气,那么我解决的办法是,在查询涪陵天气并调用天气API后判断返回结果的状态标识码,假设标识码为-1,即表示没有该地区的天气,则向上进行市级查询,即重庆市,假设市级也没有则进行省份判断。其关键代码如下://假设状态码为-1时,即表示没有该地名的天气 if(errnum.equals("-1")){ url_weather="/microservice/weather?cityname=" +city; jsonStr_wt=Connect_API .connect_api(url_weather) .replace( "{\"errNum\":0,\"errMsg\":\"success\",\"retData\":{", "{").replace("}}","}"); jsonob_wt=JSONObject.fromObject(jsonStr_wt); json_weather.append("{\"flag\":\"5\",\"con\":") .append("{\"city\":").append("\"") .append(jsonob_wt.getString("city")).append("\",") .append("\"weather\":").append("\"") .append(jsonob_wt.getString("weather")).append("\",") .append("\"temp\":").append("\"") .append(jsonob_wt.getString("temp")).append("\",") .append("\"aqi\":").append("\"") .append(jsonob_pm.getString("aqi")).append("\",") .append("\"aqi_level\":").append("\"") .append(jsonob_pm.getString("level")).append("\"") .append("}}"); }else{//则向上一级市区或省份进行天气查询url_weather="/microservice/weather?cityname=" +district; jsonStr_wt=jsonStr_wt.replace( "{\"errNum\":0,\"errMsg\":\"success\",\"retData\":{","{") .replace("}}","}"); jsonob_wt=JSONObject.fromObject(jsonStr_wt); json_weather.append("{\"flag\":\"5\",\"con\":") .append("{\"city\":").append("\"") .append(jsonob_wt.getString("district")).append("\",") .append("\"weather\":").append("\"") .append(jsonob_wt.getString("weather")).append("\",") .append("\"temp\":").append("\"") .append(jsonob_wt.getString("temp")).append("\",") .append("\"aqi\":").append("\"") .append(jsonob_pm.getString("aqi")).append("\",") .append("\"aqi_level\":").append("\"") .append(jsonob_pm.getString("level")).append("\"") .append("}}"); } returnjson_weather; }百度提供的API返回给我们的是json类型数据,我们只要将数据的返回给前台即可,至此,天气相关的接口就算完成了。5.2热搜榜接口在首页中,有一个显示当日搜索热度很高的一些新闻的模块,我们称之为热搜榜。对于热搜榜里的新闻获取并不是从网上获得,而是我们自己判断并将它们存储于我们的数据库中,此接口作为上述的第二种接口(需从界面获取数据)还有一个跟天气接口不同的是,此接口不从网络平台提供的API里获取数据,是直接从数据库里获取数据。所以我们只要从数据库里获取相关信息即可,部分关键代码如下:publicStringBufferday_search(intpage)throwsSQLException{ conn=DBUtil.getConnection(false);//1.获得跟数据库的链接 sql="selectday_search_wordfromday_searchorderbyday_search.day_search_datedesclimit?,8";//2.创建sql语句 statement=conn.prepareStatement(sql);//3.创建执行sql语句对象 statement.setInt(1,page_start); rs=statement.executeQuery(); while(rs.next()){ list.add("\""+rs.getString("day_search_word")+"\""); } json_daysearch.append("{\"msg\":\"success\",") .append("\"state\":\"1\",").append("\"data\":") .append("{\"list\":").append(list).append("}").append(",") .append("\"err\":\"0\"}"); returnjson_daysearch;}在首页上的热搜榜里的新闻不可能只有8条,所以我们需从主页面获取页数的参数来实现一个翻页的功能,在代码中我将从数据库里得到的数据装进一个集合,然而我可不能就这样返回给前台不然前台将无法识别我的数据,考虑到String类型的字符串比Stringbuffer字符串处理效率上慢的问题,所以在此我创建了一个Stringbuffer字符串以便对数据进行处理,最终我将数据重组成json数据的格式再返回给前台。5.3新闻分类接口 在此系统有个功能,那就是用户可根据新闻类别查看相同类别的新闻,那么这里就涉及到一个新闻分类的问题,为了实现这个功能,我为前台写了一个新闻类别的接口,此接口不从前台获取数据,只需从数据库读取新闻类别相关信息即可,代码如下:publicStringBufferNews_genre()throwsSQLException{ List<String>list=newArrayList<String>(); StringBufferjson_daysearch=newStringBuffer(); Connectionconn=null; ResultSetrs=null; Stringsql=null; PreparedStatementstatement=null; try{ conn=DBUtil.getConnection(false);//1.获得跟数据库的链接 sql="selectnews_catfromnews_category";//2.创建sql语句 statement=conn.prepareStatement(sql);//3.创建执行sql语句对象 rs=statement.executeQuery(); while(rs.next()){ list.add("\""+rs.getString("news_cat")+"\""); } json_daysearch.append("{\"msg\":\"success\",") .append("\"state\":\"1\",").append("\"data\":") .append("{\"news_cat\":").append(list).append("}") .append(",").append("\"err\":\"0\"}"); System.out.println(json_daysearch); }catch(Exceptione){ e.printStackTrace(); }finally{ DBUtil.close(conn); } returnjson_daysearch; }此段代码就是实现从数据库中获取新闻类别功能,对获取到的新闻类别我将他们放进集合,以及按照之前所说的效率问题我依旧创建了Stringbuffer类型的字符串以便操作成json类的字符串返回给前台,以此为之后根据新闻类别查看所属相关新闻的功能做了基础。5.4用户反馈接口为了能更好的改进此系统,特增加了一个用户反馈的模块,因此可收集到使用这个系统的用户的意见,为了实现这个功能,我写了一个能从前台获取用户建议,包括用户的信息,用户的意见,用户的所属地址。因为这三个信息都不是属于同一类型的,所以我采用了hashmap集合来保存这些信息,最终保存到数据库里。关键代码如下:conn=DBUtil.getConnection(false);//1.获得跟数据库的链接sql="INSERTINTOfeedback(feedback_con,feedback_userinfo,feedback_device)VALUES(?,?,?)";//2.创建sql语句 statement=conn.prepareStatement(sql);//3.创建执行sql语句对象 statement.setString(1,hashMap.get("con")); statement.setString(2,hashMap.get("userinfo")); statement.setString(3,hashMap.get("device"));在保存到数据库的时候只需要从hashmap中选取将对应的信息最后保存到数据库就可以了;在此接口的实现中,只需要从前台获取到用户在网页输入的信息并保存到数据库即可,在此需要注意的只有代码的编码问题。5.5搜索热词排行榜接口此接口的对象是PC客户端,功能是显示今日搜索热词的排行榜,此接口不从页面上获取信息,只从数据库读取相关信息并返回给前台,前台可根据此信息显示热词排行榜,此热词排行榜服务对象是系统后台工作人员,其关键代码如下:conn=DBUtil.getConnection(false);sql="selectexp_keyfromsearch_expwhereexp_date=CURDATE()ORDERBYexpDESCLIMIT0,10"; statement=conn.prepareStatement(sql); rs=statement.executeQuery(); while(rs.next()){ hot_order.add("\""+rs.getString("exp_key")+"\""); } hot_chart.append("{\"msg\":\"success\",") .append("\"state\":\"1\",").append("\"data\":") .append("{\"hot_charts\":").append(hot_order).append("}") .append(",").append("\"err\":\"0\"}"); 从代码可以看出,返回给前台的代码依旧考虑到效率问题选用了Stringbuffer字符串,作为后面设计搜索热词频率走势图的基础。5.6搜索热词频率走势图接口此接口的对象是PC客户端,功能是显示某一个热搜词在这一个月所查询的次数,热搜词是从上一个接口(热搜词排行榜接口)获取,当我们点击排行榜的热词时,后台获取点击的热词作为搜索依据到数据库去查找近一个月的查询次数并返回给前台,我们便可根据这些信息绘制走势图以来研究用户研究习惯,关键代码如下:publicStringBufferDiagram(Stringexp_key,Stringdate)throwsSQLException{ conn=DBUtil.getConnection(false); sql="selectexpfromsearch_expwhereexp_key=?"+ "ANDTO_DAYS(exp_date)>=TO_DAYS(?)"+ "ANDTO_DAYS(exp_date)<=TO_DAYS(NOW())"; statement=conn.prepareStatement(sql); statement.setString(1,exp_key); statement.setString(2,date); rs=statement.executeQuery(); while(rs.next()){ hot_order.add("\""+rs.getString("exp")+"\""); System.out.println("exp="+rs.getString("exp")); } hot_chart.append("{\"msg\":\"success\",") .append("\"state\":\"1\",").append("\"data\":") .append("{\"dia\":").append(hot_order).append("}") .append(",").append("\"err\":\"0\"}"); returnhot_chart;}此代码中还有一个参数date(日期),此日期的判定是根据你点击热搜词时的当日时间,但是既然获取到当日时间,却无法获取上一个月的今日时间,为了得到上一个月份,所以在读取数据库之前还需对时间进行操作,关键代码如下:publicStringBufferDiagram(Stringexp_key)throwsSQLException{ Datedt=newDate(); StringBufferdate=newStringBuffer(); SimpleDateFormatmatter1=newSimpleDateFormat("yyyy-MM-dd"); String[]time=matter1.format(dt).split("-"); intyear=Integer.parseInt(time[0]); intmonth=Integer.parseInt(time[1]); intday=Integer.parseInt(time[2]); if(month==1){ date=date.append(year-1).append("-").append("12").append("-").append(day); }else{ date=date.append(year).append("-").append(month-1).append("-").append(day); } DiagramDaoddao=newDiagramDao(); returnddao.Diagram(exp_key,date.toString()); }从代码可以看出,我首先获取今天的日期,然后对日期格式进行分解提取出今天所属的月份,得到了今天所属月份自然就知道了上一月份,当然还要进行判断,如果今天所属月份是一月份,那么上一个月份就为十二月,因此简单的就得到了上一个月份,最后得到了上一个月份就可去数据库查询上一个月的今天到这一个月的今天的所有数据。5.7日志系统 为了更好的对程序进行改进以及对客户需求的把握,我们设计了一个日志系统,记录用户在输入框输入的语句用来了解用户每一天的访问情况以及用户最需要什么,其过程并不难,只是单纯的记录到日志系统中,其代码如下:publicvoidwrite_log(StringsInput)throwsSQLException{ Connectionconn=null; Stringsql=null; PreparedStatementstatement=null; try{ conn=DBUtil.getConnection(false); sql="INSERTINTOsearch_log(search_key)VALUES(?)"; statement=conn.prepareStatement(sql); statement.setString(1,sInput); statement.execute(); mit(); }catch(Exceptione){ e.printStackTrace(); }finally{ DBUtil.close(conn); } }5.8缓存系统 与日志系统不一样的是,此缓存系统的目的意在为了加快用户搜索速度以及更快速的显示结果,我们设计了一个缓存系统,当用户第一次输入一个关键字并查询到结果后,我们将结果保存到缓存系统中,当用户第二次再查询时,我们便将上次保存到缓存系统中的结果返回给用户,这样避免了再次查询从而减慢了查询速度,增加了用户的查询体验。与日志系统相同的是,此功能是将写入到系统中的,其关键代码如下:publicvoidwrite_cache(Stringcacheword,Stringdocid)throwsSQLException{ Connectionconn=null; Stringsql=null; PreparedStatementstatement=null; try{ conn=DBUtil.getConnection(false); sql="INSERTINTOcache_sys(cache_keyword,cache_result)VALUES(?,?)"; statement=conn.prepareStatement(sql); statement.setString(1,cacheword); statement.setString(2,docid); statement.execute(); mit(); }catch(Exceptione){ e.printStackTrace(); }finally{ DBUtil.close(conn); } }5.9普通搜索 在主页面上有个输入框,用户可在输入框输入自己想搜索的语句并得到相关信息,此模块作为此系统的核心,在用户输入语句时要考虑到很多种情况,例如是否为天气搜索,或者是热搜词搜索等等一系列的判断,将在这里进行详细分析。 在所有的操作之前,首先我要介绍一个分词系统,此分词系统能将一段语句进行内部判断并分割,取出关键字返回给工作人员,对于此次的分词系统,我采用的是中科院的ictclas2013分词系统,在系统的采用上,它提供了很多的方法给后台编码人员,对于如何提取关键字此处不对其深入研究,此系统选取了一个提取关键字的方法作为开发基础。当用户在页面的输入框输入语句时,我们对用户的语句进行判断,首先进行判断的是是否为热词新闻,如果是热词新闻就对此热词进行一系列的操作,如果不是热词则再进行第二轮判断,待会会讲解。假如此次是热词新闻,将对语句进行判断,关键代码如下:obj.write_logdao(sInput); if(obj.judge_hotkey(sInput)!=0){ out.print(Tool.return_hotkey(sInput,page)); }else{ jd_wthque(sInput,resp,req,page); } 从代码可以看到,在进行判断前首先就是将用户输入的语句写入日志系统供后台人员研究,之后才进行热词判断,此热词判断也是写的一个方法进行判断,大体为到数据库查找是否有这个热词,如果有则判断为热词,然后调用热搜词方法,该方法的关键代码为:ArrayList<StringBuffer>stra=newArrayList<StringBuffer>(); StringBufferstrb=newStringBuffer(); Main_Serviceobj=newMain_ServiceImpl(); StringBufferflag2=obj.query_hotkey(obj.judge_hotkey(sInput)); ArrayList<String>flag25=obj.flag_2(obj.judge_hotkey(sInput),page); 在代码中系统自动调用了查询热词(query_hotkey())方法,可以将该热词所属的新闻信息全部得到,查询热词方法有一个整数类型的新闻id参数,在这之前一个关键的方法即为判断热词(judge_hotkey())方法,此方法参数为用户输入的语句,是string类型。此方法的判断依据是,如果用户输入的语句为热词,那么将去数据库查找该热词所属的新闻id,如果不为热词,则返回0,关键代码如下:publicintjudge_hotkey(StringsInput_key)throwsSQLException{ Connectionconn=null; ResultSetrs=null; Stringsql=null; PreparedStatementstatement=null; try{ conn=DBUtil.getConnection(false); sql="selectday_search_idfromday_searchwhereday_search_wordlike?"; statement=conn.prepareStatement(sql); statement.setString(1,"%"+sInput_key+"%"); rs=statement.executeQuery(); if(rs.next()){ if(rs.getInt("day_search_id")!=0){ System.out.print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 婴儿用品连锁店纸尿裤芯体采购与库存管理合同
- 2025年中国安福乐注射液市场调查研究报告
- 2025年中国半封闭拉丝焊机枪市场调查研究报告
- 2025年中国分散深棕染料市场调查研究报告
- 2025年中国信号延长器市场调查研究报告
- 2025年中国丝巾扣市场调查研究报告
- 2025年房地产中介服务项目发展计划
- 2025年天文测量仪器项目发展计划
- 2025商业银行代理高等教育助学贷款借款合同样本
- 2025企业融资租赁合同格式
- 《危险化学品企业安全生产标准化规范》专业深度解读与应用培训指导材料之5:5管理要求-5.5 安全风险管理和双重预防机制建设(雷泽佳编制-2025A0)
- 2025陕西烟草专卖局招聘42人易考易错模拟试题(共500题)试卷后附参考答案
- 矿山水灾事故处理
- 2024年烟台栖霞市考选毕业生考试真题
- 2025北京九年级(上)期末语文汇编:现代文阅读2
- 光谱分析在大气污染物成分识别中的应用研究
- 2025-2030中国晶圆转移机器人末端执行器行业市场发展趋势与前景展望战略研究报告
- 2025年经济学基础知识试题及答案
- 2025年定向钻机操作工培训考试题(附答案)
- 2025-2030全球及中国人工智能基础设施行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 企业技术考核试题及答案
评论
0/150
提交评论