![聚焦搜索引擎的設(shè)計(jì)與開(kāi)發(fā)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)(論文)設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/f7e6827dbab4c0ed48e656dc263ee4e0/f7e6827dbab4c0ed48e656dc263ee4e01.gif)
![聚焦搜索引擎的設(shè)計(jì)與開(kāi)發(fā)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)(論文)設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/f7e6827dbab4c0ed48e656dc263ee4e0/f7e6827dbab4c0ed48e656dc263ee4e02.gif)
![聚焦搜索引擎的設(shè)計(jì)與開(kāi)發(fā)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)(論文)設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/f7e6827dbab4c0ed48e656dc263ee4e0/f7e6827dbab4c0ed48e656dc263ee4e03.gif)
![聚焦搜索引擎的設(shè)計(jì)與開(kāi)發(fā)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)(論文)設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/f7e6827dbab4c0ed48e656dc263ee4e0/f7e6827dbab4c0ed48e656dc263ee4e04.gif)
![聚焦搜索引擎的設(shè)計(jì)與開(kāi)發(fā)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)(論文)設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/f7e6827dbab4c0ed48e656dc263ee4e0/f7e6827dbab4c0ed48e656dc263ee4e05.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
畢業(yè)設(shè)計(jì)(論文)題目聚焦搜索引擎的設(shè)計(jì)與開(kāi)發(fā)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
前言隨著Internet的迅速發(fā)展,人們的工作、學(xué)習(xí)和生活都已經(jīng)離不開(kāi)網(wǎng)絡(luò),網(wǎng)上信息正以爆炸性的速度增長(zhǎng),其資源內(nèi)容幾乎涉及所有領(lǐng)域,已經(jīng)成為知識(shí)、信息的集合體,是人們獲取信息的基本工具。發(fā)展到現(xiàn)在,我們可以通過(guò)計(jì)算機(jī)在網(wǎng)上進(jìn)行點(diǎn)餐、逛街、娛樂(lè)、購(gòu)物、聊天等等,這些都是面對(duì)個(gè)人層面而言的計(jì)算機(jī)技術(shù)所帶來(lái)的便利。對(duì)企業(yè)而言,許多公司都有著屬于自己的網(wǎng)站用來(lái)介紹公司信息以及產(chǎn)品介紹,或者公司的業(yè)務(wù)也會(huì)放在網(wǎng)站上以便與其它公司進(jìn)行合作??偠灾W(wǎng)絡(luò)的迅猛發(fā)展給社會(huì)帶來(lái)了極大的便利。在Internet網(wǎng)上進(jìn)行瀏覽和搜索自己想要的資訊,就好比進(jìn)入了世界上最大的圖書(shū)館,而這個(gè)圖書(shū)館里的書(shū)刊、雜志、廣告、新聞及各種形式的文獻(xiàn)信息全都沒(méi)有規(guī)律地排放著,沒(méi)有1個(gè)中心目錄將這些信息組織起來(lái)。正是因?yàn)镮nternet資源既豐富又分散且處于無(wú)序狀態(tài),使得人們?cè)诰W(wǎng)上查找自己所需的信息并非易事。這時(shí)為滿足人眾信息檢索的需求,搜索引擎便應(yīng)運(yùn)而生。搜索引擎是指使用某些自動(dòng)索引軟件來(lái)發(fā)現(xiàn)、收集網(wǎng)絡(luò)上的信息,然后對(duì)收集的網(wǎng)頁(yè)進(jìn)行標(biāo)引,建立1個(gè)可供查詢的大型數(shù)據(jù)庫(kù)。開(kāi)發(fā)搜索引擎便是解決用戶對(duì)網(wǎng)絡(luò)上雜亂無(wú)章的信息進(jìn)行篩選得出用戶想要的信息的當(dāng)下的最好辦法。
本篇論文中開(kāi)發(fā)的中文搜索引擎的原理為:首先是用爬蟲(chóng)進(jìn)行全網(wǎng)搜索,抓取網(wǎng)頁(yè);然后將抓取到的網(wǎng)頁(yè)進(jìn)行索引,同時(shí)也會(huì)記錄該網(wǎng)頁(yè)相關(guān)的屬性;最后后臺(tái)獲取前臺(tái)的查詢請(qǐng)求并調(diào)用中科院ICTCLA2013進(jìn)行分詞提取關(guān)鍵字,然后運(yùn)用關(guān)鍵字檢索索引文件并按照各種參數(shù)進(jìn)行復(fù)雜的計(jì)算,產(chǎn)生結(jié)果并返回給用戶。此搜索引擎的功能為:在頁(yè)面上可顯示當(dāng)?shù)氐奶鞖馇闆r,包括本地溫度、PM2.5、污染情況、地理位置、天氣信息;顯示當(dāng)日的熱點(diǎn)新聞,即熱搜榜;將新聞的種類(lèi)進(jìn)行分類(lèi)(“熱點(diǎn)”、“推薦”、“社會(huì)”……),用戶可根據(jù)類(lèi)別查看自己喜歡的新聞;用戶可在頁(yè)面上的輸入框輸入自己想要查詢的問(wèn)題并得到解答。結(jié)合當(dāng)下,各種搜索引擎的出現(xiàn),流氓插件的盛行,大多搜索引擎包含了大多用戶不需要的功能,導(dǎo)致加載緩慢,而此系統(tǒng)的推出,能在一定程度上滿足用戶快速的查詢的問(wèn)題。
目錄 摘要 第1章緒論1.1引言本章首先介紹課題研究背景、聚焦搜索系統(tǒng)相關(guān)研究現(xiàn)狀,然后闡述本文主要研究?jī)?nèi)容和組織結(jié)構(gòu)設(shè)計(jì)。1.2什么是搜索引擎搜索引擎[1]的英文為SearchEngine。搜索引擎是一個(gè)對(duì)互聯(lián)網(wǎng)信息資源進(jìn)行搜索整理和分類(lèi),并儲(chǔ)存在網(wǎng)絡(luò)數(shù)據(jù)庫(kù)中供用戶查詢的系統(tǒng),包括信息搜集、信息分類(lèi)、用戶查詢?nèi)糠?。從使用者的角度看,搜索引擎提供一個(gè)包含搜索框的頁(yè)面,在搜索框輸入詞語(yǔ),通過(guò)瀏覽器提交給搜索引擎后,搜索引擎就會(huì)返回跟用戶輸入的內(nèi)容相關(guān)的信息列表。其實(shí),搜索引擎涉及多領(lǐng)域的理論和技術(shù):數(shù)字圖書(shū)館、數(shù)據(jù)庫(kù)、信息檢索、信息提取、人工智能、機(jī)器學(xué)習(xí)、自然語(yǔ)言處理、計(jì)算機(jī)語(yǔ)言學(xué)、統(tǒng)計(jì)數(shù)據(jù)分析、數(shù)據(jù)挖掘、計(jì)算機(jī)網(wǎng)絡(luò)、分布式處理等,具有綜合性和挑戰(zhàn)性。搜索引擎的用途,對(duì)普通網(wǎng)民而言,搜索引擎則僅僅是一種查詢工具,作為工具,使用者要了解搜索引擎的功用、性能,探討并掌握其使用方法和技巧。對(duì)商家來(lái)說(shuō),搜索引擎是一種贏利的產(chǎn)品或服務(wù),而作為產(chǎn)品,搜索引擎商要研制、改進(jìn)和創(chuàng)新其搜索技術(shù);作為服務(wù),搜索引擎營(yíng)銷(xiāo)商要研究搜索引擎優(yōu)化和推廣。利用搜索引擎的目的不同,構(gòu)成了搜索引擎研究的不同群體和對(duì)搜索引擎不同角度不同側(cè)重的研究。1.3聚焦搜索引擎提出的背景如今,在信息爆炸的互聯(lián)網(wǎng)時(shí)代,人們?nèi)绾卧诤A康幕ヂ?lián)網(wǎng)信息資源中盡快找到自己真正想要的信息?人們當(dāng)然會(huì)選擇網(wǎng)絡(luò)搜索服務(wù)。伴隨著互聯(lián)網(wǎng)的不斷發(fā)展和網(wǎng)絡(luò)信息資源的爆炸性式的增長(zhǎng),網(wǎng)絡(luò)搜索已經(jīng)成為人們從互聯(lián)網(wǎng)“海量”信息中獲得有效信息十分便捷的途徑,成為僅次于電子郵件的最成功的業(yè)務(wù)應(yīng)用。面對(duì)搜索引擎這塊金礦,諸如Google、百度、雅虎等互聯(lián)網(wǎng)巨頭紛紛跑馬圈地,相繼推出了音樂(lè)、圖片、新聞、本地搜索等服務(wù)。作為互聯(lián)網(wǎng)搜索技術(shù)與移動(dòng)通信技術(shù)相結(jié)合的產(chǎn)物,近兩年來(lái),移動(dòng)搜索技術(shù)在日益走向成熟,應(yīng)用前景十分看好。移動(dòng)搜索服務(wù)的最大優(yōu)勢(shì)在于它打破了電腦的線纜約束,讓用戶能通過(guò)隨身攜帶的手機(jī)即時(shí)獲取所需的信息。從實(shí)際應(yīng)用的角度看,手機(jī)搜索和PC搜索采用的基本原理相似,但手機(jī)搜索并不是網(wǎng)絡(luò)搜索的簡(jiǎn)單翻版,其不同之處體現(xiàn)在兩個(gè)方面:首先,PC搜索強(qiáng)調(diào)的是“海量”,搜索結(jié)果多多益善;而手機(jī)屏幕小,因此需要對(duì)多余的圖片、超級(jí)鏈接、Flash等內(nèi)容進(jìn)行過(guò)濾,為用戶提供最精確、最有價(jià)值的內(nèi)容。其次,手機(jī)搜索可以隨時(shí)隨地進(jìn)行,這決定了搜索內(nèi)容和搜索過(guò)程具有更強(qiáng)的人性化色彩。從全球來(lái)看,近三年來(lái),諸如Google、雅虎等傳統(tǒng)互聯(lián)網(wǎng)搜索引擎提供商加快進(jìn)軍移動(dòng)搜索領(lǐng)域,相繼推出了基于短信和WAP的移動(dòng)搜索引擎,開(kāi)始提供移動(dòng)搜索服務(wù)。從歐洲到北美和亞洲,一些主流的移動(dòng)運(yùn)營(yíng)商也逐步推出了移動(dòng)搜索服務(wù)。移動(dòng)搜索已經(jīng)成移動(dòng)運(yùn)營(yíng)商大理推廣的熱點(diǎn)業(yè)務(wù)應(yīng)用。移動(dòng)搜索市場(chǎng)發(fā)展迅速,隨著移動(dòng)搜索逐漸走出市場(chǎng)培育期以及未來(lái)4G商用帶來(lái)的增值應(yīng)用的豐富,移動(dòng)和互聯(lián)網(wǎng)融合的發(fā)展趨勢(shì)注定了移動(dòng)搜索是未來(lái)的發(fā)展方向,而且這個(gè)搜索技術(shù)的出現(xiàn)已經(jīng)開(kāi)始引發(fā)一場(chǎng)新的競(jìng)爭(zhēng)硝煙。1.3.1國(guó)內(nèi)外的研究現(xiàn)狀隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,我們可以在網(wǎng)絡(luò)中獲取自己想要的信息,但與此同時(shí),面對(duì)浩瀚無(wú)邊的信息也給我們帶來(lái)了困擾,我們往往不能精確地、快速的定位信息,即遭受著“信息過(guò)載”和“信息迷航”的困擾。在這樣的背景下,聚焦搜索引擎應(yīng)運(yùn)而生,且聚焦搜索引擎的研究熱點(diǎn)正逐漸由過(guò)去的通用搜索引擎向聚焦搜索引擎轉(zhuǎn)變。聚焦搜索引擎技術(shù)最先是在國(guó)外開(kāi)始進(jìn)行研究和應(yīng)用的。目前,聚焦搜索引擎已經(jīng)得到了廣泛的研究和應(yīng)用,涉及到很多領(lǐng)域,例如:購(gòu)物、旅游、求職等領(lǐng)域,較為有代表性的聚焦搜索引擎有:(1)伯克利大學(xué)(Berkeley)的FocusedProject系統(tǒng)是由科學(xué)家S.Charkrabarti帶頭從事開(kāi)發(fā)的。其主要是通過(guò)兩個(gè)程序來(lái)指導(dǎo)主題網(wǎng)絡(luò)蜘蛛工作,一個(gè)程序是專(zhuān)門(mén)用來(lái)計(jì)算下載的網(wǎng)頁(yè)文檔與預(yù)定主題的相關(guān)程度,這個(gè)程序叫做主題分類(lèi)器(Classifier);另一個(gè)程序是用來(lái)確定哪些鏈接指向了主題相關(guān)的網(wǎng)頁(yè)信息,這個(gè)程序稱之為凈化器(Distiller)。(2)美國(guó)國(guó)家科學(xué)數(shù)字圖書(shū)館的CBP(即CollectionBuildingProgram),這個(gè)項(xiàng)目的目的是為科學(xué)、技術(shù)、數(shù)學(xué)和工程建設(shè)一個(gè)超大規(guī)模的在線數(shù)字圖書(shū)館,并試圖研究在某一主題領(lǐng)域上信息資源自動(dòng)建設(shè)的可能性。CBP由于只面向教學(xué)和教育,因而,它具有主題精確度高的特點(diǎn),同時(shí),其只提供URL并不存儲(chǔ)資源原文。該系統(tǒng)還可以根據(jù)少量的輸入自動(dòng)將有限數(shù)量的與該主題最相關(guān)的URL列表返回給用戶。(3)Elsevier公司的Scirus系統(tǒng),Scirus是一個(gè)面向科學(xué)領(lǐng)域的聚焦搜索引擎,其搜索出來(lái)的科學(xué)信息具有較高主題相關(guān)度。目前,Scirus系統(tǒng)被認(rèn)為是互聯(lián)網(wǎng)上綜合性最強(qiáng)且最全面的科技文獻(xiàn)門(mén)戶網(wǎng)站,它只檢索有關(guān)科學(xué)內(nèi)容的網(wǎng)站,且過(guò)濾掉與科學(xué)無(wú)關(guān)的信息,將與科學(xué)內(nèi)容相關(guān)的信息呈現(xiàn)給用戶。(4)LIBClient-IRISWeb,該系統(tǒng)由TheAmericanAssociationofLawLibraries(AALL)在1997年2月發(fā)布,是美國(guó)北卡羅萊納州大學(xué)信息與圖書(shū)學(xué)院的BertDempsey和南卡羅萊納州法學(xué)院的RobertVreeland共同開(kāi)發(fā)的一個(gè)在互聯(lián)網(wǎng)上專(zhuān)門(mén)搜索與法律相關(guān)的信息系統(tǒng)。該系統(tǒng)很大幅度提高了法律工作者在互聯(lián)網(wǎng)上搜索與法律相關(guān)的專(zhuān)業(yè)信息的效率。(5)經(jīng)濟(jì)類(lèi)專(zhuān)業(yè)搜索引擎(WallStreetResearchNetwork),該搜索引擎是由美國(guó)WSRN公司開(kāi)發(fā)的,其主要用于檢索工商企業(yè)、投資中介商、市場(chǎng)新聞、經(jīng)濟(jì)研究以及經(jīng)濟(jì)研究出版物等各類(lèi)與經(jīng)濟(jì)財(cái)經(jīng)類(lèi)相關(guān)的信息。(6)Zillow是于2006年開(kāi)發(fā)的服務(wù)于房地產(chǎn)領(lǐng)域的搜索引擎,是為房產(chǎn)擁有者、房產(chǎn)買(mǎi)賣(mài)方、租賃者、房產(chǎn)經(jīng)紀(jì)人等提供的一個(gè)虛擬的信息平臺(tái)。這些用戶可以通過(guò)Zillow來(lái)搜索了解當(dāng)?shù)胤康禺a(chǎn)相關(guān)信息。國(guó)外技術(shù)相對(duì)先進(jìn),很早就有了比較成熟的產(chǎn)品,國(guó)內(nèi)技術(shù)相對(duì)落后,但是近年來(lái)隨著對(duì)搜索技術(shù)的不斷探索,涌現(xiàn)出了很多可喜的成果,具有代表性的面向特定主題的聚焦搜索引擎系統(tǒng)主要有以下一些應(yīng)用。①賽迪網(wǎng)的“IT羅盤(pán)”是國(guó)內(nèi)最具有代表性聚焦搜索引擎,目前收錄了2萬(wàn)多條IT網(wǎng)址和數(shù)百萬(wàn)IT網(wǎng)頁(yè)數(shù)據(jù),涵蓋了IT領(lǐng)域的絕大多數(shù)網(wǎng)絡(luò)信息資源。賽迪“IT羅盤(pán)”為用戶提供經(jīng)過(guò)人工處理和篩選的網(wǎng)頁(yè)搜索服務(wù),其網(wǎng)站目錄也都經(jīng)過(guò)人工分類(lèi)和整理,收錄了大量經(jīng)過(guò)嚴(yán)格過(guò)濾和人工加工的網(wǎng)站。其有很多優(yōu)點(diǎn):分類(lèi)精確合理,查詢便捷;使用人性化的設(shè)計(jì),為用戶提供開(kāi)放的接口;支持包括GBK、GB2312、BIG5等主流的中文編碼標(biāo)準(zhǔn),并且可以在不同的編碼之間進(jìn)行轉(zhuǎn)換;支持布爾邏輯搜索模式;搜索速度快,平均響應(yīng)時(shí)間低于0.15秒。②奇虎問(wèn)答主要專(zhuān)注于BBS信息領(lǐng)域,其獨(dú)創(chuàng)的社區(qū)搜索技術(shù)(PeopleRank)主要用來(lái)抓取和識(shí)別論壇和博客中的信息,最終以利于人們閱讀的方式展現(xiàn)給搜索用戶?;谶@一強(qiáng)大的社區(qū)搜索技術(shù),目前,奇虎問(wèn)答已成為國(guó)內(nèi)答案數(shù)量最多最全的問(wèn)答網(wǎng)站。③酷訊搜索是專(zhuān)業(yè)的旅游搜索引擎,專(zhuān)注于為國(guó)內(nèi)旅行者提供機(jī)票、火車(chē)票、酒店、旅游和度假等領(lǐng)域的搜索服務(wù)。酷訊搜索采用領(lǐng)先的數(shù)據(jù)挖掘和智能推薦等技術(shù),對(duì)海量旅行產(chǎn)品數(shù)據(jù)進(jìn)行實(shí)時(shí)整合、辨識(shí)以及處理,為旅行者提供最新最準(zhǔn)確的旅行產(chǎn)品價(jià)格和相關(guān)信息,以達(dá)到可以幫助旅行者對(duì)旅行產(chǎn)品進(jìn)行高效地比較,并選擇適合自己的旅行產(chǎn)品的目的??嵊嵶畛踔粚?zhuān)注于火車(chē)票領(lǐng)域的搜索服務(wù),與百度、谷歌等通用搜索引擎不同,是一款以實(shí)時(shí)的生活信息為搜索對(duì)象的聚焦搜索引擎,能夠?qū)θ亢娇展竟俜骄W(wǎng)站進(jìn)行實(shí)時(shí)搜索,目前,其搜索范圍已超過(guò)2000家專(zhuān)業(yè)機(jī)票、火車(chē)票、酒店、以及度假產(chǎn)品等供應(yīng)商網(wǎng)站,用戶可以一站式獲取全面的旅游產(chǎn)品相關(guān)信息。目前,酷訊搜索月訪問(wèn)記錄已突破5,500萬(wàn)。④房老大是2006年5月正式上線的中國(guó)首個(gè)房地產(chǎn)行業(yè)的聚焦搜索引擎。其搜集了100個(gè)城市的房源信息,包括新房、別墅、二手房、寫(xiě)字樓、租房、商鋪以及廠房等七種不同的房源信息。由于全部房源信息都是由房源供應(yīng)方進(jìn)行填寫(xiě),信息內(nèi)容包含地理位置、面積、戶型、價(jià)格等基本信息,因而,其搜索結(jié)果與通用的搜索引擎相比,房老大的搜索結(jié)果更精確、實(shí)用、全面,搜索用戶可以在短時(shí)間內(nèi)查找到自己想要的真實(shí)房源信息。⑤“去哪兒”是2005年5月上線的全球最大的中文旅行平臺(tái),且是目前旅游行業(yè)被人們所熟知的聚焦搜索引擎代表。其通過(guò)網(wǎng)站及移動(dòng)客戶端的全平臺(tái)覆蓋,隨時(shí)隨地為游客提供國(guó)內(nèi)外機(jī)票、旅游團(tuán)購(gòu)、度假、酒店和旅行等信息的聚焦搜索,幫助他們找到性價(jià)比最高的旅行產(chǎn)品和最優(yōu)質(zhì)的信息,聰明地安排旅行。憑借其便捷、先進(jìn)的智能搜索技術(shù)對(duì)互聯(lián)網(wǎng)上的旅行信息進(jìn)行整合,為用戶提供實(shí)時(shí)、可靠、全面的旅游產(chǎn)品查詢和信息比較服務(wù)。綜上,盡管?chē)?guó)內(nèi)的聚焦搜索引擎發(fā)展速度相對(duì)較快,但與國(guó)外相比,在數(shù)據(jù)挖掘、信息共享、開(kāi)放接口等技術(shù)層面以及行業(yè)經(jīng)驗(yàn)上都還存在著很多差距,從而阻礙了聚焦搜索引擎的快速發(fā)展,而且中文詞匯組合變化是非常復(fù)雜的,也在一定程度上限制了中文搜索引擎的發(fā)展速度,因此,國(guó)內(nèi)的聚焦搜索引擎的發(fā)展?jié)摿κ呛艽蟮?,存在著很大的發(fā)展空間。1.3.2目前研究工作中存在的問(wèn)題(1)建立索引是檢索的根本,索引技術(shù)是檢索系統(tǒng)性能的重中之重。不同的數(shù)據(jù)庫(kù)存儲(chǔ)量都是巨大的,良好的索引對(duì)提高檢索效率非常的重要,對(duì)中文來(lái)說(shuō)尤其如此。但如何建一個(gè)最優(yōu)秀的索引仍是現(xiàn)在研究工作中需要去研究的。(2)相比較英文,英文只有24個(gè)字母,但是中文擁有上千個(gè)字,就體現(xiàn)到中文索引面臨一個(gè)分詞問(wèn)題,如何按字按詞自動(dòng)索引,一直是目前情報(bào)界與語(yǔ)言界研究的熱點(diǎn),當(dāng)然最后應(yīng)該走的還是計(jì)算機(jī)自動(dòng)分詞之路。其次,如何實(shí)現(xiàn)自動(dòng)跟蹤索引,是又一個(gè)難題。(3)凡是發(fā)布到網(wǎng)上的系統(tǒng),都會(huì)考慮到一個(gè)信息安全的問(wèn)題,在系統(tǒng)處理能力提高的同時(shí),系統(tǒng)的連接能力也在不斷的提高。但在連接能力信息、流通能力提高的同時(shí),基于網(wǎng)絡(luò)連接的安全問(wèn)題也日益突出,如何保證此系統(tǒng)的網(wǎng)絡(luò)安全也是研究工作中一大難題。1.4系統(tǒng)開(kāi)發(fā)的意義此次開(kāi)發(fā)的系統(tǒng)是聚焦搜索引擎系統(tǒng)。系統(tǒng)的功能包括:天氣查詢,新聞查詢,用戶中文語(yǔ)句查詢。所有查詢都是系統(tǒng)的前臺(tái)服務(wù),即面向用戶的,方便乘客了解自己想要的信息。對(duì)于尚在象牙塔中的莘莘學(xué)子,搜索正在悄無(wú)聲息地改變他們的學(xué)習(xí)方式。Internet
與全球電信的迅猛發(fā)展使信息資源的“生產(chǎn)”“傳播”與“消費(fèi)”出現(xiàn)了新的格局,信息在網(wǎng)絡(luò)上的傳播速度迅速提升,這使得上網(wǎng)用戶獲取真正有用的信息越來(lái)越難,而開(kāi)發(fā)此搜索引擎就能幫助用戶解決從目前種類(lèi)繁多的信息中找到用戶真正有用的信息。1.5本文主要研究?jī)?nèi)容和組織結(jié)構(gòu)本文的主要研究?jī)?nèi)容是聚焦搜索引擎查詢系統(tǒng)的設(shè)計(jì)、分析和實(shí)現(xiàn)情況,主要包括頁(yè)面的天氣查詢和新聞分類(lèi)和用戶普通查詢方面等內(nèi)容,并對(duì)實(shí)現(xiàn)各個(gè)功能的模塊的技術(shù)進(jìn)行了研究探討。論文內(nèi)容按以下結(jié)構(gòu)安排:(1)開(kāi)發(fā)環(huán)境和相關(guān)技術(shù)介紹(第2章)(2)系統(tǒng)需求分析(第3章)(3)查詢系統(tǒng)的設(shè)計(jì)(第4章)(4)系統(tǒng)編碼(第5章)(5)測(cè)試(第6章)(6)結(jié)論與展望(第7章)其中第2章對(duì)與課題研究相關(guān)的技術(shù)作了簡(jiǎn)要介紹,包括系統(tǒng)開(kāi)發(fā)的集成環(huán)境、Servlet技術(shù)、JDBC數(shù)據(jù)庫(kù)連接技術(shù)等,本章是后面各章的鋪墊。第3章對(duì)于系統(tǒng)進(jìn)行了完整的需求分析。第4章是系統(tǒng)設(shè)計(jì)部分,包括系統(tǒng)邏輯思路設(shè)計(jì)、系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)、物理結(jié)構(gòu)設(shè)計(jì)、系統(tǒng)各功能模塊設(shè)計(jì)以及數(shù)據(jù)庫(kù)設(shè)計(jì)。第5章為系統(tǒng)的關(guān)鍵編碼。第6章為系統(tǒng)實(shí)現(xiàn)后的測(cè)試,對(duì)系統(tǒng)各個(gè)模塊和整體進(jìn)行功能測(cè)試。第2章相關(guān)技術(shù)概述本文研究的聚焦搜索引擎系統(tǒng)基于B/S模式,利用MyEclipse集成開(kāi)發(fā)環(huán)境和MySQL數(shù)據(jù)庫(kù)管理系統(tǒng),采用的技術(shù)有:JavaServletAPI技術(shù),JDBC數(shù)據(jù)庫(kù)連接技術(shù),漢語(yǔ)分詞技術(shù)。2.1MyEclipse集成開(kāi)發(fā)環(huán)境作為一套完整的開(kāi)發(fā)工具集,MyEclipse[4](MyEclipseEnterpriseWorkbench,簡(jiǎn)稱MyEclipse)企業(yè)級(jí)工作平臺(tái)是對(duì)EclipseIDE的擴(kuò)展,利用它我們就可以在數(shù)據(jù)庫(kù)和J2EE的開(kāi)發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開(kāi)發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測(cè)試和發(fā)布功能,完整支持HTML,Struts,JSF,CSS,JavaScript,SQL,Hibernate。在結(jié)構(gòu)上,MyEclipse的特征可以被分為7類(lèi):1.J2EE模型2.WEB開(kāi)發(fā)工具3.EJB開(kāi)發(fā)工具4.應(yīng)用程序服務(wù)器的連接器5.J2EE項(xiàng)目部署服務(wù)6.數(shù)據(jù)庫(kù)服務(wù)7.MyEclipse整合幫助對(duì)于以上每一種功能上的類(lèi)別,在Eclipse中都有相應(yīng)的功能部件,并通過(guò)一系列的插件來(lái)實(shí)現(xiàn)它們。MyEclipse結(jié)構(gòu)上的這種模塊化,可以讓我們?cè)诓挥绊懫渌K的情況下,對(duì)任一模塊進(jìn)行單獨(dú)的擴(kuò)展和升級(jí)。簡(jiǎn)單而言,MyEclipse是Eclipse的插件,也是一款功能強(qiáng)大的J2EE集成開(kāi)發(fā)環(huán)境,支持代碼編寫(xiě)、配置、測(cè)試以及除錯(cuò),MyEclipse6.0以前版本需先安裝Eclipse。MyEclipse6.0以后版本安裝時(shí)不需安裝Eclipse。2.2JDBC數(shù)據(jù)庫(kù)連接JDBC[6](JavaDataBaseConnectivity,Java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序,同時(shí),JDBC也是個(gè)商標(biāo)名。有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語(yǔ)句就是一件很容易的事。它可向相應(yīng)數(shù)據(jù)庫(kù)發(fā)送SQL調(diào)用,將Java語(yǔ)言和JDBC結(jié)合起來(lái)使程序員只須寫(xiě)一遍程序就可以讓它在任何平臺(tái)上運(yùn)行。Java數(shù)據(jù)庫(kù)連接體系結(jié)構(gòu)是用于Java應(yīng)用程序連接數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方法。JDBC對(duì)Java程序員而言是API,對(duì)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開(kāi)發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫(kù)廠商及第三方中間件廠商實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接提供了標(biāo)準(zhǔn)方法。JDBC使用已有的SQL標(biāo)準(zhǔn)并支持與其它數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn)。JDBC實(shí)現(xiàn)了所有這些面向標(biāo)準(zhǔn)的目標(biāo)并且具有簡(jiǎn)單、嚴(yán)格類(lèi)型定義且高性能實(shí)現(xiàn)的接口。JDBC主要做三件事:與數(shù)據(jù)庫(kù)建立連接、發(fā)送SQL語(yǔ)句并處理結(jié)果[10]。2.3ServletServlet是一個(gè)服務(wù)器端的組件,是J2EE中比較關(guān)鍵的組成部分(其實(shí)學(xué)到現(xiàn)在J2EE里面的13個(gè)標(biāo)準(zhǔn)才接觸了3個(gè),他們分別是EJB,Servlet,JSP),Servlet技術(shù)的推出擴(kuò)展了Java語(yǔ)言在服務(wù)器端開(kāi)發(fā)的功能,鞏固了Java語(yǔ)言在服務(wù)器端開(kāi)發(fā)過(guò)程中的地位,而且現(xiàn)在使用非常廣泛的JSP技術(shù)也是基于Servlet的原理,JSP+JavaBeanstalk+Servlet成為實(shí)現(xiàn)MVC模式的一種有效的選擇。Servlet本質(zhì)上也是Java類(lèi),編寫(xiě)Servlet需要遵循java的基本語(yǔ)法,但是與一般的Java類(lèi)不同的是Servlet是只能運(yùn)行在服務(wù)器端的Java類(lèi),而且必須遵循特殊的規(guī)范,在運(yùn)行過(guò)程中有自己的生命周期,這些特性都是Servlet所獨(dú)有的。另外Servlet和HTTP協(xié)議是緊密聯(lián)系的,所以使用Servlet幾乎可以處理HTTP協(xié)議所有方面的內(nèi)容,這也正是Servlet受到開(kāi)發(fā)人員青睞的最大原因。Servlet是對(duì)支持Java的服務(wù)器的一般擴(kuò)充。它最常見(jiàn)的用途是擴(kuò)展Web服務(wù)器,提供非常安全的、可移植的、易于使用的CGI替代品。它是一種動(dòng)態(tài)加載的模塊,為來(lái)自Web服務(wù)器的請(qǐng)求提供服務(wù)。它完全運(yùn)行在Java虛擬機(jī)上。由于它在服務(wù)器端運(yùn)行,因此它不依賴于瀏覽器的兼容性。Servlet是一種服務(wù)器端腳本,它是一個(gè)特殊的Java類(lèi),繼承自HttpServlet,開(kāi)發(fā)中主要用于處理和響應(yīng)客戶端的請(qǐng)求。Servlet在容器中運(yùn)行,其實(shí)例的和銷(xiāo)毀創(chuàng)建由容器進(jìn)行控制。每個(gè)Servlet的運(yùn)行都擁有生命周期:首先,(1)(容器)創(chuàng)建Servlet實(shí)例。然后,init(初始化,顯示相關(guān)Servlet實(shí)例信息)。再是,Service(處理和響應(yīng)請(qǐng)求)。最后,destroy(銷(xiāo)毀,釋放資源)[9]。2.4MySQLMySQL[5]是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQLAB公司。在2008年1月16號(hào)被Sun公司收購(gòu)。而2009年,SUN又被Oracle收購(gòu).對(duì)于Mysql的前途,沒(méi)有任何人抱樂(lè)觀的態(tài)度.目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)。與其他的大型數(shù)據(jù)庫(kù)例如Oracle、DB2、SQLServer等相比,MySQL自有它的不足之處,如規(guī)模小、功能有限(MySQLCluster的功能和效率都相對(duì)比較差)等,但是這絲毫也沒(méi)有減少它受歡迎的程度。對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),MySQL提供的功能已經(jīng)綽綽有余,而且由于MySQL是開(kāi)放源碼軟件,因此可以大大降低總體擁有成本[5]。本系統(tǒng)中用的是MySQL5.6.24版本。2.5漢語(yǔ)分詞NLPIR漢語(yǔ)分詞系統(tǒng)(又名ICTCLAS2013),主要功能包括中文分詞;詞性標(biāo)注;命名實(shí)體識(shí)別;用戶詞典功能;支持GBK編碼、UTF8編碼、BIG5編碼。新增微博分詞、新詞發(fā)現(xiàn)與關(guān)鍵詞提取;張華平博士先后傾力打造十余年,內(nèi)核升級(jí)10次。在各位ICTCLAS用戶強(qiáng)烈的要求下,張華平博士正式發(fā)布ICTCLAS2013版本,為了與以前工作進(jìn)行大的區(qū)隔,并推廣NLPIR自然語(yǔ)言處理與信息檢索共享平臺(tái),從本版本開(kāi)始,系統(tǒng)名稱調(diào)整為NLPIR漢語(yǔ)分詞系統(tǒng)。張博士先后傾力打造十余年,內(nèi)核升級(jí)10次,全球用戶突破20萬(wàn),先后獲得了2010年錢(qián)偉長(zhǎng)中文信息處理科學(xué)技術(shù)獎(jiǎng)一等獎(jiǎng),2003年國(guó)際SIGHAN分詞大賽綜合第一名,2002年國(guó)內(nèi)973評(píng)測(cè)綜合第一名。NLPIR漢語(yǔ)分詞系統(tǒng)(又名ICTCLAS2013),主要功能包括中文分詞;詞性標(biāo)注;命名實(shí)體識(shí)別;用戶詞典功能;支持GBK編碼、UTF8編碼、BIG5編碼。新增微博分詞、新詞發(fā)現(xiàn)與關(guān)鍵詞提取;全球用戶突破20萬(wàn),先后獲得了2010年錢(qián)偉長(zhǎng)中文信息處理科學(xué)技術(shù)獎(jiǎng)一等獎(jiǎng),2003年國(guó)際SIGHAN分詞大賽綜合第一名,2002年國(guó)內(nèi)973評(píng)測(cè)綜合第一名。本系統(tǒng)需要對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行分詞,所以采用了網(wǎng)上免費(fèi)提供的中科院分詞系統(tǒng),本系統(tǒng)使用的版本為:2013年UTF8編碼版。2.6開(kāi)放API平臺(tái)API[8](ApplicationProgrammingInterface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件得以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)?;诨ヂ?lián)網(wǎng)的應(yīng)用正變得越來(lái)越普及,在這個(gè)過(guò)程中,有更多的站點(diǎn)將自身的資源開(kāi)放給開(kāi)發(fā)者來(lái)調(diào)用。對(duì)外提供的API調(diào)用使得站點(diǎn)之間的內(nèi)容關(guān)聯(lián)性更強(qiáng),同時(shí)這些開(kāi)放的平臺(tái)也為用戶、開(kāi)發(fā)者和中小網(wǎng)站帶來(lái)了更大的價(jià)值。開(kāi)放是目前的發(fā)展趨勢(shì),越來(lái)越多的產(chǎn)品走向開(kāi)放。目前的網(wǎng)站不能靠限制用戶離開(kāi)來(lái)留住用戶,開(kāi)放的架構(gòu)反而更增加了用戶的粘性。在Web2.0的浪潮到來(lái)之前,開(kāi)放的API甚至源代碼主要體現(xiàn)在桌面應(yīng)用上,而現(xiàn)在越來(lái)越多的Web應(yīng)用面向開(kāi)發(fā)者開(kāi)放了API。具備分享、標(biāo)準(zhǔn)、去中心化、開(kāi)放、模塊化的Web2.0站點(diǎn),在為使用者帶來(lái)價(jià)值的同時(shí),更希望通過(guò)開(kāi)放的API來(lái)讓站點(diǎn)提供的服務(wù)擁有更大的用戶群和服務(wù)訪問(wèn)數(shù)量。站點(diǎn)在推出基于開(kāi)放API標(biāo)準(zhǔn)的產(chǎn)品和服務(wù)后,無(wú)需花費(fèi)力氣做大量的市場(chǎng)推廣,只要提供的服務(wù)或應(yīng)用出色易用,其他站點(diǎn)就會(huì)主動(dòng)將開(kāi)放API提供的服務(wù)整合到自己的應(yīng)用之中。同時(shí),這種整合API帶來(lái)的服務(wù)應(yīng)用,也會(huì)激發(fā)更多富有創(chuàng)意的應(yīng)用產(chǎn)生。為了對(duì)外提供統(tǒng)一的API接口,需要對(duì)開(kāi)發(fā)者開(kāi)放資源調(diào)用API的站點(diǎn)提供開(kāi)放統(tǒng)一的API接口環(huán)境,來(lái)幫助使用者訪問(wèn)站點(diǎn)的功能和資源[9]。當(dāng)然,開(kāi)放API的站點(diǎn)為第三方的開(kāi)發(fā)者提供良好的社區(qū)支持也是很有意義的,這有助于吸引更多的技術(shù)人員參與到開(kāi)放的開(kāi)發(fā)平臺(tái)中,并開(kāi)發(fā)出更為有趣的第三方應(yīng)用。本系統(tǒng)的天氣模塊調(diào)用的是百度APISTORE里提供的天氣信息與PM2.5與城市名開(kāi)放平臺(tái)。第3章系統(tǒng)需求分析3.1用戶需求分析用戶需求分析分為兩個(gè)方面,一個(gè)是搜索詞分析,另外一個(gè)是用戶搜索意圖分析,通過(guò)搜索詞的分析可以返回一個(gè)可能是用戶需求的結(jié)果列表,通過(guò)用戶搜索意圖的分析并對(duì)搜索結(jié)果進(jìn)行調(diào)整,可以獲得此用戶更加想要的結(jié)果列表。3.2系統(tǒng)可行性分析在開(kāi)發(fā)一個(gè)系統(tǒng)時(shí),需要對(duì)可行性進(jìn)行分析。可行性分析可從環(huán)境可行、經(jīng)濟(jì)可行、技術(shù)可行3方面進(jìn)行分析。通過(guò)方方面面的分析,得出開(kāi)發(fā)此系統(tǒng)的難度幾何,開(kāi)發(fā)出來(lái)后有沒(méi)有市場(chǎng)。若是沒(méi)有進(jìn)行可行性分析就匆匆地進(jìn)行開(kāi)發(fā),可能導(dǎo)致大問(wèn)題。如:開(kāi)發(fā)完系統(tǒng),并在調(diào)試通過(guò)正式投入使用后,卻發(fā)現(xiàn)用戶對(duì)系統(tǒng)的需求并不大,根本用不到開(kāi)發(fā)的系統(tǒng),導(dǎo)致系統(tǒng)被淘汰,這樣既浪費(fèi)時(shí)間又浪費(fèi)人力。又如:系統(tǒng)的市場(chǎng)著實(shí)存在,人們對(duì)系統(tǒng)的需求大,但是卻沒(méi)有考慮到自己的水平、技術(shù)能否應(yīng)對(duì)此類(lèi)系統(tǒng)的開(kāi)發(fā),在沒(méi)有進(jìn)行技術(shù)可行性分析就進(jìn)行開(kāi)發(fā),導(dǎo)致開(kāi)發(fā)到一般發(fā)現(xiàn)自己的水平有限,無(wú)法完成系統(tǒng)的開(kāi)發(fā),結(jié)果就是開(kāi)發(fā)出一個(gè)半成品,而半成品的實(shí)際使用意義幾乎為零,畢竟顧客看的只是最后的結(jié)果,只看系統(tǒng)的功能如何,使用起來(lái)方不方便。顧客并不關(guān)心開(kāi)發(fā)人員使用了什么技術(shù)。因此若是因?yàn)樽约旱募夹g(shù)不過(guò)關(guān)而導(dǎo)致系統(tǒng)開(kāi)發(fā)的夭折在顧客看來(lái)就是沒(méi)有完成任務(wù)。諸如此類(lèi)的情況都是浪費(fèi)時(shí)間和人力的表現(xiàn)。由此可見(jiàn),在真正著手開(kāi)發(fā)系統(tǒng)前,對(duì)系統(tǒng)進(jìn)行可行性分析是相當(dāng)重要的。3.2.1環(huán)境可行性分析搜索引擎是網(wǎng)站建設(shè)中針對(duì)“用戶使用網(wǎng)站的便利性”所提供的必要功能,同時(shí)也是“研究網(wǎng)站用戶行為的一個(gè)有效工具”。高效的站內(nèi)檢索可以讓用戶快速準(zhǔn)確地找到目標(biāo)信息,從而更有效地促進(jìn)產(chǎn)品/服務(wù)的銷(xiāo)售,而且通過(guò)對(duì)網(wǎng)站訪問(wèn)者搜索行為的深度分析,對(duì)于進(jìn)一步制定更為有效的網(wǎng)絡(luò)營(yíng)銷(xiāo)策略具有重要價(jià)值。所以搜索引擎是利國(guó)利民的,在環(huán)境上,可行。3.2.2技術(shù)可行性分析開(kāi)發(fā)此系統(tǒng)使用的是Java語(yǔ)言,使用到的技術(shù)包括HTML,Servlet,JDBC等。對(duì)于Java語(yǔ)言方面,本人在校期間主要學(xué)習(xí)的就是Java語(yǔ)言,基本掌握J(rèn)ava的知識(shí)點(diǎn)。而開(kāi)發(fā)網(wǎng)頁(yè)所用到的技術(shù)在畢業(yè)實(shí)習(xí)期間由老師帶著進(jìn)行了學(xué)習(xí)、鞏固,課余時(shí)間也從網(wǎng)上下載了相關(guān)的視頻進(jìn)行學(xué)習(xí),借鑒,對(duì)于基礎(chǔ)的技術(shù)掌握的較為扎實(shí)。在本系統(tǒng)中應(yīng)用到的技術(shù)都有一定的掌握,技術(shù)層面可以實(shí)現(xiàn)。3.2.3經(jīng)濟(jì)可行性分析開(kāi)發(fā)本系統(tǒng)使用的工具為MySQL+Tomcat+Myeclipse三種工具。這三種工具全部都是免費(fèi)的開(kāi)發(fā)工具,只需從網(wǎng)上下載自己所需要的對(duì)應(yīng)的開(kāi)發(fā)的版本,然后進(jìn)行配置,在配置成功后就可以進(jìn)行開(kāi)發(fā)。至于人力成本,該系統(tǒng)都是作者與小組成員一起進(jìn)行開(kāi)發(fā),都是同學(xué),不存在人力成本超標(biāo)的情況。綜上,開(kāi)發(fā)此系統(tǒng)的成本將是較低的,后期進(jìn)行再次開(kāi)發(fā)或維護(hù)的成本也不會(huì)很高。經(jīng)分析:開(kāi)發(fā)此系統(tǒng)經(jīng)濟(jì)方面不存在大問(wèn)題,可行。第4章查詢系統(tǒng)的設(shè)計(jì)4.1系統(tǒng)設(shè)計(jì)的指導(dǎo)思想聚焦搜索引擎系統(tǒng)是一個(gè)基于B/S模式的應(yīng)用系統(tǒng),基于互聯(lián)網(wǎng)信息的種類(lèi)多,數(shù)量大,數(shù)據(jù)訪問(wèn)需要時(shí)效性,用戶使用需要簡(jiǎn)單性等特點(diǎn),在開(kāi)發(fā)系統(tǒng)時(shí)需要考慮到用戶實(shí)際應(yīng)用中的具體情況,便于今后對(duì)系統(tǒng)進(jìn)行擴(kuò)展,增加功能或進(jìn)行與其他系統(tǒng)的業(yè)務(wù)之間的聯(lián)系。4.2系統(tǒng)邏輯思路設(shè)計(jì)用例圖是指用來(lái)幫助開(kāi)發(fā)團(tuán)隊(duì)以一種可視化的方式來(lái)理解整個(gè)系統(tǒng)的功能需求。總的來(lái)說(shuō),用例圖就是軟件系統(tǒng)的功能模塊,也是項(xiàng)目開(kāi)發(fā)的起點(diǎn),從這個(gè)點(diǎn)開(kāi)始,設(shè)計(jì)人員根據(jù)需求來(lái)設(shè)計(jì)系統(tǒng)。也只有畫(huà)好了用例圖,才算是真正了解系統(tǒng),才能真正意義上做出客戶希望的系統(tǒng)。對(duì)于此系統(tǒng)各個(gè)模塊的實(shí)現(xiàn),都是按照如下用例圖的邏輯來(lái)設(shè)計(jì),對(duì)于用例圖的邏輯分析將在本章4.2小節(jié)介紹,如圖所示:圖4.1系統(tǒng)邏輯用例圖4.2系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)聚焦搜索引擎系統(tǒng)作為B/S應(yīng)用系統(tǒng),采用的是目前比較流行的三層架構(gòu)模式來(lái)進(jìn)行開(kāi)發(fā),即表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層。4.2.1表示層表示層,即客戶端訪問(wèn)層,是用戶在使用系統(tǒng)時(shí)進(jìn)行直觀操作的頁(yè)面,其具體表現(xiàn)為HTML的Web頁(yè)面。表示層位于最外層(最上層),最接近用戶。用于顯示數(shù)據(jù)和接收用戶輸入的數(shù)據(jù),為用戶提供一種交互式操作的界面。表示層還要負(fù)責(zé)瀏覽器端的數(shù)據(jù)驗(yàn)證和信息安全處理,為用戶提供前端安全服務(wù)。AJAX異步通信技術(shù)的應(yīng)用使得表示層的功能增強(qiáng),給用戶以更好的界面體驗(yàn)。4.2.2業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層主要負(fù)責(zé)處理表示層和數(shù)據(jù)訪問(wèn)層的交互,它的關(guān)注點(diǎn)主要集中在業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實(shí)現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè)計(jì),也即是說(shuō)它是與系統(tǒng)所應(yīng)對(duì)的領(lǐng)域(Domain)邏輯有關(guān),很多時(shí)候也將業(yè)務(wù)邏輯層稱為領(lǐng)域?qū)?。具體來(lái)說(shuō),由于業(yè)務(wù)操作的特性,系統(tǒng)中會(huì)出現(xiàn)對(duì)某個(gè)業(yè)務(wù)規(guī)則的反復(fù)使用,而在業(yè)務(wù)邏輯層中封裝了各種業(yè)務(wù)操作類(lèi),可以有效地通過(guò)接口來(lái)實(shí)現(xiàn)上層(表現(xiàn)層)對(duì)下層(業(yè)務(wù)邏輯層)的調(diào)用,避免前端代碼過(guò)多影響效率。同時(shí)作為中間層來(lái)調(diào)用數(shù)據(jù)訪問(wèn)層來(lái)進(jìn)行對(duì)數(shù)據(jù)庫(kù)增刪查改的操作,提高系統(tǒng)性能,減少前端對(duì)底層數(shù)據(jù)庫(kù)的操作,增加安全性。4.2.3數(shù)據(jù)訪問(wèn)層數(shù)據(jù)訪問(wèn)層是系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)系統(tǒng)的接口,它封裝了所有的數(shù)據(jù)訪問(wèn)操作,向上層的業(yè)務(wù)邏輯層提供了調(diào)用方法,有效的減少了代碼冗余,在數(shù)據(jù)操作過(guò)程中簡(jiǎn)化了開(kāi)發(fā)的復(fù)雜度,避免了在客戶端對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。4.3系統(tǒng)物理結(jié)構(gòu)設(shè)計(jì)聚焦搜索引擎系統(tǒng)是一個(gè)B/S系統(tǒng),所以在物理結(jié)構(gòu)上可以分為三個(gè)部分:客戶端,應(yīng)用程序服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器。本系統(tǒng)的具體物理結(jié)構(gòu)如圖4.1。圖4.2物理結(jié)構(gòu)圖終端用戶可根據(jù)需要選擇瀏覽器,客戶端無(wú)需安裝軟件也無(wú)需技術(shù)維護(hù),相關(guān)操作只需在服務(wù)器上進(jìn)行即可。數(shù)據(jù)庫(kù)使用MySQL數(shù)據(jù)庫(kù),具有數(shù)據(jù)存儲(chǔ)和管理的功能,提供數(shù)據(jù)訪問(wèn)。4.4系統(tǒng)功能模塊劃分聚焦搜索引擎系統(tǒng)分為前臺(tái)和后臺(tái)兩個(gè)子系統(tǒng),而后臺(tái)維護(hù)子系統(tǒng)主要包括三個(gè)模塊:天氣模塊,新聞模塊,分詞模塊。各個(gè)模塊有不同的功能,用戶登錄后可以根據(jù)需求得到不同的功能體驗(yàn),如圖4.2。圖4.3系統(tǒng)功能模塊4.4.1天氣模塊天氣信息模塊分為通過(guò)本地IP地址直接獲取本地天氣信息和通過(guò)輸入城市名查詢?cè)摮鞘械奶鞖庑畔?。天氣信息的?nèi)容包括:該地當(dāng)日的溫度、PM2.5、污染情況、地理位置、天氣情況、風(fēng)速、濕度、PM2.5等級(jí)、天氣發(fā)布的時(shí)間。獲取天氣信息的方式為調(diào)用百度提供的免費(fèi)天氣開(kāi)放平臺(tái)接口,該平臺(tái)提供了根據(jù)IP地質(zhì)查詢IP所屬城市名、根據(jù)城市名查詢天氣、根據(jù)城市編號(hào)查詢天氣、根據(jù)城市名查詢PM2.5相關(guān)信息。我們判斷是否為城市天氣查詢的依據(jù)是:判斷用戶輸入的查詢語(yǔ)句中是否有“天氣”這個(gè)詞,如果有則對(duì)語(yǔ)句采用中科院分詞系統(tǒng)進(jìn)行分詞提取關(guān)鍵字,依個(gè)對(duì)關(guān)鍵字進(jìn)行判斷是否為城市,如果為城市則查詢?cè)摮鞘械奶鞖猓绻皇浅鞘袆t轉(zhuǎn)為普通分詞查詢。4.4.2業(yè)務(wù)管理模塊在新聞模塊中,主要有:頁(yè)面顯示熱搜榜,用戶根據(jù)新聞屬性分類(lèi)新聞,用戶根據(jù)關(guān)鍵字查詢相關(guān)新聞、頁(yè)面根據(jù)新聞的類(lèi)別顯示所屬新聞。熱搜榜的定義為當(dāng)日用戶搜索最多的新聞,在頁(yè)面上顯示九條熱搜新聞,在頁(yè)面上有“換一換”按鈕可更換當(dāng)日的其它九條熱搜新聞;分類(lèi)新聞的定義為根據(jù)新聞的屬性進(jìn)行分類(lèi)并顯示在頁(yè)面上,用戶可根據(jù)新聞的類(lèi)別查看自己喜歡的新聞,類(lèi)別種類(lèi)例如:熱點(diǎn)、推薦、社會(huì)……根據(jù)關(guān)鍵字查詢相關(guān)新聞的定義為用戶可在頁(yè)面輸入自己想看的新聞從而瀏覽到自己想要的信息;頁(yè)面根據(jù)新聞的類(lèi)別顯示所屬新聞的定義為不同類(lèi)別的新聞被分類(lèi)起來(lái)了,例如用戶想看娛樂(lè)類(lèi)的新聞,只需要點(diǎn)擊娛樂(lè)一選項(xiàng)便可看到所有跟娛樂(lè)相關(guān)的新聞等等。4.4.3分詞模塊在此模塊中,分詞模塊的主要功能為查詢系統(tǒng)服務(wù)器從前臺(tái)獲取到用戶輸入的語(yǔ)句并對(duì)其進(jìn)行分詞提取關(guān)鍵字。此模塊是采用了中科院ictclas2013版分詞系統(tǒng),現(xiàn)在改為Nlpir漢語(yǔ)分詞系統(tǒng),功能上能夠中文分詞、詞性標(biāo)注、命名實(shí)體識(shí)別、用戶詞典功能等,在本模塊中,經(jīng)過(guò)對(duì)該分詞系統(tǒng)的簡(jiǎn)化,只選取了中文分詞一功能。業(yè)務(wù)流程為:提取關(guān)鍵字后,再對(duì)關(guān)鍵字分別進(jìn)行查詢,最后對(duì)查詢出來(lái)的新聞進(jìn)行統(tǒng)計(jì)并排序返回給前臺(tái)。4.5數(shù)據(jù)庫(kù)表說(shuō)明本系統(tǒng)使用的數(shù)據(jù)庫(kù)為MySQL。此次系統(tǒng)的數(shù)據(jù)庫(kù)名為sokrs。由于本系統(tǒng)主要是針對(duì)新聞來(lái)設(shè)計(jì)的,所以對(duì)新聞模塊的數(shù)據(jù)庫(kù)設(shè)計(jì)進(jìn)行主要介紹,其中新聞模塊數(shù)據(jù)庫(kù)的物理設(shè)計(jì)如下圖4.4所示:圖4.4物理設(shè)計(jì)圖其中,day_news(每日熱點(diǎn)新聞)表的設(shè)計(jì)如表4-1所示。表4-1day_news表的設(shè)計(jì)如表4-1所示:day_news_id為表的主鍵,代表的意思為新聞的ID。site_name為新聞?wù)军c(diǎn)名。day_search_id代表的意思為相同新聞的搜索ID。day_news_title代表的是新聞的標(biāo)題。day_news_summary代表的意義為新聞的內(nèi)容。day_news_avatar代表的意義為新聞的圖片網(wǎng)址。day_news_url代表的意義為新聞的網(wǎng)址。day_news_sub_url的意義為新聞的二級(jí)網(wǎng)址。day_news_pub_time代表的意義為新聞的發(fā)表時(shí)間。day_news_remark代表的意義為新聞備注。day_search(熱搜榜)表的設(shè)計(jì)如表4-2所示。表4-2day_search表的設(shè)計(jì)如表4-2所示:station_id為熱搜表的主鍵,代表的意義為新聞的ID,設(shè)計(jì)時(shí)將新聞都編了個(gè)ID。day_search_word代表的意義為新聞的標(biāo)題。day_search_date代表的意義為新聞發(fā)表的時(shí)間。day_search_frequency代表的意義為新聞的搜索的頻率。day_search_state代表的意義為新聞內(nèi)的相關(guān)數(shù)據(jù)。day_search_remark代表的意義為新聞的備注。News(新聞)表的設(shè)計(jì)如表4-3所示表4-3transfer表的設(shè)計(jì)如表4-3所示:news_id為表的主鍵。news_cat_id代表的意義為相關(guān)新聞的id。news_title代表的意義為新聞的標(biāo)題。news_summary代表的意義為新聞的內(nèi)容。news_avatar代表的意義為新聞圖片的網(wǎng)址。news_url代表的意義為新聞的主網(wǎng)址。news_sub_url代表的意義為新聞的二級(jí)網(wǎng)址。news_pub_time代表的意義為新聞的發(fā)表時(shí)間。news_remark代表的意義為新聞備注。news_site代表的意義為新聞所屬的網(wǎng)站。related_searches(相關(guān)新聞)表的設(shè)計(jì)如表4-4所示:表4-4related_searches表的設(shè)計(jì)如表4-4所示:keyword為表的主鍵,代表的意義是關(guān)鍵字。Key_keyword為表的外鍵,代表的意義是關(guān)鍵字相關(guān)的新聞。inverted_index(倒排索引)表的設(shè)計(jì)如表4-5所示:表4-5inverted_index表的設(shè)計(jì)如表4-5所示:word_id為表的主鍵,代表的意義是倒排索引的id。word代表的意義是新聞的關(guān)鍵字。document_frequency代表的意義是關(guān)鍵字所屬文檔的個(gè)數(shù)。inverted_index代表的意義是關(guān)鍵字所屬新聞的倒排索引。inverted_index_file代表的意義是關(guān)鍵字所屬的文檔。city(城市)表的設(shè)計(jì)如表4-6所示:表4-6city表的設(shè)計(jì)如表4-6所示:areaid為表的主鍵,代表的意義是城市ID。district代表的意義是城市的縣。city代表的意義是城市的區(qū)、市。province代表的意義是城市所屬的省份。document(文檔)表的設(shè)計(jì)如表4-7所示:表4-7document表的設(shè)計(jì)如表4-7所示:document_id為表的主鍵,代表的意義是文檔ID。document_title代表的意義是文檔的標(biāo)題。document_summary代表的意義是文檔的摘要。Document_avatar1與document_avatar2代表的意義是文檔圖片的網(wǎng)址。document_url代表的意義是新聞的網(wǎng)址。document_sdm代表隊(duì)意義是新聞的二級(jí)網(wǎng)址。document_tdm代表的意義是新聞的三級(jí)網(wǎng)址。document_time代表的意義是新聞的所屬的時(shí)間。document_pub_time代表的意義是新聞的發(fā)表時(shí)間。document_code代表的意義是新聞文字的編碼格式。document_remark代表的意義是新聞備注。document_site代表的意義是新聞所屬的站名。document_rdm代表的意義是新聞網(wǎng)址的后綴。document_cat代表的意義是新聞的類(lèi)別。news_category(新聞?lì)悇e)表的設(shè)計(jì)如表4-8所示:表4-8news_category表的設(shè)計(jì)如表4-8所示:news_cat_id代表的是新聞?lì)悇e所屬的ID。news_cat代表的是新聞?lì)悇e。第5章查詢系統(tǒng)編碼與實(shí)現(xiàn)聚焦搜索引擎系統(tǒng)在MyEclipse集成環(huán)境下開(kāi)發(fā),結(jié)合Servlet等技術(shù)使用Java語(yǔ)言編程。利用三層模式開(kāi)發(fā),該查詢系統(tǒng)設(shè)計(jì)流程上主要是以從頁(yè)面獲取參數(shù)開(kāi)始直到從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)返回給頁(yè)面結(jié)束,作為查詢系統(tǒng)的初始,根據(jù)用戶的操作需要設(shè)計(jì)了很多相對(duì)應(yīng)功能的接口供上層(表現(xiàn)層)調(diào)用。其中,根據(jù)是否從上層(表現(xiàn)層)獲取數(shù)據(jù)分為兩種接口。除此之外,根據(jù)聚焦搜索引擎系統(tǒng)中的業(yè)務(wù)流程,整合了若干類(lèi)在Util類(lèi)庫(kù)中,供邏輯調(diào)用。綜合的來(lái)說(shuō),根據(jù)表現(xiàn)層的需求在此層進(jìn)行邏輯判定,再調(diào)用下一層(數(shù)據(jù)訪問(wèn)層)相對(duì)應(yīng)的方法查詢數(shù)據(jù)最后返回給前臺(tái)。下面將對(duì)各個(gè)功能實(shí)現(xiàn)的編碼進(jìn)行詳細(xì)的介紹。5.1天氣接口在介紹本系統(tǒng)的接口之前,我首先介紹編寫(xiě)各類(lèi)接口的基礎(chǔ):為了連接百度開(kāi)放平臺(tái)里的各類(lèi)API,我寫(xiě)了一個(gè)工具方法,以后想調(diào)用相類(lèi)似的API時(shí)便可輕松調(diào)用,代碼如下:publicstaticStringconnect_api(Stringurl){ DefaultHttpClienthttpclient=newDefaultHttpClient(); HttpGethttpget=newHttpGet(url); Stringbody_json=""; HttpResponseresponse=httpclient.execute(httpget); HttpEntityentity=response.getEntity(); body_json=EntityUtils.toString(entity); returnbody_json;} 根據(jù)此工具方法便可根據(jù)你API的網(wǎng)絡(luò)地址格式要求得到API提供的信息。以此作為編寫(xiě)各類(lèi)接口的基礎(chǔ)。在主頁(yè)面中,有一個(gè)顯示本地天氣模塊,在加載主頁(yè)面的時(shí)候自動(dòng)顯示你當(dāng)?shù)氐奶鞖?,包括PM2.5值;如何獲得你當(dāng)?shù)氐牡刂肥歉鶕?jù)你客戶端訪問(wèn)主頁(yè)所在的IP地址決定的,其中IP地址是從你訪問(wèn)主頁(yè)時(shí)主頁(yè)向后臺(tái)發(fā)送數(shù)據(jù)的請(qǐng)求頭里得到的。之后就要根據(jù)你得到的IP地址訪問(wèn)百度開(kāi)放平臺(tái)里提供的地址API獲取當(dāng)?shù)孛?,然后根?jù)地名再次訪問(wèn)百度開(kāi)放品臺(tái)里提供的天氣API獲取天氣信息,因?yàn)榘俣忍峁┑腁PI中有一個(gè)就是根據(jù)你的地名獲得天氣信息,最終獲得本地天氣信息。其中獲得本地地名的代碼如下://根據(jù)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");//獲取地級(jí)市 獲得了地名之后,如之前所說(shuō)根據(jù)地名再次訪問(wèn)百度提供的天氣API最終才能獲得地名所在的天氣,根據(jù)地名獲取天氣信息的代碼如下://以下根據(jù)獲取的城市開(kāi)始查天氣 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");由于獲得了地址,所以只要訪問(wèn)百度提供的PM2.5API就可得到地址所在地的PM2.5值,代碼如下://根據(jù)城市獲取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);通過(guò)以上方法最終獲得了本地天氣信息以及PM2.5值,但是此處還需考慮到一個(gè)問(wèn)題,即百度提供的天氣查詢API中不包含某些小地名的天氣,比如我查詢涪陵天氣,可能百度API無(wú)法查詢到涪陵天氣,那么我解決的辦法是,在查詢涪陵天氣并調(diào)用天氣API后判斷返回結(jié)果的狀態(tài)標(biāo)識(shí)碼,假設(shè)標(biāo)識(shí)碼為-1,即表示沒(méi)有該地區(qū)的天氣,則向上進(jìn)行市級(jí)查詢,即重慶市,假設(shè)市級(jí)也沒(méi)有則進(jìn)行省份判斷。其關(guān)鍵代碼如下://假設(shè)狀態(tài)碼為-1時(shí),即表示沒(méi)有該地名的天氣 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{//則向上一級(jí)市區(qū)或省份進(jìn)行天氣查詢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類(lèi)型數(shù)據(jù),我們只要將數(shù)據(jù)的返回給前臺(tái)即可,至此,天氣相關(guān)的接口就算完成了。5.2熱搜榜接口在首頁(yè)中,有一個(gè)顯示當(dāng)日搜索熱度很高的一些新聞的模塊,我們稱之為熱搜榜。對(duì)于熱搜榜里的新聞獲取并不是從網(wǎng)上獲得,而是我們自己判斷并將它們存儲(chǔ)于我們的數(shù)據(jù)庫(kù)中,此接口作為上述的第二種接口(需從界面獲取數(shù)據(jù))還有一個(gè)跟天氣接口不同的是,此接口不從網(wǎng)絡(luò)平臺(tái)提供的API里獲取數(shù)據(jù),是直接從數(shù)據(jù)庫(kù)里獲取數(shù)據(jù)。所以我們只要從數(shù)據(jù)庫(kù)里獲取相關(guān)信息即可,部分關(guān)鍵代碼如下:publicStringBufferday_search(intpage)throwsSQLException{ conn=DBUtil.getConnection(false);//1.獲得跟數(shù)據(jù)庫(kù)的鏈接 sql="selectday_search_wordfromday_searchorderbyday_search.day_search_datedesclimit?,8";//2.創(chuàng)建sql語(yǔ)句 statement=conn.prepareStatement(sql);//3.創(chuàng)建執(zhí)行sql語(yǔ)句對(duì)象 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;}在首頁(yè)上的熱搜榜里的新聞不可能只有8條,所以我們需從主頁(yè)面獲取頁(yè)數(shù)的參數(shù)來(lái)實(shí)現(xiàn)一個(gè)翻頁(yè)的功能,在代碼中我將從數(shù)據(jù)庫(kù)里得到的數(shù)據(jù)裝進(jìn)一個(gè)集合,然而我可不能就這樣返回給前臺(tái)不然前臺(tái)將無(wú)法識(shí)別我的數(shù)據(jù),考慮到String類(lèi)型的字符串比Stringbuffer字符串處理效率上慢的問(wèn)題,所以在此我創(chuàng)建了一個(gè)Stringbuffer字符串以便對(duì)數(shù)據(jù)進(jìn)行處理,最終我將數(shù)據(jù)重組成json數(shù)據(jù)的格式再返回給前臺(tái)。5.3新聞分類(lèi)接口 在此系統(tǒng)有個(gè)功能,那就是用戶可根據(jù)新聞?lì)悇e查看相同類(lèi)別的新聞,那么這里就涉及到一個(gè)新聞分類(lèi)的問(wèn)題,為了實(shí)現(xiàn)這個(gè)功能,我為前臺(tái)寫(xiě)了一個(gè)新聞?lì)悇e的接口,此接口不從前臺(tái)獲取數(shù)據(jù),只需從數(shù)據(jù)庫(kù)讀取新聞?lì)悇e相關(guān)信息即可,代碼如下: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.獲得跟數(shù)據(jù)庫(kù)的鏈接 sql="selectnews_catfromnews_category";//2.創(chuàng)建sql語(yǔ)句 statement=conn.prepareStatement(sql);//3.創(chuàng)建執(zhí)行sql語(yǔ)句對(duì)象 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; }此段代碼就是實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中獲取新聞?lì)悇e功能,對(duì)獲取到的新聞?lì)悇e我將他們放進(jìn)集合,以及按照之前所說(shuō)的效率問(wèn)題我依舊創(chuàng)建了Stringbuffer類(lèi)型的字符串以便操作成json類(lèi)的字符串返回給前臺(tái),以此為之后根據(jù)新聞?lì)悇e查看所屬相關(guān)新聞的功能做了基礎(chǔ)。5.4用戶反饋接口為了能更好的改進(jìn)此系統(tǒng),特增加了一個(gè)用戶反饋的模塊,因此可收集到使用這個(gè)系統(tǒng)的用戶的意見(jiàn),為了實(shí)現(xiàn)這個(gè)功能,我寫(xiě)了一個(gè)能從前臺(tái)獲取用戶建議,包括用戶的信息,用戶的意見(jiàn),用戶的所屬地址。因?yàn)檫@三個(gè)信息都不是屬于同一類(lèi)型的,所以我采用了hashmap集合來(lái)保存這些信息,最終保存到數(shù)據(jù)庫(kù)里。關(guān)鍵代碼如下:conn=DBUtil.getConnection(false);//1.獲得跟數(shù)據(jù)庫(kù)的鏈接sql="INSERTINTOfeedback(feedback_con,feedback_userinfo,feedback_device)VALUES(?,?,?)";//2.創(chuàng)建sql語(yǔ)句 statement=conn.prepareStatement(sql);//3.創(chuàng)建執(zhí)行sql語(yǔ)句對(duì)象 statement.setString(1,hashMap.get("con")); statement.setString(2,hashMap.get("userinfo")); statement.setString(3,hashMap.get("device"));在保存到數(shù)據(jù)庫(kù)的時(shí)候只需要從hashmap中選取將對(duì)應(yīng)的信息最后保存到數(shù)據(jù)庫(kù)就可以了;在此接口的實(shí)現(xiàn)中,只需要從前臺(tái)獲取到用戶在網(wǎng)頁(yè)輸入的信息并保存到數(shù)據(jù)庫(kù)即可,在此需要注意的只有代碼的編碼問(wèn)題。5.5搜索熱詞排行榜接口此接口的對(duì)象是PC客戶端,功能是顯示今日搜索熱詞的排行榜,此接口不從頁(yè)面上獲取信息,只從數(shù)據(jù)庫(kù)讀取相關(guān)信息并返回給前臺(tái),前臺(tái)可根據(jù)此信息顯示熱詞排行榜,此熱詞排行榜服務(wù)對(duì)象是系統(tǒng)后臺(tái)工作人員,其關(guān)鍵代碼如下: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\"}"); 從代碼可以看出,返回給前臺(tái)的代碼依舊考慮到效率問(wèn)題選用了Stringbuffer字符串,作為后面設(shè)計(jì)搜索熱詞頻率走勢(shì)圖的基礎(chǔ)。5.6搜索熱詞頻率走勢(shì)圖接口此接口的對(duì)象是PC客戶端,功能是顯示某一個(gè)熱搜詞在這一個(gè)月所查詢的次數(shù),熱搜詞是從上一個(gè)接口(熱搜詞排行榜接口)獲取,當(dāng)我們點(diǎn)擊排行榜的熱詞時(shí),后臺(tái)獲取點(diǎn)擊的熱詞作為搜索依據(jù)到數(shù)據(jù)庫(kù)去查找近一個(gè)月的查詢次數(shù)并返回給前臺(tái),我們便可根據(jù)這些信息繪制走勢(shì)圖以來(lái)研究用戶研究習(xí)慣,關(guān)鍵代碼如下: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;}此代碼中還有一個(gè)參數(shù)date(日期),此日期的判定是根據(jù)你點(diǎn)擊熱搜詞時(shí)的當(dāng)日時(shí)間,但是既然獲取到當(dāng)日時(shí)間,卻無(wú)法獲取上一個(gè)月的今日時(shí)間,為了得到上一個(gè)月份,所以在讀取數(shù)據(jù)庫(kù)之前還需對(duì)時(shí)間進(jìn)行操作,關(guān)鍵代碼如下: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()); }從代碼可以看出,我首先獲取今天的日期,然后對(duì)日期格式進(jìn)行分解提取出今天所屬的月份,得到了今天所屬月份自然就知道了上一月份,當(dāng)然還要進(jìn)行判斷,如果今天所屬月份是一月份,那么上一個(gè)月份就為十二月,因此簡(jiǎn)單的就得到了上一個(gè)月份,最后得到了上一個(gè)月份就可去數(shù)據(jù)庫(kù)查詢上一個(gè)月的今天到這一個(gè)月的今天的所有數(shù)據(jù)。5.7日志系統(tǒng) 為了更好的對(duì)程序進(jìn)行改進(jìn)以及對(duì)客戶需求的把握,我們?cè)O(shè)計(jì)了一個(gè)日志系統(tǒng),記錄用戶在輸入框輸入的語(yǔ)句用來(lái)了解用戶每一天的訪問(wèn)情況以及用戶最需要什么,其過(guò)程并不難,只是單純的記錄到日志系統(tǒng)中,其代碼如下: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緩存系統(tǒng) 與日志系統(tǒng)不一樣的是,此緩存系統(tǒng)的目的意在為了加快用戶搜索速度以及更快速的顯示結(jié)果,我們?cè)O(shè)計(jì)了一個(gè)緩存系統(tǒng),當(dāng)用戶第一次輸入一個(gè)關(guān)鍵字并查詢到結(jié)果后,我們將結(jié)果保存到緩存系統(tǒng)中,當(dāng)用戶第二次再查詢時(shí),我們便將上次保存到緩存系統(tǒng)中的結(jié)果返回給用戶,這樣避免了再次查詢從而減慢了查詢速度,增加了用戶的查詢體驗(yàn)。與日志系統(tǒng)相同的是,此功能是將寫(xiě)入到系統(tǒng)中的,其關(guān)鍵代碼如下: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普通搜索 在主頁(yè)面上有個(gè)輸入框,用戶可在輸入框輸入自己想搜索的語(yǔ)句并得到相關(guān)信息,此模塊作為此系統(tǒng)的核心,在用戶輸入語(yǔ)句時(shí)要考慮到很多種情況,例如是否為天氣搜索,或者是熱搜詞搜索等等一系列的判斷,將在這里進(jìn)行詳細(xì)分析。 在所有的操作之前,首先我要介紹一個(gè)分詞系統(tǒng),此分詞系統(tǒng)能將一段語(yǔ)句進(jìn)行內(nèi)部判斷并分割,取出關(guān)鍵字返回給工作人員,對(duì)于此次的分詞系統(tǒng),我采用的是中科院的ictclas2013分詞系統(tǒng),在系統(tǒng)的采用上,它提供了很多的方法給后臺(tái)編碼人員,對(duì)于如何提取關(guān)鍵字此處不對(duì)其深入研究,此系統(tǒng)選取了一個(gè)提取關(guān)鍵字的方法作為開(kāi)發(fā)基礎(chǔ)。當(dāng)用戶在頁(yè)面的輸入框輸入語(yǔ)句時(shí),我們對(duì)用戶的語(yǔ)句進(jìn)行判斷,首先進(jìn)行判斷的是是否為熱詞新聞,如果是熱詞新聞就對(duì)此熱詞進(jìn)行一系列的操作,如果不是熱詞則再進(jìn)行第二輪判斷,待會(huì)會(huì)講解。假如此次是熱詞新聞,將對(duì)語(yǔ)句進(jìn)行判斷,關(guān)鍵代碼如下:obj.write_logdao(sInput); if(obj.judge_hotkey(sInput)!=0){ out.print(Tool.return_hotkey(sInput,page)); }else{ jd_wthque(sInput,resp,req,page); } 從代碼可以看到,在進(jìn)行判斷前首先就是將用戶輸入的語(yǔ)句寫(xiě)入日志系統(tǒng)供后臺(tái)人員研究,之后才進(jìn)行熱詞判斷,此熱詞判斷也是寫(xiě)的一個(gè)方法進(jìn)行判斷,大體為到數(shù)據(jù)庫(kù)查找是否有這個(gè)熱詞,如果有則判斷為熱詞,然后調(diào)用熱搜詞方法,該方法的關(guān)鍵代碼為: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); 在代碼中系統(tǒng)自動(dòng)調(diào)用了查詢熱詞(query_hotkey())方法,可以將該熱詞所屬的新聞信息全部得到,查詢熱詞方法有一個(gè)整數(shù)類(lèi)型的新聞id參數(shù),在這之前一個(gè)關(guān)鍵的方法即為判斷熱詞(judge_hotkey())方法,此方法參數(shù)為用戶輸入的語(yǔ)句,是string類(lèi)型。此方法的判斷依據(jù)是,如果用戶輸入的語(yǔ)句為熱詞,那么將去數(shù)據(jù)庫(kù)查找該熱詞所屬的新聞id,如果不為熱詞,則返回0,關(guān)鍵代碼如下: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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年B116型一氧化碳中溫變換催化劑合作協(xié)議書(shū)
- 2025年大功率電源及系統(tǒng)合作協(xié)議書(shū)
- 2025年微電子組件合作協(xié)議書(shū)
- 北京和協(xié)航電科技有限公司的射頻研發(fā)筆試題
- 2025年中班幼兒園教師年度個(gè)人工作總結(jié)(四篇)
- 2025年節(jié)能高效果汁濃縮設(shè)備合作協(xié)議書(shū)
- 2025年鄉(xiāng)村企業(yè)職工勞動(dòng)合同(五篇)
- 2025年產(chǎn)品租賃協(xié)議樣本(2篇)
- 2025年九年級(jí)上冊(cè)數(shù)學(xué)教學(xué)工作總結(jié)模版(三篇)
- 2025年二人合伙開(kāi)店協(xié)議標(biāo)準(zhǔn)版本(三篇)
- 《水電站繼電保護(hù)》課件
- 沈陽(yáng)市第一屆“舒心傳技 莘紳向陽(yáng)”職業(yè)技能大賽技術(shù)工作文件-27-全媒體運(yùn)營(yíng)師
- 2025年多彩貴州航空有限公司招聘筆試參考題庫(kù)含答案解析
- 安全生產(chǎn)網(wǎng)格員培訓(xùn)
- 深圳建筑工程公司財(cái)務(wù)管理制度
- 統(tǒng)編版語(yǔ)文三年級(jí)下冊(cè)第三單元綜合性學(xué)習(xí)中華傳統(tǒng)節(jié)日 活動(dòng)設(shè)計(jì)
- 降低順產(chǎn)產(chǎn)婦產(chǎn)后2小時(shí)失血率PDCA成果匯報(bào)書(shū)
- 小學(xué)數(shù)學(xué)分?jǐn)?shù)四則混合運(yùn)算300題帶答案
- 2024年考研(英語(yǔ)一)真題及參考答案
- 林下野雞養(yǎng)殖建設(shè)項(xiàng)目可行性研究報(bào)告
- 心肺復(fù)蘇術(shù)課件2024新版
評(píng)論
0/150
提交評(píng)論