基于jsp的搜索引擎設(shè)計(jì)和實(shí)現(xiàn)電子信息工程專(zhuān)業(yè)

上傳人:文*** 文檔編號(hào):63377604 上傳時(shí)間:2022-03-18 格式:DOC 頁(yè)數(shù):24 大?。?76.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
基于jsp的搜索引擎設(shè)計(jì)和實(shí)現(xiàn)電子信息工程專(zhuān)業(yè)_第1頁(yè)
第1頁(yè) / 共24頁(yè)
基于jsp的搜索引擎設(shè)計(jì)和實(shí)現(xiàn)電子信息工程專(zhuān)業(yè)_第2頁(yè)
第2頁(yè) / 共24頁(yè)
基于jsp的搜索引擎設(shè)計(jì)和實(shí)現(xiàn)電子信息工程專(zhuān)業(yè)_第3頁(yè)
第3頁(yè) / 共24頁(yè)

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《基于jsp的搜索引擎設(shè)計(jì)和實(shí)現(xiàn)電子信息工程專(zhuān)業(yè)》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《基于jsp的搜索引擎設(shè)計(jì)和實(shí)現(xiàn)電子信息工程專(zhuān)業(yè)(24頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 題目:基于jsp的搜索引擎 摘 要 隨著互聯(lián)網(wǎng)的不斷發(fā)展和日益普及,網(wǎng)上的信息量在迅速地增長(zhǎng),在2004年4月,全球Web頁(yè)面的數(shù)目已經(jīng)超過(guò)40億,中國(guó)的網(wǎng)頁(yè)數(shù)估計(jì)也超過(guò)了3億。 目前人們從網(wǎng)上獲得信息的主要工具是瀏覽器,搜索引擎在網(wǎng)絡(luò)中占有舉足輕重的地位,本文將在此深入的對(duì)搜索引擎做一個(gè)研究與闡述。并且詳細(xì)介紹了基于因特網(wǎng)的搜索引擎的系統(tǒng)結(jié)構(gòu),然后從網(wǎng)絡(luò)機(jī)器人、索引引擎、Web服務(wù)器三個(gè)方面進(jìn)行詳細(xì)的說(shuō)明。為了更加深刻的理解這種技術(shù),本人還親自實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的搜索引擎Damon。 關(guān)鍵詞: 1、jsp搜

2、索引擎 2、spider 3、Lucene 目 錄 一、前言 6 二、搜索引擎的歷史淵源 7 三、搜索引擎基本結(jié)構(gòu) 9 (一)網(wǎng)絡(luò)機(jī)器人 9 (二)索引與搜索 9 (三)Web服務(wù)器 10 (四)搜索引擎的主要指標(biāo)及分析 10 四、網(wǎng)絡(luò)機(jī)器人? 11 (一)什么是網(wǎng)絡(luò)機(jī)器人 11 (二)網(wǎng)絡(luò)機(jī)器人的結(jié)構(gòu)分析 11 (三)Spider程序結(jié)構(gòu) 12 (四)如何提高程序性能 13 五、基于Tomcat的Web服務(wù)器jsp搜索引擎程序設(shè)計(jì)詳解 14 (一)開(kāi)發(fā)工具、平臺(tái)及資源? 14 (二)Lucene開(kāi)源組件簡(jiǎn)介 14 (三)引入基于Tomcat的

3、Web服務(wù)器開(kāi)發(fā)設(shè)計(jì) 15 (四)用戶(hù)接口設(shè)計(jì) 16 (五)機(jī)器人的設(shè)計(jì)分析 18 (六)關(guān)于程序說(shuō)明 23 六、在Tomcat上部署項(xiàng)目 24 七、總結(jié) 25 致謝 26 參考文獻(xiàn) 27 一、前言 在網(wǎng)絡(luò)迅速發(fā)展的今天,面臨非常豐富的網(wǎng)絡(luò)資源,不論我們是學(xué)習(xí)、研究、還是工作需要在網(wǎng)絡(luò)上能查找到相關(guān)的資料信息,人們現(xiàn)在對(duì)網(wǎng)絡(luò)的依賴(lài)程度越來(lái)越高,但是如何有效的搜索信息卻是一件困難的事情。但是幸運(yùn)的是類(lèi)似于百度、Google這樣的搜索網(wǎng)站的出現(xiàn)能幫助我們解決這樣的問(wèn)題,使我們可以在網(wǎng)絡(luò)中查找自己所需要的信息資源。從理論上講所有的用戶(hù)都可以從搜索出發(fā)到達(dá)自己想去

4、的網(wǎng)上任何一個(gè)地方。并且我們?cè)诰W(wǎng)絡(luò)中可以找到幾乎我們需要的一切的可能的東西,本文從搜索引擎發(fā)展歷史開(kāi)始,然后詳細(xì)介紹了程序中使用的組件Lucene,重點(diǎn)闡述了全文搜索引擎的基本原理、所采用的相關(guān)技術(shù),進(jìn)而引出專(zhuān)題搜索引擎,并且為提高專(zhuān)題性所采取的一些方法。分析了網(wǎng)頁(yè)文檔半結(jié)構(gòu)化的數(shù)據(jù)特點(diǎn)以及使用自己編寫(xiě)的spider程序從Internet上取回綜合的信息經(jīng)過(guò)Lucene處理加入索引文件中,最終用戶(hù)在客戶(hù)端輸入關(guān)鍵字后實(shí)現(xiàn)將與關(guān)鍵字相關(guān)信息返回給用戶(hù)。 二、搜索引擎的歷史淵源 早在 Web出現(xiàn)之前,互聯(lián)網(wǎng)上就已經(jīng)存在許多讓人

5、們共享的信息資源了。那些資源當(dāng)時(shí)主要存在于各種允許匿名訪(fǎng)問(wèn)的FTP 站點(diǎn)(anonymous ftp),內(nèi)容以學(xué)術(shù)技術(shù)報(bào)告、研究性軟件居多,它們以計(jì)算機(jī)文件的形式存在,文字材料的編碼通常是PostScript 或者純文本(那時(shí)還沒(méi)有HTML)。在互聯(lián)網(wǎng)發(fā)展初期,網(wǎng)站相對(duì)較少,信息查找比較容易。然而伴隨互聯(lián)網(wǎng)爆炸性的發(fā)展,普通網(wǎng)絡(luò)用戶(hù)想找到所需的資料簡(jiǎn)直如同大海撈針,這時(shí)為滿(mǎn)足大眾信息檢索需求的專(zhuān)業(yè)搜索網(wǎng)站便應(yīng)運(yùn)而生了。為了便于人們?cè)诜稚⒌腇TP 資源中找到所需的東西,1990年由蒙特利爾大學(xué)學(xué)生Alan?Emtage發(fā)明的Archie。雖然當(dāng)時(shí)World?Wide?Web還未出現(xiàn),但網(wǎng)絡(luò)中文件

6、傳輸還是相當(dāng)頻繁的,而且由于大量的文件散布在各個(gè)分散的FTP主機(jī)中,查詢(xún)起來(lái)非常不便,因此Alan?Emtage想到了開(kāi)發(fā)一個(gè)可以以文件名查找文件的系統(tǒng),于是便有了Archie。   Archie工作原理與現(xiàn)在的搜索引擎已經(jīng)很接近,它依靠腳本程序自動(dòng)搜索網(wǎng)上的文件,然后對(duì)有關(guān)信息進(jìn)行索引,供使用者以一定的表達(dá)式查詢(xún)。受其啟發(fā), 1993 年Matthew Gray 開(kāi)發(fā)了World Wide Web Wanderer,它是 世界上第一個(gè)利用HTML 網(wǎng)頁(yè)之間的鏈接關(guān)系來(lái)監(jiān)測(cè)Web 發(fā)展規(guī)模的“機(jī)器人”(robot )程序。現(xiàn)代搜索引擎的思路源于Wanderer,不少人在此基礎(chǔ)上對(duì)它的蜘蛛程

7、序做了改進(jìn)。 當(dāng)時(shí),“機(jī)器人”一詞在編程者中十分流行。電腦“機(jī)器人”(Computer?Robot)是指某個(gè)能以人類(lèi)無(wú)法達(dá)到的速度不間斷地執(zhí)行某項(xiàng)任務(wù)的軟件程序。由于專(zhuān)門(mén)用于檢索信息的“機(jī)器人”程序像蜘蛛一樣在網(wǎng)絡(luò)間爬來(lái)爬去,因此,搜索引擎的“機(jī)器人”程序就被稱(chēng)為“蜘蛛”程序。 1994 年7 月,Michael Mauldin 將John Leavitt 的蜘蛛程序接入到其索引程序中,創(chuàng)建了大家現(xiàn)在熟知的Lycos,成為第一個(gè)現(xiàn)代意義的搜索引擎。在那之后,隨著Web上信息的爆炸性增長(zhǎng),搜索引擎的應(yīng)用價(jià)值也越來(lái)越高,不斷有更新、更強(qiáng)的搜索引擎系統(tǒng)推出。同年,斯坦福(Stanford)大學(xué)的

8、兩名博士生,共同創(chuàng)辦了超級(jí)目錄索引Yahoo,并成功地使搜索引擎的概念深入人心。從此搜索引擎進(jìn)入了高速發(fā)展時(shí)期。 隨著互聯(lián)網(wǎng)規(guī)模的急劇膨脹,一家搜索引擎光靠自己?jiǎn)未颡?dú)斗已無(wú)法適應(yīng)目前的市場(chǎng)狀況,因此現(xiàn)在搜索引擎之間開(kāi)始出現(xiàn)了分工協(xié)作,并有了專(zhuān)業(yè)的搜索引擎技術(shù)和搜索數(shù)據(jù)庫(kù)服務(wù)提供商。如國(guó)外的Inktomi,它本身并不是直接面向用戶(hù)的搜索引擎,但向包括Overture(原GoTo)、LookSmart、MSN、HotBot等在內(nèi)的其他搜索引擎提供全文網(wǎng)頁(yè)搜索服務(wù),因此從這個(gè)意義上說(shuō),它們是搜索引擎的搜索引擎。

9、 三、搜索引擎基本結(jié)構(gòu) 搜索引擎是根據(jù)用戶(hù)的查詢(xún)請(qǐng)求信息,按照一定算法從索引數(shù)據(jù)中查找符合用戶(hù)需求的信息后將結(jié)果返回給用戶(hù)。一般的搜索引擎由網(wǎng)絡(luò)機(jī)器人程序、索引與搜索程序、索引數(shù)據(jù)庫(kù)等部分組成。 圖3-1結(jié)構(gòu)圖 (一)網(wǎng)絡(luò)機(jī)器人 網(wǎng)絡(luò)機(jī)器人也稱(chēng)為“網(wǎng)絡(luò)蜘蛛”(Spider),是一個(gè)功能很強(qiáng)的WEB掃描程序。它可以在掃描WEB頁(yè)面的同時(shí)檢索其內(nèi)的超鏈接并加入掃描隊(duì)列等待以后掃描。因?yàn)閃EB中廣泛使用HTML超鏈接,所以一個(gè)Spider程序理論上可以訪(fǎng)問(wèn)整個(gè)WEB頁(yè)面。 為了保證網(wǎng)絡(luò)機(jī)器人遍歷信息的廣度和深度需

10、要設(shè)定一些重要的鏈接并制定相關(guān)的掃描策略。其設(shè)計(jì)思想就是將整個(gè)網(wǎng)絡(luò)看做一顆樹(shù),通過(guò)遞歸不斷的將符合條件的頁(yè)面的連接拿到進(jìn)行處理。 (二)索引與搜索 網(wǎng)絡(luò)機(jī)器人將遍歷得到的頁(yè)面存放在臨時(shí)數(shù)據(jù)庫(kù)中,如果通過(guò)SQL直接查詢(xún)信息速度將會(huì)難以忍受。為了提高檢索效率,需要建立索引(我們學(xué)過(guò)的SqlServer2005中曾介紹字段添加索引能提高查詢(xún)速度這個(gè)倍數(shù)是驚人的),用戶(hù)輸入搜索條件后搜索程序?qū)⑼ㄟ^(guò)索引數(shù)據(jù)庫(kù)進(jìn)行檢索然后把符合查詢(xún)要求的數(shù)據(jù)返回給用戶(hù)。 (三)Web服務(wù)器 在Web程序開(kāi)發(fā)中,使用的Wdb服務(wù)器有很多種類(lèi),其中比較常見(jiàn)的有,tomcat服務(wù)器、WebLogic服務(wù)器、還有JBos

11、s服務(wù)器,其中tomcat是最比較普遍常用的一個(gè),它以穩(wěn)定的性能,和開(kāi)源的優(yōu)勢(shì)得到了廣大用戶(hù)的承認(rèn),其實(shí)JBoss也是一個(gè)開(kāi)源的但是它的結(jié)構(gòu)比較復(fù)雜使用起來(lái)不是很靈活,而WebLogic則是一款收費(fèi)的商業(yè)型的服務(wù)器,在我實(shí)現(xiàn)的開(kāi)發(fā)中擇用了簡(jiǎn)單使用的tomcat容器作為我web程序的服務(wù)器??蛻?hù)一般通過(guò)瀏覽器進(jìn)行查詢(xún),這就需要系統(tǒng)提供Web服務(wù)器并且與后臺(tái)的搜索邏輯進(jìn)行交互。客戶(hù)在瀏覽器中輸入查詢(xún)條件,Web服務(wù)器接收到客戶(hù)的查詢(xún)條件后在索引數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún)處理然后返回給客戶(hù)端。 (四)搜索引擎的主要指標(biāo)及分析 搜索引擎的主要指標(biāo)有響應(yīng)時(shí)間、準(zhǔn)確率、相關(guān)度等。這些指標(biāo)決定了搜索引擎的技術(shù)指標(biāo)

12、。搜索引擎的技術(shù)指標(biāo)決定了搜索引擎的評(píng)價(jià)指標(biāo)。好的搜索引擎應(yīng)該是具有較快的反應(yīng)速度和準(zhǔn)確率的,當(dāng)然這些都需要搜索引擎技術(shù)指標(biāo)來(lái)保障。 (1)準(zhǔn)確率:一次搜索結(jié)果中符合用戶(hù)要求的數(shù)目與該次搜索結(jié)果總數(shù)之比 (2)相關(guān)度:用戶(hù)查詢(xún)與搜索結(jié)果之間相似度的一種度量 (3)精確度:對(duì)搜索結(jié)果的排序分級(jí)能力和對(duì)垃圾網(wǎng)頁(yè)的抗干擾能力 四、網(wǎng)絡(luò)機(jī)器人? (一)什么是網(wǎng)絡(luò)機(jī)器人 網(wǎng)絡(luò)機(jī)器人又稱(chēng)為Spider程序,是一種專(zhuān)業(yè)的網(wǎng)頁(yè)爬蟲(chóng)程序。它能查找大量的Web頁(yè)面。從一個(gè)簡(jiǎn)單的Web入口頁(yè)面上開(kāi)始執(zhí)行,然后通過(guò)其超鏈接一次遞歸訪(fǎng)問(wèn)其他頁(yè)面,因此理論上網(wǎng)絡(luò)機(jī)器人可以?huà)呙杌ヂ?lián)網(wǎng)

13、上的所有頁(yè)面。但是實(shí)際中并非如此,因?yàn)檫@樣將會(huì)耗去大量的時(shí)間和金錢(qián),一次所有的企業(yè)基于商業(yè)盈利的角度都不會(huì)不停的使用網(wǎng)絡(luò)機(jī)器人進(jìn)行搜索WEB頁(yè)面。一般來(lái)說(shuō)這些企業(yè)都是定時(shí)的進(jìn)行索引數(shù)據(jù)庫(kù)的更新,據(jù)說(shuō)Google是每隔28天進(jìn)行一次索引數(shù)據(jù)庫(kù)的更新并維護(hù)這些大型數(shù)據(jù)庫(kù)。 (二)網(wǎng)絡(luò)機(jī)器人的結(jié)構(gòu)分析 Internet是建立在很多相關(guān)協(xié)議基礎(chǔ)上的,而更復(fù)雜的協(xié)議又建立在系統(tǒng)層協(xié)議之上。Web就是建立在HTTP ( Hypertext Transfer Protocol ) 協(xié)議基礎(chǔ)上,而HTTP又是建立在TCP/IP ( Transmission Control Protocol / Inter

14、net Protocol ) 協(xié)議之上,它同時(shí)也是一種Socket協(xié)議。所以網(wǎng)絡(luò)機(jī)器人本質(zhì)上是一種基于Socket的網(wǎng)絡(luò)程序。 因?yàn)閃eb中的網(wǎng)頁(yè)信息都是使用HTML標(biāo)記語(yǔ)言,因此網(wǎng)絡(luò)機(jī)器人在檢索網(wǎng)頁(yè)時(shí)首先就是對(duì)HTML標(biāo)記進(jìn)行解析。在處理解析之前,先來(lái)了解一下HTML中主要數(shù)據(jù)類(lèi)型。我們?cè)谶M(jìn)行解析的時(shí)候不用關(guān)心所有的標(biāo)簽,只需要對(duì)其中幾種重要的進(jìn)行解析即可。以下是一些HTML基本的標(biāo)簽元素。 (1)腳本:一些嵌入HTML標(biāo)簽中的代碼語(yǔ)言(例如:JavaScript、jsp頁(yè)面中的Java代碼等等) (2)注釋?zhuān)撼绦騿T留下的說(shuō)明文字,對(duì)用戶(hù)是不可見(jiàn)的(即:) (3)簡(jiǎn)單

15、標(biāo)簽:由單個(gè)表示的HTML標(biāo)簽(例如:、 等等) ①超連接標(biāo)簽 超連接定義了WWW通過(guò)Internet鏈接文檔的功能。他們的主要目的是使用戶(hù)能夠任意遷移到新的頁(yè)面,這正是網(wǎng)絡(luò)機(jī)器人最關(guān)心的標(biāo)簽。 ②圖像映射標(biāo)簽 圖像映射是另一種非常重要的標(biāo)簽。它可以讓用戶(hù)通過(guò)點(diǎn)擊圖片來(lái)遷移到新的頁(yè)面中。 ③表單標(biāo)簽 表單是Web頁(yè)面中可以輸入數(shù)據(jù)的單元。許多站點(diǎn)讓用戶(hù)填寫(xiě)數(shù)據(jù)然后通過(guò)點(diǎn)擊按鈕來(lái)提交內(nèi)容,這就是表單的典型應(yīng)用。 ④表格標(biāo)簽 表格是HTML的構(gòu)成部分,通常用來(lái)格式化存放、顯示數(shù)據(jù)。 我們?cè)诰唧w解析這些HTML標(biāo)簽有兩種方法:通過(guò)

16、JavaTM中的Swing類(lèi)來(lái)解析或者通過(guò)組件包中的HTMLParser來(lái)解析,本人在實(shí)際編程中采用后者使用組件對(duì)html進(jìn)行操作。HTMLParser是一個(gè)很優(yōu)秀的開(kāi)源組件,它有很強(qiáng)大的支持HTML解析的功能,下面我就來(lái)介紹一下HTMLParser中的核心組件類(lèi)。 (1)org.htmlparser.Parser 定義了htmlparser的一些基礎(chǔ)類(lèi)。其中最為重要的是Parser類(lèi)。Parser是htmlparser的最核心的類(lèi)。 (2)org.htmlparser.beans對(duì)Visitor和Filter的方法進(jìn)行了封裝,定義了針對(duì)一些常用html元素操作的bean,簡(jiǎn)化對(duì)常用元素的

17、提取操作。 (3)org.htmlparser.nodes定義了基礎(chǔ)的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。 (4)org.htmlparser.tags定義了htmlparser的各種tag。 (5)org.htmlparser.filters定義了htmlparser所提供的各種filter,主要通過(guò)extractAllNodesThatMatch (NodeFilter filter)來(lái)對(duì)html頁(yè)面指定類(lèi)型的元素進(jìn)行過(guò)濾。 (6)org.htmlparser.visitors定義了htmlparser所提供的各種vi

18、sitor,主要通過(guò)visitAllNodesWith (NodeVisitor visitor)來(lái)對(duì)html頁(yè)面元素進(jìn)行遍歷。 (三)Spider程序結(jié)構(gòu) 網(wǎng)絡(luò)機(jī)器人必須從一個(gè)網(wǎng)頁(yè)遷移到另一個(gè)網(wǎng)頁(yè),所以必須找到該頁(yè)面上的超連接。程序首先解析網(wǎng)頁(yè)的HTML代碼,查找該頁(yè)面內(nèi)的超連接然后通過(guò)遞歸和非遞歸兩種結(jié)構(gòu)來(lái)實(shí)現(xiàn)Spider程序。 (1)遞歸結(jié)構(gòu) 遞歸是在一個(gè)方法中調(diào)用自己本身的程序設(shè)計(jì)技術(shù)。雖然比較容易實(shí)現(xiàn)但耗費(fèi)內(nèi)存且不能使用多線(xiàn)程技術(shù),故不適合大型項(xiàng)目。 (2)非遞歸結(jié)構(gòu) 這種方法使用隊(duì)列的數(shù)據(jù)結(jié)構(gòu),當(dāng)Spider程序發(fā)現(xiàn)超連接后并不調(diào)用自己本身而是把超鏈接加入到等待隊(duì)列中。

19、當(dāng)Spider程序掃描完當(dāng)前頁(yè)面后會(huì)根據(jù)制定的策略訪(fǎng)問(wèn)隊(duì)列中的下一個(gè)超鏈接地址。雖然這里只描述了一個(gè)隊(duì)列,但在實(shí)際編程中用到了四個(gè)隊(duì)列,他們每個(gè)隊(duì)列都保存著同樣處理狀態(tài)的URL。 等待隊(duì)列:在這個(gè)隊(duì)列中,URL等待被Spider程序處理。新發(fā)現(xiàn)的URL也被加入到這個(gè)隊(duì)列中 處理隊(duì)列: 當(dāng)Spider程序開(kāi)始處理時(shí),他們被送到這個(gè)隊(duì)列中 錯(cuò)誤隊(duì)列: 如果在解析網(wǎng)頁(yè)時(shí)出錯(cuò),URL將被送到這里。該隊(duì)列中的URL不能被移入其他隊(duì)列中。 完成隊(duì)列: 如果解析網(wǎng)頁(yè)沒(méi)有出錯(cuò),URL將被送到這里。該隊(duì)列中的URL不能被移入其它隊(duì)列中,在同一時(shí)間URL只能在一個(gè)隊(duì)列中,把它稱(chēng)為URL的狀態(tài)。

20、 圖4-1spider運(yùn)行過(guò)程 以上的圖表示了隊(duì)列的變化過(guò)程,在這個(gè)過(guò)程中,當(dāng)一個(gè)URL被加入到等待隊(duì)列中時(shí)Spider程序就會(huì)開(kāi)始運(yùn)行。只要等待隊(duì)列中有一個(gè)網(wǎng)頁(yè)或Spider程序正在處理一個(gè)網(wǎng)頁(yè),程序就會(huì)繼續(xù)他的工作。當(dāng)?shù)却?duì)列為空并且當(dāng)前沒(méi)有任何網(wǎng)頁(yè)時(shí),Spider程序就會(huì)停止它的工作。 (四)如何提高程序性能 Internet中擁有大量的Web頁(yè)面,如果開(kāi)發(fā)出高效的Spider程序是非常重要的。通過(guò)查詢(xún)資料我主要研究了使用Java的多線(xiàn)程技術(shù)提高性能的技術(shù): 線(xiàn)程是通過(guò)程序的一條執(zhí)行路線(xiàn)。多線(xiàn)程是一個(gè)程序同時(shí)運(yùn)行多個(gè)任務(wù)的能

21、力。它是在一個(gè)程序的內(nèi)部進(jìn)行分工合作。 優(yōu)化程序的通常方法是確定瓶頸并改進(jìn)他。瓶頸是一個(gè)程序中最慢的部分,他限制了其他任務(wù)的運(yùn)行。例如:一個(gè)Spider程序需要下載十個(gè)頁(yè)面,要完成這一任務(wù),程序必須向服務(wù)器發(fā)出請(qǐng)求然后接受這些網(wǎng)頁(yè)。當(dāng)程序等待響應(yīng)的時(shí)候其他任務(wù)不能執(zhí)行,這就影響了程序的效率。如果用多線(xiàn)程技術(shù)可以讓這些網(wǎng)頁(yè)的等待時(shí)間合在一起,不用互相影響,這就可以極大的改進(jìn)程序性能。 五、基于Tomcat的Web服務(wù)器jsp搜索引擎程序設(shè)計(jì)詳解 (一)開(kāi)發(fā)工具、平臺(tái)及資源? 1、 MyEclipse 6.0開(kāi)發(fā)工具 2、Sun JDK 1.6.1 3、Tomcat 6.1服務(wù)器

22、 4、開(kāi)源Lucene組件 (二)Lucene開(kāi)源組件簡(jiǎn)介 我在程序設(shè)計(jì)實(shí)現(xiàn)中,使用了lucene開(kāi)源組件,并未使用數(shù)據(jù)庫(kù)做為存放大量信息的索引數(shù)據(jù)庫(kù),最主要的原因就是考慮使用Lucene效率會(huì)大大的高于使用普通數(shù)據(jù)庫(kù)的性能。因此首先簡(jiǎn)單介紹一下Lucene相關(guān)的技術(shù)。 1、什么是Lucene全文檢索以及引入Lucene的原因 Lucene是Jakarta Apache的開(kāi)源項(xiàng)目。它是一個(gè)用Java寫(xiě)的全文索引引擎工具包,可以方便的嵌入到各種應(yīng)用中實(shí)現(xiàn)針對(duì)應(yīng)用的全文索引/檢索功能。如果搜索引擎網(wǎng)絡(luò)機(jī)器人檢索到的網(wǎng)頁(yè)信息放到數(shù)據(jù)庫(kù)中的話(huà),當(dāng)用戶(hù)在客戶(hù)端檢索數(shù)據(jù)的時(shí)候,如果數(shù)據(jù)庫(kù)中存放著大

23、量數(shù)據(jù)的話(huà),沒(méi)有好的數(shù)據(jù)庫(kù)檢索策略,數(shù)據(jù)查詢(xún)速度大大減慢,而且其搜索引擎的性能也會(huì)因此而大打折扣,會(huì)導(dǎo)致用戶(hù)長(zhǎng)期的等待,結(jié)果超出用戶(hù)的人手時(shí)間??紤]以上的原因,我在設(shè)計(jì)的時(shí)候選擇了使用Lucene,將網(wǎng)絡(luò)機(jī)器人,檢索到的網(wǎng)頁(yè)的基本信息交給Lucene處理,經(jīng)過(guò)Lucene處理后將搜索到的網(wǎng)頁(yè)信息建立相應(yīng)的索引,并且存放到Lucene創(chuàng)建的索引文件中去,從而在用戶(hù)檢索相應(yīng)的數(shù)據(jù)的時(shí)候,免去了從數(shù)據(jù)庫(kù)中查詢(xún)的步驟,直接從索引文件中獲取所需的信息,這樣程序?qū)ξ募腎O操作要遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)庫(kù)的檢索的效率。從而提高了程序的性能和用戶(hù)的體驗(yàn)。 2、Lucene的基本介紹 (1)對(duì)于Luc

24、ene的感性認(rèn)識(shí) Lucene的API接口設(shè)計(jì)的比較通用,輸入輸出結(jié)構(gòu)都很像數(shù)據(jù)庫(kù)的表==>記錄==>字段,所以很多傳統(tǒng)的應(yīng)用文件、數(shù)據(jù)庫(kù)等都可以比較方便的映射到Lucene的存儲(chǔ)結(jié)構(gòu)和接口中??傮w上看:可以先把Lucene當(dāng)成一個(gè)支持全文索引的數(shù)據(jù)庫(kù)系統(tǒng),因此Lucene和數(shù)據(jù)庫(kù)在很大程度上有一定的相似度,在Lucene中的索引數(shù)據(jù)源(即:doc(field1,field2...) doc(field1,field2...))很像數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)表,而Lucene中的Document類(lèi)即:(一個(gè)需要進(jìn)行索引的“單元”,一個(gè)Document由多個(gè)字段組成)很類(lèi)似與數(shù)據(jù)庫(kù)中表中的一條記錄(行)

25、,在Lucene中的Field類(lèi)則是充當(dāng)了索引文件中的Decument類(lèi)的屬性的集合字段,它的作用當(dāng)然就是相當(dāng)于數(shù)據(jù)庫(kù)的列的屬性,在我們使用Java也好或者是C#也罷查詢(xún)數(shù)據(jù)庫(kù)的時(shí)候,數(shù)據(jù)庫(kù)返回的結(jié)果集就相當(dāng)于Lucene結(jié)果輸出,也就是Hits類(lèi)對(duì)象了,即:(doc(field1,field2) doc(field1...))在Hits中查詢(xún)結(jié)果集,匹配是由Document組成相當(dāng)于數(shù)據(jù)庫(kù)中查詢(xún)出來(lái)的結(jié)果集。 (2)Lucene的索引效率 前面提到了,我使用Lucene主要的目的就是為了提高索引數(shù)據(jù)庫(kù)中的數(shù)據(jù)查詢(xún)速度,下面我們就來(lái)看看Lucene的基本的索引原理吧,通常書(shū)籍后面常常附關(guān)鍵

26、詞索引表(比如:北京:12, 34頁(yè),上海:3,77頁(yè)……),感性的講它就像我們常用的字典中的目錄很相似,它能幫讀者較快地找到相關(guān)內(nèi)容的頁(yè)碼。而數(shù)據(jù)庫(kù)索引能夠大大提高查詢(xún)的速度原理也是如此,通過(guò)書(shū)后面的索引查找的速度要比一頁(yè)一頁(yè)地翻內(nèi)容高多少倍……而索引之所以效率高,另外一個(gè)原因是它是排好序的。對(duì)于檢索系統(tǒng)來(lái)說(shuō)核心是一個(gè)排序問(wèn)題。 由于數(shù)據(jù)庫(kù)索引不是為全文索引設(shè)計(jì)的,因此,使用like "%keyword%"時(shí),數(shù)據(jù)庫(kù)索引是不起作用的,在使用like查詢(xún)時(shí),搜索過(guò)程又變成類(lèi)似于一頁(yè)頁(yè)翻書(shū)的遍歷過(guò)程了,所以對(duì)于含有模糊查詢(xún)的數(shù)據(jù)庫(kù)服務(wù)來(lái)說(shuō),LIKE對(duì)性能的危害是極大的。我曾經(jīng)在Oracle中做

27、過(guò)一個(gè)實(shí)驗(yàn),在數(shù)據(jù)庫(kù)中使用索引和不使用索引的速度先比,前者是后者速度的將近上百倍,當(dāng)然這個(gè)結(jié)果不是唯一的,對(duì)于數(shù)據(jù)量越大的數(shù)據(jù)庫(kù)中我們使用索引的效率以及能給我們帶來(lái)的方便時(shí)越為明顯的,如果是需要對(duì)多個(gè)關(guān)鍵詞進(jìn)行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。所以建立一個(gè)高效檢索系統(tǒng)的關(guān)鍵是建立一個(gè)類(lèi)似于科技索引一樣的反向索引機(jī)制,將數(shù)據(jù)源排序順序存儲(chǔ)的同時(shí),有另外一個(gè)排好序的關(guān)鍵詞列表,用于存儲(chǔ)關(guān)鍵詞==>文章映射關(guān)系,這樣檢索過(guò)程就是把模糊查詢(xún)變成多個(gè)可以利用索引的精確查詢(xún)的邏輯組合的過(guò)程。從而大大提高了多關(guān)鍵詞查詢(xún)的效率,

28、所以,全文檢索問(wèn)題歸結(jié)到最后是一個(gè)排序問(wèn)題。在本文中我們主要是研究的搜索引擎的效率問(wèn)題,其實(shí)在Lucene中還有很多個(gè)人認(rèn)為很經(jīng)典的技術(shù),比如是分詞技術(shù),還有相關(guān)的信息匹配技術(shù)等等由于時(shí)間和文章篇幅的限制,我在此不多贅述。 (三)引入基于Tomcat的Web服務(wù)器開(kāi)發(fā)設(shè)計(jì) Web服務(wù)器是在網(wǎng)絡(luò)中為實(shí)現(xiàn)信息發(fā)布、資料查詢(xún)、數(shù)據(jù)處理等諸多應(yīng)用搭建基本平臺(tái)的服務(wù)器。Web服務(wù)器如何工作:在Web頁(yè)面處理中大致可分為三個(gè)步驟,第一步,Web瀏覽器向一個(gè)特定的服務(wù)器發(fā)出Web頁(yè)面請(qǐng)求;第二步,Web服務(wù)器接收到Web頁(yè)面請(qǐng)求后,尋找所請(qǐng)求的Web頁(yè)面,并將所請(qǐng)求的Web頁(yè)面?zhèn)魉徒oWeb瀏覽器;第三步

29、,Web服務(wù)器接收到所請(qǐng)求的Web頁(yè)面,并將它顯示出來(lái)。這就是一個(gè)典型的HTTP請(qǐng)求過(guò)程。 Tomcat是一個(gè)開(kāi)放源代碼、運(yùn)行servlet和JSP Web應(yīng)用軟件的基于Java的Web應(yīng)用軟件容器。Tomcat由Apache-Jakarta子項(xiàng)目支持并由來(lái)自開(kāi)放性源代碼Java社區(qū)的志愿者進(jìn)行維護(hù)。Tomcat Server是根據(jù)servlet和JSP規(guī)范進(jìn)行執(zhí)行的,因此我們就可以說(shuō)Tomcat Server也實(shí)行了Apache-Jakarta規(guī)范且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好。 (四)用戶(hù)接口設(shè)計(jì) 1、客戶(hù)端設(shè)計(jì) 一個(gè)良好的查詢(xún)界面非常重要,例如Google就以他簡(jiǎn)潔的查詢(xún)界面

30、而聞名。我在設(shè)計(jì)的時(shí)候也充分考慮了實(shí)用性和簡(jiǎn)潔性。 圖5-1查詢(xún)界面 圖5-2查詢(xún)結(jié)果 2、服務(wù)端設(shè)計(jì) 主要利用jsp技術(shù)實(shí)現(xiàn),用戶(hù)通過(guò)GET方法從客戶(hù)端向服務(wù)端提交查詢(xún)條件,服務(wù)端通過(guò)Tomcat的jsp接受并分析提交參數(shù),再調(diào)用lucene的開(kāi)發(fā)包進(jìn)行搜索操作。最后把搜索的結(jié)果以HTTP消息包的形式發(fā)送至客戶(hù)端,從而完成一次搜索操作。 實(shí)現(xiàn)的關(guān)鍵代碼如下: int thispage = (request.getParameter("thispage") == null) ? Integer.parseInt(re

31、quest.getParameter("thispage"));//當(dāng)前頁(yè)碼 long starttime = System.currentTimeMillis(); //拿到用戶(hù)請(qǐng)求的查詢(xún)內(nèi)容 String queryString = request.getParameter("query"); if ((queryString == null) || queryString.equals("")) { queryString = "dd"; response.sendRedirect("./index.jsp");}

32、 //以下代碼是使用Lucene索引文件進(jìn)行搜索符合條件的內(nèi)容 IndexFiles indexFiles = new IndexFiles(); String path = request.getRealPath("/") + "index"; //建立符合條件的搜索結(jié)果集合存放準(zhǔn)備將其返回給用戶(hù) Hits hits = indexFiles.searchIndexContent(path, queryString); System.out.println("一共查到" + hits.length() + "記錄"); l

33、ong endtime = System.currentTimeMillis(); //將搜用戶(hù)索條件進(jìn)行分詞處理 ChineseAnalyzer abc = new ChineseAnalyzer(); TokenStream tokenStream = null; QueryParser parser = new QueryParser("title", new StandardAnalyzer()); Query query = parser.parse(queryString); //將

34、拿到的內(nèi)容進(jìn)行高亮關(guān)鍵字處理 Highlighter highlighter = new Highlighter (new SimpleHTMLFormatter("", ""), newQueryScorer(query));highlighter.setTextFragmenter(new SimpleFragmenter(99));/ (五)機(jī)器人的設(shè)計(jì)分析 1、程序結(jié)構(gòu)圖如下: 圖5-3 spider程序結(jié)構(gòu) 2、程序關(guān)鍵代碼實(shí)現(xiàn)如下: (1)網(wǎng)絡(luò)機(jī)器人搜索網(wǎng)頁(yè)核心代碼 public void

35、search(Queue queue) { while (!queue.isEmpty()) { // 只要是隊(duì)列不為空則網(wǎng)絡(luò)機(jī)器人工作 url = queue.peek().toString();// 查找列隊(duì) if (!isSearched(searchedsite, url)) { // 查看當(dāng)前連接是否被掃描過(guò) if (isRobotAllowed(new URL(url))) // 檢查該鏈接是否被允許搜索 processHtml(url); // 分析當(dāng)前地址的頁(yè)面 System.out.println("此頁(yè)面禁止爬蟲(chóng)獲取資源!"); queue.re

36、move(); // 搜索操作完成之后進(jìn)行出對(duì)操作。 * 檢查該鏈接是否已經(jīng)被掃描 *已經(jīng)處理完成的URL列表 *當(dāng)前處理的URL字符串 public boolean isSearched(List list, String url) { String url_end_ = ""; if (url.endsWith("/")) { // 測(cè)試此字符串是否以"/"后綴結(jié)束 // 返回指定子字符串("/")在此字符串中最右邊出現(xiàn)處的索引 // (拿到連接地址最右邊的"/"索引) 例如 // 能拿到最右邊的即最后一個(gè)"/"的索引位置, // 最終的目的是

37、要拿到"/"之前的連接地址 url_end_ = url.substring(0, url.lastIndexOf("/")); } else { url_end_ = url + "/";} if (list.size() > 0) { // indexOf(Object o) // 返回此列表中第一次出現(xiàn)的指定元素的索引;如果此列表不包含該元素,則返回 -1 // 我們?cè)诖瞬皇褂醚h(huán)進(jìn)行選重原因就是因?yàn)槭褂胕ndex of方法效率要高些, // 因?yàn)镴ava已經(jīng)將它的算法封裝在里面并且進(jìn)行了優(yōu)化 if (list.indexOf(url) != -1 || l

38、ist.indexOf(url_end_) != -1) { return true; // 如果在list中沒(méi)有找到當(dāng)前要處理的url則表示可以處理 return false; // 否則此鏈接地址已經(jīng)處理過(guò)在此不做任何處理 } * 檢查URL是否被允許搜索 private boolean isRobotAllowed(URL urlToCheck) { String host = urlToCheck.getHost().toLowerCase(); // 獲取給出RUL的主機(jī)并且使用給定 Locale 的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為小寫(xiě) //

39、 System.out.println("主機(jī)="+host); // 獲取主機(jī)不允許搜索的URL緩存 ArrayList disallowList = disallowListCache.get(host); // 如果還沒(méi)有緩存,下載并緩存。 if (disallowList == null) { disallowList = new ArrayList(); URL robotsFileUrl = new URL("http://" + host + "/robots.txt"); BufferedReader reader =

40、new BufferedReader( new InputStreamReader(robotsFileUrl.openStream())); // 讀robot文件,創(chuàng)建不允許訪(fǎng)問(wèn)的路徑列表。 while ((line = reader.readLine()) != null) { if (line.indexOf("Disallow:") == 0) { // 是否包含"Disallow:" String disallowPath = line.substring("Disallow:".length()); // 獲取不允許訪(fǎng)問(wèn)路徑檢查是否有注釋。 int c

41、ommentIndex = disallowPath.indexOf("#"); if (commentIndex != -1) {disallowPath = disallowPath.substring(0, commentIndex);// 去掉注釋}disallowPath = disallowPath.trim(); disallowList.add(disallowPath); } // 在此確隊(duì)列中的元素不是為空的 for (Iterator it = disallowList.iterator(); it.hasNext();) { System.out.

42、println("Disallow is :" + it.next()); }// 緩存此主機(jī)不允許訪(fǎng)問(wèn)的路徑。// 將此主機(jī)名相對(duì)應(yīng)的禁止訪(fǎng)問(wèn)的路徑放到定義的map中disallowListCache.put(host, disallowList); 說(shuō)明: ①以上是網(wǎng)絡(luò)機(jī)器人的核心算法代碼,運(yùn)用的是半自動(dòng)遞歸思想,搜索引擎系統(tǒng)維護(hù)人員將定時(shí)的執(zhí)行網(wǎng)絡(luò)機(jī)器人代碼,來(lái)更新索引數(shù)據(jù)庫(kù)中的內(nèi)容確保用戶(hù)能拿到自己所需要的最符合用戶(hù)的,最新的消息。 ②值得說(shuō)明的一點(diǎn)是,在我做這個(gè)程序的時(shí)候遇見(jiàn)的一個(gè)難題吧,在確定URL的時(shí)候怎么能知道我們?cè)L問(wèn)的網(wǎng)站是否允許我們的搜索引擎訪(fǎng)問(wèn)本網(wǎng)站的內(nèi)容呢,

43、這樣roboots.txt就起到了關(guān)鍵的作用,在此我們介紹一下roboots文件. 搜索引擎通過(guò)一種程序robot(又稱(chēng)spider),自動(dòng)訪(fǎng)問(wèn)互聯(lián)網(wǎng)上的網(wǎng)頁(yè)并獲取網(wǎng)頁(yè)信息。我們可以在您的網(wǎng)站中創(chuàng)建一個(gè)純文本文件robots.txt,在這個(gè)文件中聲明該網(wǎng)站中不想被robot訪(fǎng)問(wèn)的部分,這樣,該網(wǎng)站的部分或全部?jī)?nèi)容就可以不被搜索引擎收錄了,或者指定搜索引擎只收錄指定的內(nèi)容。 robots.txt文件應(yīng)該放在網(wǎng)站根目錄下。舉例來(lái)說(shuō),當(dāng)robots訪(fǎng)問(wèn)一個(gè)網(wǎng)站(比如)時(shí),首先會(huì)檢查該網(wǎng)站中是否存在 網(wǎng)站URL相應(yīng)的 robots.txt的URL http://www.w3.org/r

44、obots.txt,在robots.txt中 Disallow : 該項(xiàng)的值用于描述不希望被訪(fǎng)問(wèn)到的一個(gè)URL,這個(gè)URL可以是一條完整的路徑,也可以是部分的,任何以Disallow開(kāi)頭的URL均不會(huì)被robot訪(fǎng)問(wèn)到。 例如"Disallow: /help"對(duì)/help.html和/help/index.html都不允許搜索引擎訪(fǎng)問(wèn),而"Disallow: /help/"則允許robot訪(fǎng)問(wèn)/help.html,而不能訪(fǎng)問(wèn)/help/index.html。任何一條Disallow記錄為空,說(shuō)明該網(wǎng)站的所有部分都允許被訪(fǎng)問(wèn), 在"/robots.txt"文件中,至少要有一條Disallow記

45、錄。如果"/robots.txt"是一個(gè)空文件,則對(duì)于所有的搜索引擎robot, 該網(wǎng)站都是開(kāi)放的。 (2)網(wǎng)絡(luò)機(jī)器人解析網(wǎng)頁(yè)HTML核心代碼 處理HTML標(biāo)簽 public void dealTag(Tag tag) throws Exception { NodeList list = tag.getChildren(); if (list != null) { NodeIterator it = list.elements(); while (it.hasMoreNodes()) { Node node = it.nextNode(); parserNode

46、(node); 處理HTML標(biāo)簽結(jié)點(diǎn) public void parserNode(Node node) throws Exception { // instanceof 用于判斷所拿到的節(jié)點(diǎn)類(lèi)型是不是標(biāo)準(zhǔn)定義好的節(jié)點(diǎn)類(lèi)型hen if (node instanceof StringNode) { // 判斷是否是文本結(jié)點(diǎn) StringNode sNode = (StringNode) node; StringFilter sf = new StringFilter(keyword, false); search_key_words = sf.accept(sNode)

47、; if (search_key_words) { count++; } // System.out.println("text is :"+sNode.getText().trim()); } else if (node instanceof Tag) {// 判斷是否是標(biāo)簽庫(kù)結(jié)點(diǎn) Tag atag = (Tag) node; if (atag instanceof TitleTag) {// 判斷是否是標(biāo)TITLE結(jié)點(diǎn) srb.setTitle(atag.getText()); } if (atag instanceof LinkTag) {// 判斷是否是標(biāo)

48、LINK結(jié)點(diǎn) LinkTag linkatag = (LinkTag) atag; checkLink(linkatag.getLink(), linklist); / System.out.println("-----------------this is link dealTag(atag); } else if (node instanceof RemarkNode) { // 判斷是否是注釋 } (3)網(wǎng)絡(luò)機(jī)器人與Lucene結(jié)合核心代碼 if (!iswrite) {//切入蜘蛛程序 System.out.println("開(kāi)始為頁(yè)面建立

49、索引" + url + "............
"); IndexFiles.updateURL(path, url); 說(shuō)明:本代碼是將網(wǎng)絡(luò)機(jī)器人拿到符合條件的標(biāo)簽加到Lucene索引文件中,即搜索引擎的索引數(shù)據(jù)庫(kù)。 (六)關(guān)于程序說(shuō)明 (1)本人在網(wǎng)絡(luò)機(jī)器人運(yùn)用了Java語(yǔ)言開(kāi)發(fā),主要涉及到了net和io兩個(gè)包。 (2)還有Java線(xiàn)程技術(shù),由于時(shí)間比較緊迫,本程序只用的了Java中的單線(xiàn)程技術(shù),具體的程序優(yōu)化后期應(yīng)該能涉及到Java中的線(xiàn)程池技術(shù)。 (3)此外還用了第三方開(kāi)發(fā)包htmlparser組件用于解析HTML網(wǎng)頁(yè)標(biāo)簽。 本程序使用的算法是介于遞歸和非

50、遞歸的半自動(dòng)遞歸算法,使用遞歸算法的時(shí)候,如果有意外可能會(huì)導(dǎo)致內(nèi)存溢出,對(duì)于本文的程序如果使用非遞歸算法的話(huà)有點(diǎn)復(fù)雜,會(huì)使得程序的性能無(wú)法達(dá)到最佳的狀態(tài),因?yàn)槲覍?duì)非遞歸的算法進(jìn)行了改造,自己將它命名為半自動(dòng)的非遞歸算法,是本程序性能達(dá)到比較好的狀態(tài)。 六、在Tomcat上部署項(xiàng)目 Tomcat中的應(yīng)用程序是一個(gè)WAR(Web Archive)文件。WAR是Sun提出的一種Web應(yīng)用程序格式,與JAR類(lèi)似,也是許多文件的一個(gè)壓縮包。這個(gè)包中的文件按一定目錄結(jié)構(gòu)來(lái)組織:通常其根目錄下包含有Html和Jsp文件或者包含這兩種文件的目錄,另外

51、還會(huì)有一個(gè)WEB-INF目錄,這個(gè)目錄很重要。通常在WEB-INF目錄下有一個(gè)web.xml文件和一個(gè)classes目錄,web.xml是這個(gè)應(yīng)用的配置文件,它是JavaWeb應(yīng)用程序的入口點(diǎn),而classes目錄下則包含編譯好的Servlet類(lèi)和Jsp或Servlet所依賴(lài)的其它類(lèi)(如JavaBean)。通常這些所依賴(lài)的類(lèi)也可以打包成JAR放到WEB-INF下的lib目錄下,當(dāng)然也可以放到系統(tǒng)的CLASSPATH中。 在Tomcat中,應(yīng)用程序的部署很簡(jiǎn)單,你只需將你的WAR放到Tomcat的webapp目錄下,Tomcat會(huì)自動(dòng)檢測(cè)到這個(gè)文件,并將其解壓。你在瀏覽器中訪(fǎng)問(wèn)這個(gè)應(yīng)用的Jsp

52、時(shí),通常第一次會(huì)很慢,因?yàn)門(mén)omcat要將Jsp轉(zhuǎn)化為Servlet文件,然后編譯。編譯以后,訪(fǎng)問(wèn)將會(huì)很快。 七、總結(jié) 全文搜索引擎已經(jīng)成為人們?cè)谛畔⒒瘯r(shí)代中檢索信息不可缺少的工具。本設(shè)計(jì)將lucene這一開(kāi)源的搜索引擎框架,結(jié)合Java?Web開(kāi)發(fā)流行的SSH、Ajax等技術(shù),實(shí)現(xiàn)一個(gè)可以在小型局域網(wǎng)或海量文件存儲(chǔ)的主機(jī)上進(jìn)行數(shù)據(jù)檢索的引擎。并且通過(guò)Spring可以實(shí)現(xiàn)靈活的配置。為無(wú)法使用互連網(wǎng)搜索引擎下的海量數(shù)據(jù)檢索,提供了一個(gè)很好的解決方案。 致謝 當(dāng)我寫(xiě)完這篇畢業(yè)

53、論文的時(shí)候,心情十分激動(dòng),感慨很多。從開(kāi)始進(jìn)入課題到資料的搜集再到論文的順利完成,整個(gè)過(guò)程都離不開(kāi)指導(dǎo)老師、朋友們的熱情幫助,在這里請(qǐng)接受我誠(chéng)摯的謝意! 首先,我要感謝我的論文指導(dǎo)老師老師。這篇論文的每一步都是在齊老師的悉心指導(dǎo)下完成的。老師為人隨和熱情,正是有了齊老師的無(wú)私幫助與熱忱鼓勵(lì),我的畢業(yè)論文才能夠得以順利完成,這里,我要誠(chéng)摯的向老師說(shuō)一聲:“謝謝您,齊老師。” 此外,我要感謝身邊的朋友們。在這次論文寫(xiě)作過(guò)程中,他們對(duì)我總是有求必應(yīng),幫助我搜集和提供了大量有價(jià)值的文獻(xiàn)資料,幫助我理清了論文的寫(xiě)作思路,對(duì)我的論文提出了諸多寶貴的意見(jiàn)和建議。借此機(jī)會(huì),我要對(duì)各位朋友們的幫助表示真摯

54、的感謝,謝謝你們! 參考文獻(xiàn) [1]似杰.盤(pán)古搜索購(gòu)物資訊引擎的設(shè)計(jì)與實(shí)現(xiàn)[D].北京工業(yè)大學(xué),2013. [2]李雪利.基于Solr的企業(yè)搜索引擎的研究與實(shí)現(xiàn)[D].浙江理工大學(xué),2013. [3]范晨熙.基于Hadoop的搜索引擎的研究與應(yīng)用[D].浙江理工大學(xué),2013. [4]張菊琴.基于模糊聚類(lèi)算法及推薦技術(shù)的搜索引擎結(jié)果排序[D].江西理工大學(xué),2013. [5]裴一蕾,薛萬(wàn)欣,趙宗,陶秋燕.基于用戶(hù)體驗(yàn)視角的搜索引擎評(píng)價(jià)研究[J].情報(bào)科學(xué),2013,05:94-97+112. [6]雷鳴,劉建國(guó),王建勇,陳葆玨.一種基于詞典的搜索引擎系統(tǒng)動(dòng)態(tài)更新

55、模型[J].計(jì)算機(jī)研究與發(fā)展,2000,10:1265-1270. [7]朱亮,顧俊峰,馬范援.基于MobileAgent的搜索引擎關(guān)鍵技術(shù)研究[J].計(jì)算機(jī)工程,2000,08:126-129. [8]項(xiàng)珍.基于語(yǔ)義的搜索引擎探討[J].浙江高校圖書(shū)情報(bào)工作,2008,06:15-20. [9]張杰.基于Web數(shù)據(jù)挖掘的搜索引擎研究[J].信息與電腦(理論版),2013,11:95-96. [10]李豫山.基于聚焦搜索引擎的搜索引擎優(yōu)化策略的研究[J].科技信息,2014,12:10-11. [11]伍大勇.搜索引擎中命名實(shí)體查詢(xún)處理相關(guān)技術(shù)研究[D].哈爾濱工業(yè)大學(xué),2012. [12]宋巍.基于主題的查詢(xún)意圖識(shí)別研究[D].哈爾濱工業(yè)大學(xué),2013. 24

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!