搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)201461103125_3042531_第1頁
搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)201461103125_3042531_第2頁
搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)201461103125_3042531_第3頁
搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)201461103125_3042531_第4頁
搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)201461103125_3042531_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)學(xué) 號: 姓 名: 學(xué)歷層次: 專 業(yè): 班 級: 指導(dǎo)老師: 完成日期: 摘要隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)上的數(shù)據(jù)也隨著爆炸式地增長。如何最快速篩選出對我們有用的信息成了主要問題。搜索引擎是指根據(jù)一定的策略、運(yùn)用特定的計(jì)算機(jī)程序從互聯(lián)網(wǎng)上搜集信息,在對信息進(jìn)行組織和處理后,為用戶提供檢索服務(wù),將用戶檢索相關(guān)的信息展示給用戶的系統(tǒng)。搜索引擎已經(jīng)成為互聯(lián)網(wǎng)不可缺少的工具,可以幫助人們更快的找到所要的內(nèi)容和信息。提高做事的效率,使互聯(lián)網(wǎng)資源高效的利用。本文主要介紹了搜索引擎是從指定的Web頁面中按照超鏈接進(jìn)行采集、解析,并把解析出來的每條數(shù)據(jù)后加入數(shù)據(jù)庫。用戶可以通過客戶端發(fā)送

2、搜索請求,Web服務(wù)端對數(shù)據(jù)進(jìn)行篩選、排序,最后展示到客戶端。對信息的采集主要采用了HTML解析技術(shù)、通過迭代解析的方式不斷采集數(shù)據(jù)。搜索引擎的整體構(gòu)架了采用了MVC設(shè)計(jì)模型,采用了JSP技術(shù)和Struts2技術(shù),用關(guān)鍵詞匹配算法篩選結(jié)果,搜索結(jié)果匹配度良好。初步完成了搜索引擎的主要功能。關(guān)鍵詞:搜索,數(shù)據(jù)庫,JSP,Struts2AbstractWith the rapid development of the Internet, the data on the network with explosive growth. How to quickly screen out most of

3、our useful information became the main problem. Search engines is according to a certain strategy, using specific computer program information from the Internet. In the information organization and processed, to provide users with retrieval service,show the result to user. Search engine has become a

4、n indispensable tool of the Internet, can help people faster to find the content and information,and improve the efficiency of work, make the Internet resources efficient use.This article mainly introduced the search engine from the specified Web page links according to the collection, analysis, and

5、 add the data whitch analytic by service to the database. The user can through the client sends the search request, web server for data screening, sort, finally thow to client. For the collection of the information of the mainly adopts HTML analytical technology, through the iterative analytical way

6、 to collect data continuously. The search engine's overall frame based on the MVC design model,use JSP technology and struts2 technology. Use keywords matching algorithm screening results, search results matching degree is good. Initially completed the search engine's function.Keywords: sear

7、ch, database, JSP, struts2目錄摘要2Abstract3第一章緒論5第一節(jié)課題研究的目的和意義5第二節(jié)搜索引擎的現(xiàn)狀與前景5一、搜索引擎的現(xiàn)狀:5二、搜索引擎的前景:6第二章需求分析6第一節(jié)開發(fā)背景6第二節(jié)系統(tǒng)功能6一、功能劃分6二、功能描述6第三節(jié)相關(guān)技術(shù)及工具簡介7一、HTML語言簡介7二、JavaScript語言簡介7三、JSP簡介8四、Web開發(fā)輕平臺(tái)Tomcat簡介8五、MYSQL數(shù)據(jù)庫簡介8第三章系統(tǒng)設(shè)計(jì)9第一節(jié)系統(tǒng)整體架構(gòu)9第二節(jié)系統(tǒng)模塊設(shè)計(jì)10一、數(shù)據(jù)采集模塊10二、搜索引擎模塊11第三節(jié)數(shù)據(jù)庫設(shè)計(jì)11第四章系統(tǒng)實(shí)現(xiàn)13第一節(jié)數(shù)據(jù)采集13一、解析數(shù)據(jù)的實(shí)

8、現(xiàn)13第二節(jié)搜索引擎的實(shí)現(xiàn)16第三節(jié)數(shù)據(jù)訪問層的實(shí)現(xiàn)19第五章系統(tǒng)測試20第一節(jié)系統(tǒng)測試的必要性20一、單元測試20二、集成測試21三、驗(yàn)收測試21第二節(jié)采集數(shù)據(jù)模塊的測試21第三節(jié)搜索引擎的測試22結(jié)束語24致謝25參考文獻(xiàn)26第一章 緒論第一節(jié) 課題研究的目的和意義搜索引擎,通常指的是收集了互聯(lián)網(wǎng)上幾千萬到幾十億個(gè)網(wǎng)頁并對網(wǎng)頁中的每一個(gè)文字(即關(guān)鍵詞)進(jìn)行索引,建立索引數(shù)據(jù)庫的全文搜索引擎。當(dāng)用戶查找某個(gè)關(guān)鍵詞的時(shí)候,所有在頁面內(nèi)容中包含了該關(guān)鍵詞的網(wǎng)頁都將作為搜索結(jié)果被搜出來。在經(jīng)過復(fù)雜的算法進(jìn)行排序后,這些結(jié)果將按照與搜索關(guān)鍵詞的相關(guān)度高低,依次排列。隨著信息化的發(fā)展,越來越多的人通過

9、搜索引擎來尋找自己所需要的東西,用戶在搜索引擎中輸入某一關(guān)鍵詞的時(shí)候,會(huì)有成千上萬甚至百萬千萬上億的結(jié)果,那么在茫茫的信息海洋中我們?nèi)绾尾拍茏層脩粽业轿覀兙W(wǎng)站上相關(guān)的內(nèi)容呢?互聯(lián)網(wǎng)的信息如浩瀚的海洋一樣,如何在這個(gè)無邊無際的海洋找出對用戶最有用的信息就是搜索引擎的主要作用。搜索引擎,往往是大多數(shù)用戶進(jìn)入互聯(lián)網(wǎng)的入口。搜索引擎的出現(xiàn),整合了眾多網(wǎng)站信息,恰恰起到了信息導(dǎo)航的作用。通用搜索引擎就如同互聯(lián)網(wǎng)第一次出現(xiàn)的門戶網(wǎng)站一樣,大量的信息整合導(dǎo)航,極快的查詢,將所有網(wǎng)站上的信息整理在一個(gè)平臺(tái)上供網(wǎng)民使用,于是信息的價(jià)值第一次普遍的被眾多商家認(rèn)可,迅速成為互聯(lián)網(wǎng)中最有價(jià)值的領(lǐng)域。搜索引擎的便捷使其

10、成為互聯(lián)網(wǎng)最受歡迎的應(yīng)用之一。以至于有相當(dāng)多的人將瀏覽器的默認(rèn)首頁設(shè)為搜索引擎,甚至形成了將網(wǎng)站名稱輸入到搜索框中而非瀏覽器地址欄這樣獨(dú)特的網(wǎng)絡(luò)導(dǎo)航習(xí)慣??偟膩碚f,搜索引擎直接改變了人們的網(wǎng)絡(luò)習(xí)慣,人們進(jìn)入網(wǎng)絡(luò)第一個(gè)想到的就是搜索引擎。網(wǎng)絡(luò)化就是信息化,在網(wǎng)絡(luò)化的今天、信息爆炸式增長的今天。研究搜索引擎具有重要而深遠(yuǎn)的意義。第二節(jié) 搜索引擎的現(xiàn)狀與前景一、 搜索引擎的現(xiàn)狀: 自1990年,加拿大麥吉爾大學(xué)(University of McGill)計(jì)算機(jī)學(xué)院的師生開發(fā)出Archie,成為意義上的第一個(gè)搜索引擎開始,搜索引擎發(fā)展迅速,越來越貼近人們的需求。目前主流的搜索引擎主要有:Google搜

11、索、百度搜索、搜狗搜索。Google搜索擁有的數(shù)據(jù)庫是幾大搜索引擎中最大的。因此,Google的搜索結(jié)果往往比別的引擎更多。它盡量把與關(guān)鍵詞有關(guān)的頁面都呈現(xiàn)給搜索者,廣泛,但缺乏精度。由于Google的數(shù)據(jù)庫有很多來自blog網(wǎng)站,同時(shí)也有很多blogger搜索Google,因此Google很重視對blog網(wǎng)站資料的索引,搜索結(jié)果中往往含有比其它網(wǎng)站更多的blog信息。百度搜索一直以開發(fā)最符合中國人使用習(xí)慣的搜索引擎為己任,經(jīng)過不斷的努力和堅(jiān)持不懈,百度搜索引擎已成為中國最強(qiáng)大的中文搜索引擎。采用的核心技術(shù):超鏈分析超鏈分析技術(shù),是新一代搜索引擎的關(guān)鍵技術(shù),現(xiàn)在已為世界各大搜索引擎普遍采用,百

12、度總裁李彥宏就是超鏈分析專利的唯一持有人。在學(xué)術(shù)界,一篇論文被引用得越多就說明其越好,學(xué)術(shù)價(jià)值就越高。超鏈分析就是通過分析鏈接網(wǎng)站的多少來評價(jià)被鏈接的網(wǎng)站質(zhì)量,這保證了用戶在百度搜索時(shí),越受用戶歡迎的內(nèi)容排名越靠前。搜狗搜索是由國內(nèi)著名的門戶網(wǎng)站搜狐SOHU.COM運(yùn)作的,搜狐是國內(nèi)最早提供搜索服務(wù)的站點(diǎn)?;ヂ?lián)網(wǎng)概念在國內(nèi)的普及,搜狐功不可沒。在2001年年初由CNAZ(中文網(wǎng)站評估認(rèn)證網(wǎng))舉辦的搜索引擎網(wǎng)絡(luò)專項(xiàng)功能排名調(diào)查中,搜狐名列第一。二、 搜索引擎的前景:搜索引擎是人們使用最多的網(wǎng)絡(luò)工具,人們使用的越多的同時(shí)對它的要求就越高,現(xiàn)在的搜索引擎已經(jīng)不能滿足人們搜索的需要了。據(jù)國際數(shù)據(jù)公司(

13、IDC)曾公布的一份報(bào)告表明,被大肆宣傳為“使用簡便易用,搜索結(jié)果豐富”的搜索引擎技術(shù)正在被信息更集中的局域網(wǎng)取代,因?yàn)榇蠖鄶?shù)搜索系統(tǒng)的表現(xiàn)與用戶的期望值相差太大,諸如數(shù)據(jù)量高速增長的視頻、音頻等多媒體信息的檢索,現(xiàn)在仍然是無法突破的難題。對多媒體內(nèi)容的處理尚不成熟,有的搜索引擎不支持動(dòng)態(tài)網(wǎng)頁。人們期望引擎不僅能挑出自己需要的文章,還能挑出自己所關(guān)心的圖片、視頻、音樂等。如何解決這些難題已成為第三代搜索引擎探索的方向。一個(gè)好的搜索引擎不再僅憑借數(shù)據(jù)庫大小、更新頻率、檢索速度、對多語言的支持這幾個(gè)基本特性來衡量,隨著數(shù)據(jù)庫容量的不斷膨脹,如何從龐大的資料庫中精確地找到正確的資料,被公認(rèn)為是下一代

14、搜索技術(shù)的競爭要點(diǎn)。第二章 需求分析第一節(jié) 開發(fā)背景而隨著新聞技術(shù)的飛速發(fā)展,特別是因特網(wǎng)應(yīng)用的迅速普及,網(wǎng)站越來越多,并且每天全球互聯(lián)網(wǎng)網(wǎng)頁數(shù)目以千萬級的數(shù)量增加。要在浩瀚的網(wǎng)絡(luò)新聞中尋找所需要的材料無異于大海撈針。網(wǎng)頁是因特網(wǎng)的最重要組成部分,也是人們獲取網(wǎng)絡(luò)信息的最主要來源,為了方便人們在大量繁雜的網(wǎng)頁中尋找出自己需要的信息,搜索引擎就應(yīng)運(yùn)而生了。搜索引擎是人們網(wǎng)上購物、看電影、看小說、看圖片等網(wǎng)絡(luò)使用中的第一個(gè)首選入口。其重要性不言而喻?;ヂ?lián)網(wǎng)的海量信息,讓人眼花繚亂,如果在短時(shí)間內(nèi)沒有找到用戶想要的信息,不僅影響用戶的心情,而且影響用戶的工作效率。所以搜索引擎最核心也是最重要的是對關(guān)

15、鍵字的匹配程度。匹配程度越高得到的結(jié)果越貼近用戶的需求,也越得到用戶的青睞。目前的搜索引擎可分為三類:一是全文搜索引擎,它是從互聯(lián)網(wǎng)提取各個(gè)網(wǎng)站的信息(以網(wǎng)頁文字為主),建立起數(shù)據(jù)庫,并能檢索與用戶查詢條件相匹配的記錄,按一定的排列順序返回結(jié)果。二是目錄索引,它是按目錄分類的網(wǎng)站鏈接列表而已,用戶完全可以按照分類目錄找到所需要的信息,不依靠關(guān)鍵詞進(jìn)行查詢。三是元搜索引擎,他先是接受用戶查詢請求后,同時(shí)在多個(gè)搜索引擎上搜索,并將結(jié)果返回給用戶。第二節(jié) 系統(tǒng)功能一、 功能劃分主要功能包括:數(shù)據(jù)采集、數(shù)據(jù)保存、數(shù)據(jù)排序、搜索引擎、前臺(tái)顯示。二、 功能描述(一) 數(shù)據(jù)采集對指定鏈接的網(wǎng)頁中的所有的超連

16、接進(jìn)行采集,然后對沒一條超鏈接進(jìn)行進(jìn)一步的解析,按一定的規(guī)則把超鏈接的網(wǎng)頁的內(nèi)容采集出來。(二) 數(shù)據(jù)保存把采集到的數(shù)據(jù)保存到數(shù)據(jù)庫。數(shù)據(jù)的主要內(nèi)容包括:網(wǎng)頁標(biāo)題、作者、內(nèi)容、發(fā)表時(shí)間、鏈接地址。(三) 數(shù)據(jù)排序?qū)Ψ纤阉鳁l件的數(shù)據(jù)進(jìn)行排序,排序規(guī)則是關(guān)鍵字的匹配和網(wǎng)頁的發(fā)表時(shí)間。(四) 搜索引擎首先響應(yīng)用戶的HTTP請求,獲取搜索關(guān)鍵字;然后查詢數(shù)據(jù)庫里面匹配關(guān)鍵字的數(shù)據(jù),把符合條件的數(shù)據(jù)提取出來,存到一個(gè)臨時(shí)表中;最后查詢臨時(shí)表的數(shù)據(jù)并排序,返回?cái)?shù)據(jù)。(五) 前臺(tái)顯示獲取從服務(wù)器返回的數(shù)據(jù),按照一定的規(guī)則顯示在最后的顯示頁面。第三節(jié) 相關(guān)技術(shù)及工具簡介一、 HTML語言簡介HTML(Hyp

17、er Text Markup Language 超文本標(biāo)記語言)是一種用來制作超文本文檔的簡單標(biāo)記語言。用HTML編寫的超文本文檔稱為HTML文檔,它能獨(dú)立于各種操作系統(tǒng)平臺(tái)(如UNIX,WINDOWS等)。自1990年以來HTML就一直被用作World Wide Web上的信息表示語言,用于描述Homepage的格式設(shè)計(jì)和它與WWW上其它Homepage的連結(jié)信息。HTML文檔(即Homepage的源文件)是一個(gè)放置了標(biāo)記的ASCII文本文件,通常它帶有.html或.htm的文件擴(kuò)展名。生成一個(gè)HTML文檔主要有以下三種途徑:(一) 手工直接編寫手工直接編寫(例如用你所喜愛的ASCII文本編

18、輯器或其它HTML的編輯工具)。(二) 格式轉(zhuǎn)換通過某些格式轉(zhuǎn)換工具將現(xiàn)有的其它格式文檔(如WORD文檔)轉(zhuǎn)換成HTML文檔。(三) 服務(wù)器生成由Web服務(wù)器(或稱HTTP 服務(wù)器)一方實(shí)時(shí)動(dòng)態(tài)地生成。HTML語言是通過利用各種標(biāo)記(tags)來標(biāo)識(shí)文檔的結(jié)構(gòu)以及標(biāo)識(shí)超鏈(Hyperlink)的信息。雖然HTML語言描述了文檔的結(jié)構(gòu)格式,但并不能精確地定義文檔信息必須如何顯示和排列,而只是建議Web瀏覽器(如Mosiac,Netscape等)應(yīng)該如何顯示和排列這些信息,最終在用戶面前的顯示結(jié)果取決于Web瀏覽器本身的顯示風(fēng)格及其對標(biāo)記的解釋能力。這就是為什么同一文檔在不同的瀏覽器中展示的效果會(huì)

19、不一樣。二、 JavaScript語言簡介JavaScript 是一種新的描述語言,它是介于HTML和Java高級語言之間的一種語言,它更接近于高級語言,但易學(xué),功能稍弱。此語言可以被嵌入 HTML 的文件之中,它是一種通用的、基于原型的、面向?qū)ο蟮哪_本語言。它不占用很多系統(tǒng)和網(wǎng)絡(luò)資源的情況下提供一種可以插入到不同的應(yīng)用程序的通用代碼。透過JavaScript可以做到回應(yīng)使用者的需求事件 (如: form 的輸入) 而不用任何的網(wǎng)路來回傳輸資料,所以當(dāng)一位使用者輸入一項(xiàng)資料時(shí),它不用經(jīng)過傳給服務(wù)器端 (server) 處理,再傳回來的過程,而直接可以被客戶端 (client) 的應(yīng)用程式所處理

20、。其中JavaScript與Java的區(qū)別在于: (1) JavaScript是解釋性的語言,當(dāng)程序執(zhí)行的時(shí)候,瀏覽器一邊解釋一邊執(zhí)行。而Java是一種編譯型的語言,必須通過JDK的編譯,在Java虛擬機(jī)上運(yùn)行。(2) 代碼格式不一樣,Java的代碼經(jīng)過JDK編譯后成為二進(jìn)制的以.class作為擴(kuò)展名的文件,而JavaScript是純文本的文件。(3) 在HTML中嵌入的方式不一樣。Java可以通過Applet嵌入HTML中,而JavaScript是直接寫入其中。三、 JSP簡介JSP(JavaServer Pages)是由Sun Microsystems公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)

21、態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。在傳統(tǒng)的網(wǎng)頁HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP標(biāo)記(tag),就構(gòu)成了JSP網(wǎng)頁(*.jsp)。Web服務(wù)器在遇到訪問JSP網(wǎng)頁的請求時(shí),首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML格式返回給客戶。程序片段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁以及發(fā)送 email 等等,這就是建立動(dòng)態(tài)網(wǎng)站所需要的功能。所有程序操作都在服務(wù)器端執(zhí)行,網(wǎng)絡(luò)上傳送給客戶端的僅是得到的結(jié)果,對客戶瀏覽器的要求最低,可以實(shí)現(xiàn)無Plugin,無ActiveX,無Java Applet,甚至無Frame。四、 Web開發(fā)輕平臺(tái)Tomcat簡介Tomcat是

22、一個(gè)免費(fèi)的開源的Serlvet容器,它是Apache基金會(huì)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache,Sun和其它一些公司及個(gè)人共同開發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和Jsp規(guī)范總能在Tomcat中得到體現(xiàn)。與傳統(tǒng)的桌面應(yīng)用程序不同,Tomcat中的應(yīng)用程序是一個(gè)WAR(Web Archive)文件。WAR是Sun提出的一種Web應(yīng)用程序格式,與JAR類似,也是許多文件的一個(gè)壓縮包。這個(gè)包中的文件按一定目錄結(jié)構(gòu)來組織:通常其根目錄下包含有Html和Jsp文件或者包含這兩種文件的目錄,另外還會(huì)有一個(gè)WEB-INF目錄,這個(gè)目錄很重要。通常在WEB-INF目錄下有

23、一個(gè)web.xml文件和一個(gè)classes目錄,web.xml是這個(gè)應(yīng)用的配置文件,而classes目錄下則包含編譯好的Servlet類和Jsp或Servlet所依賴的其它類(如JavaBean)。通常這些所依賴的類也可以打包成JAR放到WEB-INF下的lib目錄下,當(dāng)然也可以放到系統(tǒng)的CLASSPATH中,但那樣移植和管理起來不方便。 在Tomcat中,應(yīng)用程序的部署很簡單,你只需將你的WAR放到Tomcat的webapp目錄下,Tomcat會(huì)自動(dòng)檢測到這個(gè)文件,并將其解壓。你在瀏覽器中訪問這個(gè)應(yīng)用的Jsp時(shí),通常第一次會(huì)很慢,因?yàn)門omcat要將Jsp轉(zhuǎn)化為Servlet文件,然后編譯。

24、編譯以后,訪問將會(huì)很快。另外Tomcat也提供了一個(gè)應(yīng)用:manager,訪問這個(gè)應(yīng)用需要用戶名和密碼,用戶名和密碼存儲(chǔ)在一個(gè)xml文件中。通過這個(gè)應(yīng)用,輔助于Ftp,你可以在遠(yuǎn)程通過Web部署和撤銷應(yīng)用。當(dāng)然本地也可以。五、 MYSQL數(shù)據(jù)庫簡介MySql是一個(gè)快速、多線程、多用戶的SQL數(shù)據(jù)庫服務(wù)器,具有功能強(qiáng),使用簡單,管理方便,運(yùn)行速度快,可靠性高,安全保密等特點(diǎn)。其出現(xiàn)雖然只有短短的數(shù)年時(shí)間,但憑借著“開放源代碼”的東風(fēng),它從眾多的數(shù)據(jù)庫中脫穎而出,成為PHP的首選數(shù)據(jù)庫。除了因?yàn)閹缀跏敲赓M(fèi)的這點(diǎn)之外,支持正規(guī)的SQL查詢語言和采用多種數(shù)據(jù)類型,能對數(shù)據(jù)進(jìn)行各種詳細(xì)的查詢等都是PHP

25、選擇MySql的主要原因。以下是MySql數(shù)據(jù)庫的主要特征。 (1) MySQL的核心程序采用完全的多線程編程。線程是輕量級的進(jìn)程,它可以靈活地為用戶提供服務(wù),而不過多的系統(tǒng)資源。用多線程和C語言實(shí)現(xiàn)的MySQL能很容易充分利用CPU。 (2) MySQL可運(yùn)行在不同的操作系統(tǒng)下。簡單地說,MySQL可以支持Windows95/98/NT/2000以及UNIX、Linux和SUN OS等多種操作系統(tǒng)平臺(tái)。這意味著在一個(gè)操作系統(tǒng)中實(shí)現(xiàn)的應(yīng)用可以很方便地移植到其他的操作系統(tǒng)下。 (3) MySQL有一個(gè)非常靈活而且安全的權(quán)限和口令系統(tǒng)。當(dāng)客戶與MySQL服務(wù)器連接時(shí),他們之間所有的口令傳送被加密,

26、而且MySQL支持主機(jī)認(rèn)證。 (4) MySQL支持ODBC for Windows。MySQL支持所有的ODBC 2.5函數(shù)和其他許多函數(shù),這樣就可以用Access連接MySQL服務(wù)器,從而使得MySQL的應(yīng)用被大大擴(kuò)展。 (5) MySQL支持大型的數(shù)據(jù)庫。雖然對于用PHP編寫的網(wǎng)頁來說只要能夠存放上百條以上的記錄數(shù)據(jù)就足夠了,但MySQL可以方便地支持上千萬條記錄的數(shù)據(jù)庫。作為一個(gè)開放源代碼的數(shù)據(jù)庫,MySQL可以針對不同的應(yīng)用進(jìn)行相應(yīng)的修改。 (6) MySQL擁有一個(gè)非??焖俣曳€(wěn)定的基于線程的內(nèi)存分配系統(tǒng),可以持續(xù)使用面不必?fù)?dān)心其穩(wěn)定性。事實(shí)上,MySQL的穩(wěn)定性足以應(yīng)付一個(gè)超大規(guī)

27、模的數(shù)據(jù)庫。 (7) 強(qiáng)大的查詢功能。MySQL支持查詢的SELECT和WHERE語句的全部運(yùn)算符和函數(shù),并且可以在同一查詢中混用來自不同數(shù)據(jù)庫的表,從而使得查詢變得快捷和方便。 如今,包括Siemens和Silicon Graphics這樣的國際知名公司也開始把MySQL作為其數(shù)據(jù)庫管理系統(tǒng),這就更加證明了MySQL數(shù)據(jù)庫的優(yōu)越性能和廣闊的市場發(fā)展前景。第三章 系統(tǒng)設(shè)計(jì)第一節(jié) 系統(tǒng)整體架構(gòu)該系統(tǒng)所采用的B/S 模式在邏輯體系結(jié)構(gòu)上可以分為用戶表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)服務(wù)層3 層體系統(tǒng)結(jié)構(gòu).B/S 模式有著C/S 模式不可比擬的優(yōu)勢,如:簡化了客戶端,不論基于何種平臺(tái),只須安裝一種通用的瀏覽器

28、,采用同樣的界面訪問;能夠跨越異質(zhì)異構(gòu)網(wǎng)絡(luò);穩(wěn)定性高;特別適用于網(wǎng)上信息發(fā)布;服務(wù)器端升級維護(hù)集中、方便,服務(wù)器端可以任意擴(kuò)充,而對客戶端不產(chǎn)生任何影響等.圖3.1.1為B/S 模式體系結(jié)構(gòu)圖.圖3.1.1第二節(jié) 系統(tǒng)模塊設(shè)計(jì)按照系統(tǒng)分析的結(jié)果,搜索引擎系統(tǒng)設(shè)計(jì)的主要是實(shí)現(xiàn)數(shù)據(jù)采集、數(shù)據(jù)保存、數(shù)據(jù)排序、搜索引擎、前臺(tái)顯示。根據(jù)整體的需求,這個(gè)系統(tǒng)也可以分為兩個(gè)大的分類,即采集數(shù)據(jù)和顯示數(shù)據(jù)。所以搜索系統(tǒng)主要可以分成兩個(gè)模塊:數(shù)據(jù)采集模塊和搜索引擎模塊。一、 數(shù)據(jù)采集模塊數(shù)據(jù)采集模塊的功能又稱“網(wǎng)絡(luò)蜘蛛”。 顧名思義,網(wǎng)絡(luò)蜘蛛就是在網(wǎng)絡(luò)上爬行的程序,用他來抓取web服務(wù)器上的web文檔,它可以在

29、掃描web頁面的同時(shí)檢索其內(nèi)的超鏈接并加入掃描隊(duì)列等待以后掃描。掃描隊(duì)列主要掃描URL鏈接和URL鏈接下的網(wǎng)頁內(nèi)容,包括:網(wǎng)頁標(biāo)題、作者、內(nèi)容、發(fā)表時(shí)間、鏈接地址。獲取到的數(shù)據(jù),逐一保存到數(shù)據(jù)庫中去。具體實(shí)現(xiàn)邏輯如圖。圖3.2.1二、 搜索引擎模塊搜索引擎模塊主要完成用戶對數(shù)據(jù)的搜索功能。用戶使用瀏覽器,輸入搜索的關(guān)鍵字,點(diǎn)擊提交。服務(wù)器收到用戶發(fā)出的搜索請求,獲取請求中的搜索關(guān)鍵字,然后到數(shù)據(jù)庫中搜索匹配關(guān)鍵字的數(shù)據(jù)。取出匹配的數(shù)據(jù)之后按一定的規(guī)則排序,最后返回展示到用戶界面。整個(gè)模塊采用的是MVC三層設(shè)計(jì)模式,M層(即Modle層)代表實(shí)體數(shù)據(jù)模塊,V層(即View層)代表數(shù)據(jù)展示模塊,C

30、層(即Control層)代表邏輯控制模塊。具體設(shè)計(jì)邏輯如圖。圖3.2.2第三節(jié) 數(shù)據(jù)庫設(shè)計(jì)根據(jù)系統(tǒng)要求與模塊設(shè)計(jì),數(shù)據(jù)庫設(shè)計(jì)主要分成兩個(gè)表:數(shù)據(jù)表和排序臨時(shí)表。數(shù)據(jù)表的主要作用是存儲(chǔ)“數(shù)據(jù)采集器”采集下來的數(shù)據(jù),排序臨時(shí)表是根據(jù)搜索關(guān)鍵字取出來排序的數(shù)據(jù)。數(shù)據(jù)表包括的字段有:編號、標(biāo)題、作者、內(nèi)容、發(fā)表時(shí)間、鏈接地址。字段名是否主鍵字段類型字段長度是否為允許為空備注id是bigint32否編號newstitle否varchar100是標(biāo)題newsauthor否varchar100是作者newscontent否text65535是內(nèi)容newsurl否varchar300是鏈接地址newsdate

31、否varchar100是日期表3.3.1排序臨時(shí)表包括的字段有:編號、標(biāo)題、作者、內(nèi)容、發(fā)表時(shí)間、鏈接地址。字段名是否主鍵字段類型字段長度是否為允許為空備注id是bigint32否編號newstitle否varchar100是標(biāo)題newsauthor否varchar100是作者newscontent否text65535是內(nèi)容newsurl否varchar300是鏈接地址newsdate否varchar100是日期newsdate_int否varchar100是日期數(shù)值表3.3.2第四章 系統(tǒng)實(shí)現(xiàn)第一節(jié) 數(shù)據(jù)采集數(shù)據(jù)采集的實(shí)現(xiàn)主要是用了java swing技術(shù)。在操作界面中有url輸入框、設(shè)置抓

32、取周期輸入框。url指的是采集目標(biāo)的網(wǎng)址。抓取周期是隔一定的時(shí)間抓取一次。當(dāng)點(diǎn)擊開始按鈕時(shí),系統(tǒng)會(huì)檢查輸入url的合法性,如果url合法,則檢查抓取周期是否輸入。檢查都通過后,系統(tǒng)啟動(dòng)線程抓取數(shù)據(jù)。實(shí)現(xiàn)效果如圖。圖4.1.1一、 解析數(shù)據(jù)的實(shí)現(xiàn)解析數(shù)據(jù)的實(shí)現(xiàn)主要用到了開源jar包htmlparser.jar,htmlparser.jar可以實(shí)現(xiàn)對幾乎全部網(wǎng)頁的解析。里面包含有多種解析方法。本系統(tǒng)中主要用到了標(biāo)題解析、內(nèi)容解析、作者解析、日期解析。標(biāo)題解析的實(shí)現(xiàn)代碼如下:NodeFilter titleFilter = new TagNameFilter("title");p

33、rivate String getTitle(NodeFilter titleFilter, Parser parser) String titleName = "" try NodeList titleNodeList = (NodeList) parser.parse(titleFilter); if(titleNodeList.size() > 0) Node node_title = titleNodeList.elementAt(0);/取節(jié)點(diǎn) if(node_title != null) titleName = node_title.toPlainText

34、String(); catch (ParserException ex) ex.printStackTrace(); return titleName; 內(nèi)容解析的實(shí)現(xiàn)代碼如下:NodeFilter contentFilter1 = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id", "Cnt-Main-Article-QQ");NodeFilter contentFilter2 = new AndFilter(new TagNameFilter(&

35、quot;div"), new HasAttributeFilter("class", "explain");NodeFilter contentFilter = new OrFilter(contentFilter1,contentFilter2);private String getNewsContent(NodeFilter newsContentFilter, Parser parser) String content = null; StringBuilder builder = new StringBuilder(); try No

36、deList newsContentList = (NodeList) parser.parse(newsContentFilter); for (int i = 0; i < newsContentList.size(); i+) Div newsContenTag = (Div) newsContentList.elementAt(i); builder = builder.append(newsContenTag.getStringText(); content = builder.toString(); if (content != null) parser.reset(); p

37、arser = Parser.createParser(content, "gb2312"); StringBean sb = new StringBean(); sb.setCollapse(true); parser.visitAllNodesWith(sb); content = sb.getStrings(); if ( content != null ) content = content.replaceAll("".*a-z.*", ""); content = content.replace("我來說

38、兩句", ""); else System.out.println("沒有得到新聞內(nèi)容!"); catch (ParserException ex) ex.printStackTrace(); return content; 作者解析的實(shí)現(xiàn)代碼如下:NodeFilter newsauthorFilter1 = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("class", "ll");NodeFilter

39、newsauthorFilter2 = new AndFilter(new TagNameFilter("span"), new HasAttributeFilter("class", "color-a-3");NodeFilter newsauthorFilter = new AndFilter(newsauthorFilter2, new HasParentFilter(newsauthorFilter1);private String getNewsAuthor(NodeFilter newsauthorFilter, Pars

40、er parser) String newsAuthor = "" try /依據(jù)newsauthorFilter的法則對網(wǎng)頁進(jìn)行過濾 NodeList authorList = (NodeList) parser.parse(newsauthorFilter); /獲取責(zé)任編輯字符串 for (int i = 0; i < authorList.size(); i+) Span authorSpan = (Span) authorList.elementAt(i); newsAuthor = authorSpan.getStringText(); catch (Pa

41、rserException ex) ex.printStackTrace(); return newsAuthor; 日期解析的實(shí)現(xiàn)代碼如下:NodeFilter newsdateFilter1 = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("class", "ll");NodeFilter newsdateFilter2 = new AndFilter(new TagNameFilter("span"), new HasAttri

42、buteFilter("class", "article-time");NodeFilter newsdateFilter = new AndFilter(newsdateFilter2, new HasParentFilter(newsdateFilter1);private String getNewsDate(NodeFilter dateFilter, Parser parser) String newsDate = "" try NodeList dateList = (NodeList) parser.parse(date

43、Filter); for (int i = 0; i < dateList.size(); i+) Span dateTag = (Span)dateList.elementAt(i); newsDate = dateTag.getStringText(); catch (ParserException ex) ex.printStackTrace(); return newsDate; 第二節(jié) 搜索引擎的實(shí)現(xiàn)搜索引擎的實(shí)現(xiàn)是整個(gè)系統(tǒng)的核心部分,其主要要解決的問題是提取出匹配搜索關(guān)鍵字的數(shù)據(jù),并進(jìn)行排序。關(guān)鍵字的匹配方式是:先用關(guān)鍵字和數(shù)據(jù)庫中的newstitle字段進(jìn)行匹配,然后再匹配

44、newscontent字段。排列的方式是:先把時(shí)間轉(zhuǎn)換成數(shù)字形式,然后用SQL語句中的從大到小排序。圖4.2.1實(shí)現(xiàn)查詢數(shù)據(jù)的關(guān)鍵代碼如下:public List<NewsBean> getNews(int start, int end, String keyWord)DB db = new DB();List<NewsBean> list = new ArrayList<NewsBean>();ResultSet result = null;try String getSql = "select * from sortedNews order b

45、y newsdate_int DESC limit " + start + "," + end;System.out.println(getSql);result = db.executeQuery(getSql);if(null != result)while(result.next()String title = result.getString("newstitle");String author = result.getString("newsauthor");String content = result.getS

46、tring("newscontent");String url = result.getString("newsurl");String date = result.getString("newsdate");String mTitle = title.replace(keyWord, "<font color="red">" + keyWord+ "</font>");String mContent = getTagContent(content,

47、keyWord);if("".equals(author) | null = author | "null".equals(author)author = "不詳"if("".equals(date) | null = date | "null".equals(date)date = "不詳"System.out.println("content:"+mContent);System.out.println("titile:"+titl

48、e);NewsBean bean = new NewsBean();bean.setNewsTitle(mTitle);bean.setNewsAuthor(author);bean.setNewsContent(mContent);bean.setNewsURL(url);bean.setNewsDate(date);list.add(bean);result.close(); catch (Exception e1) e1.printStackTrace();finallyif(db != null) db.all_close();if(result != null)try result.

49、close(); catch (SQLException e) e.printStackTrace();return list;第三節(jié) 數(shù)據(jù)訪問層的實(shí)現(xiàn)數(shù)據(jù)訪問層是與數(shù)據(jù)庫交互的層面.主要的作用是對數(shù)據(jù)的持久化操作,增強(qiáng)系統(tǒng)的可移植性,隱藏?cái)?shù)據(jù)訪問細(xì)節(jié).在系統(tǒng)實(shí)現(xiàn)過程中,核心業(yè)務(wù)主要通過Web Service層來實(shí)現(xiàn),Web層將用戶請求發(fā)給Web Service層,WebService層進(jìn)行業(yè)務(wù)處理,并通過數(shù)據(jù)訪問層與后臺(tái)數(shù)據(jù)庫相交換,將數(shù)據(jù)結(jié)果發(fā)給Web層。數(shù)據(jù)訪問層實(shí)現(xiàn)的主要方法是JDBC技術(shù)。數(shù)據(jù)庫是用MySQL數(shù)據(jù)庫作為容器。實(shí)現(xiàn)原理如圖。連接數(shù)據(jù)庫代碼如下:public static

50、 ConnectionPool GetPoolInstance()if(poolInstance = null) poolInstance = new ConnectionPool("com.mysql.jdbc.Driver","jdbc:mysql:/localhost:3306/news_db","root", "root");try poolInstance.createPool(); catch (Exception e) e.printStackTrace();return poolInstance;執(zhí)

51、行查詢數(shù)據(jù)操作代碼如下:public ResultSet executeQuery(String sql) throws Exception try /* * Class.forName("xool.ProxoolDriver"); con = * DriverManager.getConnection("proxool.xml-test"); */conn = connPool.getConnection();stmt = conn.createStatement(ResultSet.TYPE_SCROLL_

52、SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs = stmt.executeQuery(sql); catch (SQLException e) throw e;/ catch(NamingException e)throw e;return rs;執(zhí)行更新數(shù)據(jù)庫操作代碼如下:public int executeUpdate(String sql) throws Exception / stmt = null;/ rs=null;int result = 0;try conn = connPool.getConnection();stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);result = stmt.executeUpdate(sql); catch (SQLException ex) System.err.println("執(zhí)行SQL語句出錯(cuò): " + ex.getMe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論