畢業(yè)論文-搜索引擎的設(shè)計與實現(xiàn)_第1頁
畢業(yè)論文-搜索引擎的設(shè)計與實現(xiàn)_第2頁
畢業(yè)論文-搜索引擎的設(shè)計與實現(xiàn)_第3頁
畢業(yè)論文-搜索引擎的設(shè)計與實現(xiàn)_第4頁
畢業(yè)論文-搜索引擎的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 太原理工大學(xué)畢業(yè)設(shè)計(論文)用紙 引言面對巨大的網(wǎng)絡(luò)資源,搜索引擎為所有網(wǎng)上沖浪的用戶提供了一個入口,毫不夸張的說,所有的用戶都可以從搜索動身抵達自己想去的網(wǎng)絡(luò)中的任何一個地方。因此它也成為除電子郵件之外最多人使用的網(wǎng)絡(luò)服務(wù)。搜索引擎技術(shù)伴隨著WWW的成長是有目共睹的。搜索引擎已經(jīng)經(jīng)歷了三代的更新發(fā)展:第一代搜索引擎呈現(xiàn)于1994年。這類搜索引擎一般都索引少于1,000,000個網(wǎng)頁,很少從新搜集網(wǎng)頁并去刷新索引。并且其檢索速率非常慢,正常都要等待10秒乃至更長的時間。在實現(xiàn)技術(shù)上也基本使用比較成熟的IR(Information Retrieval)、網(wǎng)絡(luò)、數(shù)據(jù)庫等技術(shù),相當(dāng)于使用一些已有技

2、術(shù)實現(xiàn)的一個WWW上的應(yīng)用。在1994年3月到4月,網(wǎng)絡(luò)爬蟲World Web Worm (WWWW)平均每天擔(dān)當(dāng)大約1500次查詢。大約在1996年涌起的第二代搜索引擎系統(tǒng)大多選用分布式解決方案(多個微型計算機協(xié)同工作)來提高數(shù)據(jù)規(guī)模、響應(yīng)速率和用戶數(shù)量,它們一般都維持一個大約50,000,000網(wǎng)頁的索引數(shù)據(jù)庫,每天能夠響應(yīng)10,000,000次用戶索引請求。1997年11月,當(dāng)時最先進的幾個搜索引擎堪稱能創(chuàng)建從2,000,000到100,000,000的網(wǎng)頁索引。Altavista搜索引擎宣稱他們每天大抵要承受20,000,000次查詢。2000年搜索引擎大會上,依照Google公司總裁

3、Larry Page的演講,Google正在使用3,000臺運行Linux系統(tǒng)的個人電腦在搜集Web上的網(wǎng)頁,并且以每天30臺的速率向這個微機集群里添加計算機,以維持與網(wǎng)絡(luò)的發(fā)展相同步。每臺微機運行多個爬蟲程序搜集網(wǎng)頁的峰值速率為每秒100個網(wǎng)頁,平均速率為每秒48.5個網(wǎng)頁,每天可以搜集超過4,000,000網(wǎng)頁。搜索引擎一詞在國內(nèi)外因特網(wǎng)領(lǐng)域被普遍使用,但是它的含義卻不盡肖似。在美國搜索引擎通常指的是基于因特網(wǎng)的搜索引擎,他們通過網(wǎng)絡(luò)機器人程序搜集上千萬到幾億個的網(wǎng)頁,而且每個詞都被搜索引擎索引,也就是我們通常說的全文檢索。著名的因特網(wǎng)搜索引擎有First Search、Google、Ho

4、tBot等。在中國,搜索引擎通常指基于網(wǎng)站目錄的索引服務(wù)或是特定網(wǎng)站的索引服務(wù),本人這里研究的是基于因特網(wǎng)的索引技術(shù)。搜索引擎的起源點是1990年由Montreal的McGill University三名學(xué)生(Alan Emtage、Peter Deutsch、Bill Wheelan)發(fā)明的Archie(Archie FAQ)。Archie是第一個自動索引互聯(lián)網(wǎng)上匿名FTP網(wǎng)站文件的程序,但它還不是真正的搜索引擎。Archie是一個可搜索的FTP文件名列表,用戶必須輸入精確的文件名搜索,然后Archie會告訴用戶哪一個FTP地址可以下載該文件。1994年4月,斯坦福大學(xué)(Stanford U

5、niversity)的兩名博士生,美籍華人Jerry Yang(楊致遠)和David Filo共同創(chuàng)辦了Yahoo!。隨著訪問量和收錄鏈接數(shù)的增長,Yahoo目錄開始支持簡單的數(shù)據(jù)庫搜索。因為Yahoo!的數(shù)據(jù)是手工輸入的,所以不能真正被歸為搜索引擎,事實上只是一個可搜索的目錄。1994年初,華盛頓大學(xué)(University of Washington)的學(xué)生Brian Pinkerton開始了他的小項目WebCrawler。WebCrawler是互聯(lián)網(wǎng)上第一個支持搜索文件全部文字的全文搜索引擎,在它之前,用戶只能通過URL和摘要搜索,摘要一般來自人工評論或程序自動取正文的前100個字。199

6、4年7月,卡內(nèi)基梅隆大學(xué)(Carnegie Mellon University) 的Michael Mauldin將John Leavitt的spider程序接入到其索引程序中,創(chuàng)建了Lycos。除了相關(guān)性排序外,Lycos還提供了前綴匹配和字符相近限制,Lycos第一個在搜索結(jié)果中使用了網(wǎng)頁自動摘要。1995年,一種新的搜索引擎形式出現(xiàn)了元搜索引擎(A Meta Search Engine Roundup)。用戶只需提交一次搜索請求,由元搜索引擎負責(zé)轉(zhuǎn)換處理,提交給多個預(yù)先選定的獨立搜索引擎,并將從各獨立搜索引擎返回的所有查詢結(jié)果,集中起來處理后再返回給用戶。第一個元搜索引擎,是Washin

7、gton大學(xué)碩士生 Eric Selberg 和 Oren Etzioni 的 Metacrawler。1995年12月,DEC的正式發(fā)布AltaVista。AltaVista是第一個支持自然語言搜索的搜索引擎,第一個實現(xiàn)高級搜索語法的搜索引擎(如AND、OR、NOT等)。用戶可以用AltaVista搜索新聞組(Newsgroups)的內(nèi)容并從互聯(lián)網(wǎng)上獲得文章,還可以搜索圖片名稱中的文字、搜索Titles、搜索Javaapplets、搜索ActiveX objects。1998年10月之前,Google只是斯坦福大學(xué)(Stanford University)的一個小項目BackRub。1995

8、年博士生Larry Page開始學(xué)習(xí)搜索引擎設(shè)計,于1997年9月15日注冊了的域名,1997年底,在Sergey Brin和Scott Hassan、Alan Steremberg的共同參與下,BachRub開始提供Demo。1999年2月,Google完成了從Alpha版到Beta版的蛻變。Google公司則把1998年9月27日認作自己的生日。Google以網(wǎng)頁級別(Pagerank)為基礎(chǔ),判斷網(wǎng)頁的重要性,使得搜索結(jié)果的相關(guān)性大大增強。Google公司的奇客(Geek)文化氛圍、不作惡(Dont be evil)的理念,為Google贏得了極高的口碑和品牌美譽。2000年1月,兩位北

9、大校友,超鏈分析專利發(fā)明人、前Infoseek資深工程師李彥宏與好友徐勇(加州伯克利分校博士后)在北京中關(guān)村創(chuàng)立了百度(Baidu)公司。2001年8月發(fā)布B搜索引擎Beta版(此前Baidu只為其它門戶網(wǎng)站搜狐、新浪、Tom等提供搜索引擎),2001年10月22日正式發(fā)布Baidu搜索引擎,專注于中文搜索。隨著技術(shù)的進步,搜索引擎的功能有了長足的發(fā)展,相信隨著時代的進步,下一代智能搜索引擎即將進入人們的視界。2 開發(fā)語言及開發(fā)環(huán)境2.1 Java語言2.1.1 平臺無關(guān)性平臺無關(guān)性是指Java能運行于不同的平臺。Java引進虛擬機原理,并運行于虛擬機,實現(xiàn)不同平臺的Java接口之間。使用Ja

10、va編寫的程序能在世界范圍內(nèi)共享。Java的數(shù)據(jù)類型與機器無關(guān),Java虛擬機(Java Virtual Machine)是建立在硬件和操作系統(tǒng)之上,實現(xiàn)Java二進制代碼的解釋執(zhí)行功能,提供于不同平臺的接口。 2.1.2 安全性Java的編程類似C+,學(xué)習(xí)過C+的開發(fā)者能夠很快掌握Java的精髓。Java舍棄了C+的指針對存儲器地址的直接操作,程序運行時,內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指針侵入系統(tǒng)。Java對程序提供了安全管理器,防止程序的非法訪問。 2.1.3 面向?qū)ο驤ava 吸取了C+面向?qū)ο蟮母拍?,將?shù)據(jù)封裝于類中,利用類的優(yōu)點實現(xiàn)了程序的簡潔性以及便于維護性。類的封裝性、

11、繼承性等有關(guān)對象的特性,使程序代碼只需一次編譯,然后通過上述特性反復(fù)利用。程序員只需把主要精力用在類和接口的設(shè)計和應(yīng)用上。Java 提供了眾多的一般對象的類,通過繼承即可使用父類的方法。在 Java 中,類的繼承關(guān)系是單一的非多重的,一個子類只有一個父類,子類的父類又有一個父類。Java 提供的Object 類及其子類的繼承關(guān)系如同一棵倒立的樹形,根類為 Object 類,Object 類功能強大,經(jīng)常會使用到它及其它派生的子類。 2.1.4 分布式Java建立在擴展TCP/IP網(wǎng)絡(luò)平臺上。庫函數(shù)提供了用HTTP和FTP協(xié)議傳送和接受信息的方法。這使得程序員使用網(wǎng)絡(luò)上的文件和使用本機文件一樣容

12、易。 2.1.5 健壯性Java致力于檢查程序在編譯和運行時的錯誤,類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤,Java自己操縱內(nèi)存減少了內(nèi)存出錯的可能性,Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這些功能特征大大提高了開發(fā)Java應(yīng)用程序的周期。2.2 開發(fā)環(huán)境 圖2-1 Java開發(fā)環(huán)境圖Java開發(fā)環(huán)境圖如圖2-1所示,圖中表示出Java拼圖游戲軟件的開發(fā)環(huán)境、具體的目錄存放以及操作環(huán)境等。其中建議使用的操作系統(tǒng)為Microsoft Windows XP,程序開發(fā)語言為Java,下面是JDK的安裝步驟以及配制方法的簡單介紹。JDK下載、安裝及配置:JDK是整個Java的核心,包括了Ja

13、va運行環(huán)境(Java Runtime Environment),一堆Java工具和Java基礎(chǔ)的類庫(rt.jar)。第一步:下載jdk-6u23-windows-i586,Eclipse Indigo;第二步:安裝下載好的JDK是一個可執(zhí)行安裝程序,執(zhí)行安裝即可;第三步:設(shè)置環(huán)境變量打開“我的電腦屬性高級環(huán)境變量系統(tǒng)變量”,設(shè)置以下三個變量:JAVA_HOME= Path=;Java虛擬機的ClassLoader會按照CLASSPATH設(shè)定的路徑搜索class文件。2.3 編譯環(huán)境簡述 MyEclipse企業(yè)級工作平臺(MyEclipseEnterprise Workbench ,簡稱My

14、Eclipse)是對EclipseIDE的擴展,利用它我們可以在數(shù)據(jù)庫和JavaEE的開發(fā)、發(fā)布以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的JavaEE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。MyEclipse 是一個十分優(yōu)秀的用于開發(fā)Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常強大,支持也十分廣泛,尤其是對各種開源產(chǎn)品的支持十分不錯。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF,

15、Struts,Spring, Hibernate,EJB3,JDBC數(shù)據(jù)庫鏈接工具等多項功能??梢哉fMyEclipse是幾乎囊括了目前所有主流開源產(chǎn)品的專屬eclipse開發(fā)工具。3 項目可行性分析3.1 分析方法概述通過研究分析網(wǎng)絡(luò)搜索引擎所具備的能力及實現(xiàn)的方法來確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達到的能力,以最簡潔、最容易的辦法,邊開發(fā)邊測試邊修改,實現(xiàn)一個初級搜索引擎軟件。3.2 評價尺度由于本軟件是一個初級產(chǎn)品,對其要求不是太苛刻,所以能夠保證達到搜索引擎的一般功能。3.3 具體項目分析3.3.1 經(jīng)濟可行性由于本搜索引擎是畢業(yè)設(shè)計,不過分強調(diào)直接的經(jīng)濟效益和其日后的發(fā)展方向,只在注重自

16、身水平和能力的提高,同時對自身的經(jīng)濟要求也不高,只要有一臺能運行Java軟件的電腦便可,所以基本上不用考慮到經(jīng)濟問題。3.3.2 技術(shù)可行性可用與本搜索軟件的編程語言有VB,Java,Delphi等,考慮到用于編寫程序的困難度,和對語言的了解程度,選擇Java作為編程語言。需要對變量定義、變量初始化、界面初始化、數(shù)據(jù)傳遞、然后數(shù)據(jù)處理中的各種操作。3.3.3 操作可行性本程序的開發(fā)作為畢業(yè)設(shè)計,目的在于鞏固先前所學(xué)的知識,以個人為單位,僅供個人平常娛樂所用,無須考慮社會影響,不用考慮法律、版權(quán)等社會因素,且此軟件的開發(fā)不觸犯法律,所以在這方面是完全可行的。4 項目需求分析4.1 OOA方法介紹

17、面向?qū)ο蟮姆治龇椒ǎ∣OA),是在一個系統(tǒng)的開發(fā)過程中進行了系統(tǒng)業(yè)務(wù)調(diào)查以后,按照面向?qū)ο蟮乃枷雭矸治鰡栴}。OOA與結(jié)構(gòu)化分析有較大的區(qū)別。OOA所強調(diào)的是在 HYPERLINK /view/170097.htm t _blank 系統(tǒng)調(diào)查資料的基礎(chǔ)上,針對OO方法所需要的素材進行的歸類分析和整理,而不是對管理業(yè)務(wù)現(xiàn)狀和方法的分析。在用OOA具體地分析一個事物時,大致上遵循如下五個基本步驟: 第一步,確定對象和類。這里所說的對象是對數(shù)據(jù)及其處理方式的抽象,它反映了系統(tǒng)保存和處理現(xiàn)實世界中某些事物的信息的能力。類是多個對象的共同屬性和方法集合的描述,它包括如何在一個類中建立一個新對象的描述。 第

18、二步,確定結(jié)構(gòu)(structure)。結(jié)構(gòu)是指問題域的復(fù)雜性和連接關(guān)系。類成員結(jié)構(gòu)反映了泛化-特化關(guān)系,整體-部分結(jié)構(gòu)反映整體和局部之間的關(guān)系。 第三步,確定主題(subject)。主題是指事物的總體概貌和總體分析模型。 第四步,確定屬性(attribute)。屬性就是數(shù)據(jù)元素,可用來描述對象或分類結(jié)構(gòu)的實例,可在圖中給出,并在對象的存儲中指定。 第五步,確定方法(method)。方法是在收到消息后必須進行的一些處理方法:方法要在圖中定義,并在對象的存儲中指定。對于每個對象和結(jié)構(gòu)來說,那些用來增加、修改、刪除和選擇一個方法本身都是隱含的(雖然它們是要在對象的存儲中定義的,但并不在圖上給出),而

19、有些則是顯示的。4.2 功能需求用戶對于該搜索引擎的需求主要體現(xiàn)在以下幾個功能:實現(xiàn)程序用戶數(shù)據(jù)交互界面;實現(xiàn)客戶端數(shù)據(jù)的傳入;實現(xiàn)數(shù)據(jù)插入數(shù)據(jù)庫;實現(xiàn)數(shù)據(jù)索引的建立;實現(xiàn)后臺數(shù)據(jù)處理;實現(xiàn)后臺處理后數(shù)據(jù)傳出。4.3 性能需求要求該軟件達到以下指標:保證軟件可靠性性;保證軟件高效性;保證軟件準確性。4.4 環(huán)境需求操作系統(tǒng)可以有以下幾種:Win XP/Win Vista/Win 7。硬件要求:奔騰四處理器,主頻2.0GHz,512M以上內(nèi)存。4.5 可靠性需求要保證該搜索引擎程序的穩(wěn)定性,要在完成程序設(shè)計后進行程序穩(wěn)定性測試,檢測出該程序發(fā)生故障的概率。4.6 用戶界面需求利用jsp技術(shù)和cs

20、s技術(shù)對該程序的客戶端界面進行設(shè)計與實現(xiàn),實現(xiàn)用戶友好的界面風(fēng)格,做到界面設(shè)計簡潔大方,時尚新穎,適合各類用戶群體使用。4.7 軟件成本消耗與開發(fā)進度需求由于該軟件只作為畢業(yè)設(shè)計,用于考察學(xué)生對于jsp技術(shù)的理解與應(yīng)用能力,并未涉及軟件的市場推廣等工作,且開發(fā)該軟件不需付費,屬于零成本,所以暫不用考慮軟件的成本消耗。開發(fā)進度嚴格遵守任務(wù)書中的畢業(yè)設(shè)計(論文)進度計劃。4.8 條件假定和限制由于本軟件目前是基礎(chǔ)版本,未做到盡善盡美。如果用戶需要提高版本,本軟件需要根據(jù)使用者者的要求進行進一步的修改。5 總體設(shè)計概要5.1 系統(tǒng)概述搜索HYPERLINK /subview/53607/507835

21、1.htm引擎是指按照特定的HYPERLINK /view/117922.htm策略、使用特定的HYPERLINK /view/178184.htm電腦程序從HYPERLINK /view/6825.htm互聯(lián)網(wǎng)上收集訊息,在對信息進行構(gòu)造和HYPERLINK /view/989420.htm處理后,為用戶提供方便的HYPERLINK /view/677662.htm檢索服務(wù),將用戶檢索擔(dān)的相關(guān)信息呈現(xiàn)給用戶的HYPERLINK /view/25302.htm系統(tǒng)。為了保障用戶查找信息的精度和新鮮度,搜索引擎要求建立并維護一個巨大的索引數(shù)據(jù)庫。一般的搜索引擎由網(wǎng)絡(luò)機器人程序、索引與搜索程序、索

22、引數(shù)據(jù)庫等幾部分組成。搜索引擎系統(tǒng)結(jié)構(gòu)如圖5-1所示。WWWWWW文檔網(wǎng)絡(luò)機器人程序url數(shù)據(jù)庫從Lucene中搜索信息Tomcat服務(wù)器Lucene索引數(shù)據(jù)庫WWW瀏覽器WWW瀏覽器JSP網(wǎng)絡(luò)機器人程序圖5-1 系統(tǒng)結(jié)構(gòu)圖5.2 功能模塊設(shè)計5.2.1 網(wǎng)絡(luò)機器人網(wǎng)絡(luò)機器人也稱為“網(wǎng)絡(luò)爬蟲”(Spider),是一個功能強大的WEB掃描程序。它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁,是搜索引擎的重要構(gòu)成部分。爬蟲從一個或多個初始網(wǎng)頁的URL入手,取得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程當(dāng)中,不斷的從當(dāng)前頁面上抽取新的URL放入隊列,直到滿足系統(tǒng)的特定停止條件。由于WEB中廣泛使用超鏈接,所以一個網(wǎng)絡(luò)爬蟲

23、程序理論上可以訪問全部WEB頁面。為了保障網(wǎng)絡(luò)機器人遍歷訊息的廣度和深度要求設(shè)定一些重要的鏈接并制定相關(guān)的掃描組織策略。網(wǎng)頁搜索策略網(wǎng)頁的抓取策略可以分為深度優(yōu)先、廣度優(yōu)先和最佳優(yōu)先三種策略。深度優(yōu)先在大多情況下會導(dǎo)致爬蟲程序的陷入(trapped)問題,現(xiàn)在常用的是廣度優(yōu)先和最佳優(yōu)先策略。廣度優(yōu)先搜索策略HYPERLINK /view/825760.htm廣度優(yōu)先索引策略是指在抓取過程當(dāng)中,在完成當(dāng)前層次的搜索后,才進行下一層次的搜索。該算法的設(shè)計和實現(xiàn)相對簡單?,F(xiàn)在,為覆蓋盡可能多的網(wǎng)頁,一般使用HYPERLINK /view/825760.htm廣度優(yōu)先搜索算法。也有許多研究將HYPER

24、LINK /view/825760.htm廣度優(yōu)先搜索策略應(yīng)用于聚焦爬蟲中。其基本思路是認為與初始URL在一定鏈接間隔內(nèi)的網(wǎng)頁具有主題相關(guān)性的幾率很大。另外一種方法是將HYPERLINK /view/825760.htm廣度優(yōu)先搜索與網(wǎng)頁過濾技術(shù)相結(jié)合使用,先用HYPERLINK /view/1242613.htm廣度優(yōu)先策略抓取網(wǎng)頁,再將其中無關(guān)的網(wǎng)頁通過技術(shù)過濾掉。這些方法的缺點在于,隨著抓取網(wǎng)頁的增加,大批量的無關(guān)網(wǎng)頁將被下載并過濾,算法的運行效率將變低。最佳優(yōu)先搜索策略最佳優(yōu)先搜索策略依照特定的網(wǎng)頁分析算法,預(yù)測出候選URL與目標網(wǎng)頁的相關(guān)度,或與主題的相關(guān)性,并選取評價最佳的一個或多

25、個URL進行抓取。它只訪問由網(wǎng)頁分析算法判斷為“有用”的網(wǎng)頁。這樣存在的一個問題是,在爬蟲抓取HYPERLINK /view/59642.htm路徑上的很多相關(guān)網(wǎng)頁可能被忽略,由于最佳優(yōu)先策略是一種局部最優(yōu)HYPERLINK /view/3688332.htm搜索算法。所以需要將最佳優(yōu)先算法結(jié)合具體的應(yīng)用進行改良,以跳出局部最優(yōu)點缺陷。深度優(yōu)先搜索策略深度優(yōu)先搜索策略從初始網(wǎng)頁入手,選擇一個URL進入,分析當(dāng)前網(wǎng)頁中的URL,選擇一個再次進入。如此一個鏈接一個鏈接地抓取下去,直到處理完一條路線之后再處理下一條路線。HYPERLINK /view/1242612.htm深度優(yōu)先策略設(shè)計較為簡單。

26、但是門戶網(wǎng)站提供的鏈接往往最具價值的,PageRank也很高,但是每深入一層,網(wǎng)頁價值和PageRank都會相應(yīng)地有所降低。這暗示著重要網(wǎng)頁訊息通常距離種子較近,而過度深入抓取到的網(wǎng)頁卻價值很低廉。同時,這一策略抓取深度直接影響著抓取命中率和抓取效率,而抓取深度是該種策略的關(guān)鍵。相對于其他兩種策略而言。此種策略較少被使用。5.2.2 索引與搜索索引作為一種數(shù)據(jù)結(jié)構(gòu),容許用戶快速并隨機的訪問存儲在當(dāng)中的詞。與字典的目錄相似,某個詞對應(yīng)到某一頁,查詢的時候直接定位到該頁,速度就非常之快,不用一頁一頁的查找。在索引中搜索關(guān)鍵詞,尋找到包含關(guān)鍵詞的文檔的過程就是搜索。搜索的質(zhì)量通常用準確率和召回率來描

27、述。所謂召回率是指一次搜索結(jié)果集合當(dāng)中符合用戶需求的數(shù)目與和用戶查詢相關(guān)的總數(shù)之比;而準確率是指一次搜索結(jié)果集合當(dāng)中符合用戶需求的數(shù)目與該次搜索結(jié)果總數(shù)之比。我們也需要考慮其它的相關(guān)搜索因素,比如速度和快速搜索大量文本的能力,單個和多個查詢、 短語查詢、 通配符查詢、 結(jié)果的排名和排序的支持等等。網(wǎng)絡(luò)機器人將遍歷得到的全部頁面存儲在臨時數(shù)據(jù)庫中,若是通過SQL直接查詢信息,速度將會令人難以忍受。為了提高檢索速率,需要對數(shù)據(jù)建立索引,按照倒排文件的格式存放。若是索引不及時更新的話,用戶用搜索引擎也不能及時檢索得到。用戶輸入相應(yīng)搜索條件后,索引程序?qū)⑼ㄟ^索引數(shù)據(jù)庫的方式進行檢索,然后將符合查詢要求

28、的數(shù)據(jù)按照一定的策略進行分級排放,然后再返回給用戶。5.2.3 Web服務(wù)器HYPERLINK /view/460250.htmWeb服務(wù)器是能夠向發(fā)請求的HYPERLINK /view/7718.htm瀏覽器提供文檔訊息的計算機HYPERLINK /view/17674.htm程序。Web服務(wù)器是一種被動HYPERLINK /view/17674.htm程序:只有當(dāng)運行在Internet上的計算機中的HYPERLINK /view/7718.htm瀏覽器發(fā)出請求時,Web服務(wù)器才會做出響應(yīng)。Web服務(wù)器是指駐留于HYPERLINK /view/1706.htm因特網(wǎng)上的某種類型的計算機HYP

29、ERLINK /view/17674.htm程序。當(dāng)WebHYPERLINK /view/7718.htm瀏覽器(HYPERLINK /view/930.htm客戶端)連到服務(wù)器上并請求文件時,服務(wù)器將處理該請求然后將相關(guān)文件反饋到該計算機的瀏覽器上,附帶的信息會告訴瀏覽器如何查看該文件(即文件類型)。服務(wù)器使用HYPERLINK /view/9472.htmHTTP(HYPERLINK /view/156868.htm超文本HYPERLINK /view/441895.htm傳輸協(xié)議)與客戶機瀏覽器進行信息交互。Web服務(wù)器的工作原理不是很復(fù)雜,正??煞殖扇缦?個步驟:連接過程、請求過程、應(yīng)

30、答過程以及關(guān)閉連接過程。下面來對這4個過程作一個簡要的介紹。連接過程指的是Web服務(wù)器和計算機瀏覽器之間所建立起來的一種連接。查看連接過程是否已實現(xiàn),用戶可以找到并打開HYPERLINK /view/13870.htmsocket這個HYPERLINK /view/638742.htm虛擬文件,這個文件的創(chuàng)建意味著連接過程這一步驟已經(jīng)成功完成。請求過程指的是Web的瀏覽器運用socket這個文件向相連接服務(wù)器提出各種請求。應(yīng)答過程指的是運用HTTP協(xié)議把在請求過程中所提出來的請求數(shù)據(jù)傳輸?shù)絎eb服務(wù)器,從而實施相應(yīng)的任務(wù)處理,然后運用HTTP協(xié)議再把任務(wù)處理的結(jié)果傳輸?shù)接嬎銠C的瀏覽器,同時在用

31、戶瀏覽器上面呈現(xiàn)上述請求之結(jié)果。關(guān)閉連接就是當(dāng)上一個步驟-應(yīng)答過程完成之后,Web服務(wù)器和其HYPERLINK /view/7718.htm瀏覽器之間斷開相應(yīng)連接之過程。Web服務(wù)器上述4個步驟緊密相聯(lián),環(huán)環(huán)相扣,邏輯性強;可以支持多個進程、多個線程以及多個進程與多個線程相混合的技術(shù)??蛻敉ǔJ褂脼g覽器進行相關(guān)查詢,這就要求系統(tǒng)提供Web服務(wù)器而且必須和索引數(shù)據(jù)庫進行連接。客戶在瀏覽器中輸入查詢條件,Web服務(wù)器接收到客戶傳來的查詢條件后在索引數(shù)據(jù)庫中進行相應(yīng)查詢、排列然后返回到客戶端。5.3 搜索引擎的主要指標及分析主要的搜索引擎指標有響應(yīng)時間、召回率、準確率、相關(guān)性等。這些指標好壞直接決定

32、了搜索引擎的好壞。搜索引擎的技術(shù)指標決定了搜索引擎的評估指標。好的搜索引擎是指具有較快的反應(yīng)速度和較高的召回率、準確率等,當(dāng)然這最終都需要搜索引擎技術(shù)指標來保障。召回率(Recall Rate,也叫HYPERLINK /view/258900.htm查全率):是索引出的相關(guān)文檔數(shù)和HYPERLINK /view/1268392.htm文檔庫中所有的相關(guān)文檔數(shù)的比值,重在衡量檢索系統(tǒng)的查全率。準確率:一次搜索結(jié)果中符合用戶需求的數(shù)目與該次搜索結(jié)果的總數(shù)之比。相關(guān)度:用戶查詢與搜索結(jié)果之間相似度的一種度量。精確度:對搜索結(jié)果的排序分級能力和對垃圾網(wǎng)頁處理的抗干擾能力。5.4 小節(jié)以上是基于因特網(wǎng)的

33、搜索引擎結(jié)構(gòu)和性能指標的分析,本人在這些研究的基礎(chǔ)上利用JSP,Servlet技術(shù)和Apache的Lucene開源工具包實現(xiàn)了一個簡易的搜索引擎。在接下來的章節(jié)中將會就本人的設(shè)計進行具體的論述。6 詳細設(shè)計概要6.1 網(wǎng)絡(luò)機器人設(shè)計6.1.1 網(wǎng)絡(luò)機器人概述網(wǎng)絡(luò)機器人又稱為Spider程序,是一種專業(yè)的Bot程序。用于查找大量的Web頁面。它從一個簡單的Web頁面上開始運行,然后通過其上的超鏈接再訪問其他頁面,這樣反復(fù)理論上能夠掃描網(wǎng)絡(luò)上的所有頁面。網(wǎng)絡(luò)蜘蛛即Web Spider,是一個很形象的名字。把互聯(lián)網(wǎng)比喻成一個蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁的鏈接地

34、址來尋找網(wǎng)頁,從網(wǎng)站某一個頁面(通常是首頁)開始,讀取網(wǎng)頁的內(nèi)容,找到在網(wǎng)頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個網(wǎng)頁,這樣一直循環(huán)下去,直到把這個網(wǎng)站所有的網(wǎng)頁都抓取完為止。如果把整個互聯(lián)網(wǎng)當(dāng)成一個網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來。對于搜索引擎來說,要抓取互聯(lián)網(wǎng)上所有的網(wǎng)頁幾乎是不可能的,從目前公布的數(shù)據(jù)來看,容量最大的搜索引擎也不過是抓取了整個網(wǎng)頁數(shù)量的百分之四十左右。這其中的原因一方面是抓取技術(shù)的瓶頸,無法遍歷所有的網(wǎng)頁,有許多網(wǎng)頁無法從其它網(wǎng)頁的鏈接中找到;另一個原因是存儲技術(shù)和處理技術(shù)的問題,如果按照每個頁面的平均大小為20K計算(包含圖片)

35、,100億網(wǎng)頁的容量是1002000G字節(jié),即使能夠存儲,下載也存在問題(按照一臺機器每秒下載20K計算,需要340臺機器不停的下載一年時間,才能把所有網(wǎng)頁下載完畢)。同時,由于數(shù)據(jù)量太大,在提供搜索時也會有效率方面的影響。因此,許多搜索引擎的網(wǎng)絡(luò)蜘蛛只是抓取那些重要的網(wǎng)頁,而在抓取的時候評價重要性主要的依據(jù)是某個網(wǎng)頁的鏈接深度?;谝蛱鼐W(wǎng)的搜索引擎是網(wǎng)絡(luò)爬蟲程序的最早應(yīng)用。例如國內(nèi)搜索巨頭百度公司,就利用網(wǎng)絡(luò)機器人程序來遍歷Web站點,以建立并維護這些大型的數(shù)據(jù)庫。網(wǎng)絡(luò)機器人程序也能夠通過掃描Web站點的主頁來得到該站點的文件清單和層次機構(gòu)。也可以掃描出中斷的超鏈接和拼寫錯誤等。6.1.2

36、網(wǎng)絡(luò)機器人的結(jié)構(gòu)分析Internet是建立在許多相關(guān)協(xié)議基礎(chǔ)上的,而且更復(fù)雜的協(xié)議又是建立在系統(tǒng)層協(xié)議之上。網(wǎng)絡(luò)就是建立在HTTP ( Hypertext Transfer Protocol ) 協(xié)議基礎(chǔ)上,而HTTP又是建立在TCP/IP ( Transmission Control Protocol / Internet Protocol ) 協(xié)議之上,它同時也是一種Socket協(xié)議。所以網(wǎng)絡(luò)爬蟲程序本質(zhì)上是一種基于Socket的網(wǎng)絡(luò)程序。6.1.3 解析HTML因為網(wǎng)絡(luò)中的訊息都是建立在HTML協(xié)議之上的,所以網(wǎng)絡(luò)爬蟲在索引網(wǎng)頁時的第一個問題就是如何解析HTML文件。我們在進行解析的時候

37、不用關(guān)心全部的標簽,只需要對其中幾種關(guān)鍵標簽進行解析即可。超連接標簽超連接定義了WWW通過互聯(lián)網(wǎng)鏈接文檔的功能。它們的主要功能是使用戶能夠任意遷移到相關(guān)頁面,這就是網(wǎng)絡(luò)爬蟲程序最關(guān)心的標簽。TITLE標簽標題是Web頁面中顯示在瀏覽器標題欄的字段。許多站點把自己的網(wǎng)頁的主要信息會放在標題欄中。BODY標簽BODY中放置了網(wǎng)頁的主要內(nèi)容,文本。在本系統(tǒng)中主要是通過HtmlParser的第三方開源的軟件包實現(xiàn)網(wǎng)頁的解析功能。Htmlparser是一個純java語言的html解析的庫,它不依賴于其它的java庫文件,主要用來改造和提取html文件。它能夠超高速的解析html。為了獲得超鏈接,titl

38、e等信息,本系統(tǒng)中的主要代碼如下:package mon.htmlparser;import java.util.HashSet;import java.util.Set;import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.beans.StringBean;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.filters.OrFilter;i

39、mport org.htmlparser.tags.LinkTag;import org.htmlparser.tags.TitleTag;import org.htmlparser.util.NodeList;import com.briup.bean.URLInfo;import com.briup.log.ErrorLog;import com.briup.log.Log;public class HTMLParser private Set urls = new HashSet();/* * 網(wǎng)頁的url */private String bUrl=;/* * 網(wǎng)頁的title標題 *

40、/private String title=;/* * 解析給定的bootUrl網(wǎng)頁 */public HTMLParser()public void HtmlParser(String bootUrl) bUrl = bootUrl;try /構(gòu)建一個解析器Parser myparser = new Parser(bootUrl);myparser.setEncoding(myparser.getEncoding();NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);NodeFilter titleFilter = new

41、NodeClassFilter(TitleTag.class);OrFilter lastFilter = new OrFilter();lastFilter.setPredicates(new NodeFilterlinkFilter,titleFilter);NodeList nodelist = myparser.parse(lastFilter);Node nodes = nodelist.toNodeArray();/將當(dāng)前解析的url存入到日志文件中new Log(parse +bootUrl+success).start();for(int i =0 ; inodes.lengt

42、h;i+)Node anode = (Node)nodesi;if(anode instanceof LinkTag)/獲取鏈接LinkTag linktag = (LinkTag)anode;String url = linktag.getLink().trim();if(url.toLowerCase().startsWith(http)urls.add(url);else if(anode instanceof TitleTag)/獲取網(wǎng)頁的titleTitleTag titletag = (TitleTag)anode;title = titletag.getTitle().trim(

43、); catch (Exception e) new ErrorLog(e.getMessage().start();System.out.println(無效的url);public static URLInfo getUrl(String bootUrl)HTMLParser test = new HTMLParser();test.HtmlParser(bootUrl);URLInfo url = new URLInfo();url.setUrl(test.bUrl);url.setHitnum(0);url.setTitle(test.title);url.setWebText(tes

44、t.getWebText(bootUrl);url.setLinks(test.urls);return url;public String getWebText(String bootUrl)StringBean sb = new StringBean();sb.setLinks(false);sb.setReplaceNonBreakingSpaces(true);sb.setCollapse(true);sb.setURL(bootUrl);String content = sb.getStrings();return content;URL轉(zhuǎn)換程序如下:package mon.html

45、parser;import java.util.HashSet;import java.util.Iterator;import java.util.Set;import com.briup.bean.URLInfo;public class ParseUrls /存放解析過的urlinfoprivate static Set urlinfo = new HashSet();public static void parse(URLInfo url)url.setId(1);urlinfo.add(url);int id = 2;Set urls = url.getLinks();Iterato

46、r itea = urls.iterator();while(itea.hasNext()String parseurl = (String)itea.next();URLInfo parsedurl = HTMLParser.getUrl(parseurl);parsedurl.setId(id+);urlinfo.add(parsedurl);public static Set getUrlinfos(URLInfo url)parse(url);return urlinfo;public static void main(String args)Iterator itea = getUr

47、linfos(HTMLParser.getUrl(/).iterator();while(itea.hasNext()URLInfo url = itea.next();System.out.println(url.getTitle()+*+url.getUrl();6.1.4 Spider程序結(jié)構(gòu)網(wǎng)絡(luò)機器人必須從一個網(wǎng)頁遷移到另一個網(wǎng)頁,所以必須找到該頁面上的超連接。程序首先解析網(wǎng)頁的HTML代碼,查找該頁面內(nèi)的超連接然后通過遞歸和非遞歸兩種結(jié)構(gòu)來實現(xiàn)Spider程序。網(wǎng)絡(luò)機器人功能圖解,如圖6-1所示。圖6-1網(wǎng)絡(luò)機器人功能遞歸結(jié)構(gòu)遞歸是在一個方法中調(diào)用自己本身的程序設(shè)計技術(shù)。雖然比較容易

48、實現(xiàn)但耗費內(nèi)存且不能使用多線程技術(shù),故不適合大型項目。非遞歸結(jié)構(gòu)這種方法使用隊列的數(shù)據(jù)結(jié)構(gòu),當(dāng)Spider程序發(fā)現(xiàn)超連接后并不調(diào)用自己本身而是把超連接加入到等待隊列中。當(dāng)Spider程序掃描完當(dāng)前頁面后會根據(jù)制定的策略訪問隊列中的下一個超連接地址。6.1.5 程序性能提高論述Internet中擁有海量的Web頁面,如何開發(fā)出高效的Spider程序是非常重要的。下面就來介紹下幾種提高性能的技術(shù):Java的多線程技術(shù):線程是通過程序的一條執(zhí)行路線。多線程是一個程序同時運行多個任務(wù)的能力。它是在一個程序的內(nèi)部進行分工合作。優(yōu)化程序的通常方法是確定瓶頸并改進他。瓶頸是一個程序中最慢的部分,他限制了其他

49、任務(wù)的運行。舉個例子說明:一個Spider程序需要下載十個頁面,要完成這一任務(wù),程序必須向服務(wù)器發(fā)出請求然后接受這些網(wǎng)頁。當(dāng)程序等待響應(yīng)的時候其他任務(wù)不能執(zhí)行,這就影響了程序的效率。如果用多線程技術(shù)可以讓這些網(wǎng)頁的等待時間合在一起,不用互相影響,這就可以極大的改進程序性能。數(shù)據(jù)庫技術(shù):當(dāng)Spider程序訪問一個大型Web站點時,必須使用一種有效的方法來存儲站點隊列。這些隊列管理Spider程序必須維護大型網(wǎng)頁的列表。如果把他們放在內(nèi)存中將會是性能下降,所以我們可以把他們放在數(shù)據(jù)庫中減少系統(tǒng)資源的消耗。6.1.6 Spider程序綜述在本章中,首先介紹了網(wǎng)絡(luò)機器人的基本概念,然后具體分析了Spi

50、der程序的結(jié)構(gòu)和功能。在最后還結(jié)合具體代碼進行了詳細說明。6.2 索引設(shè)計6.2.1 Lucene全文檢索Lucene是Apache軟件基金會Jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的構(gòu)架,提供了完整的查詢引擎和搜索引擎及部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。作為一個開放源代碼項目,Lucene自問世以后,引發(fā)了開放源代碼社群的巨大反響,程序員們不僅適用它構(gòu)建具體

51、的全文檢索應(yīng)用,而且將之集成到各種系統(tǒng)軟件中,以及構(gòu)建web應(yīng)用,甚至某些商業(yè)軟件也采用了Lucene作為其內(nèi)部全文檢索子系統(tǒng)的核心。已經(jīng)有很多java項目都使用了Lucene作為其后臺的全文檢索引擎,例如jive,Eyebrows等。Lucene以其開放源代碼的特性、優(yōu)異的索引結(jié)構(gòu)、良好的系統(tǒng)架構(gòu)獲得了越來越多的應(yīng)用。Lucene作為一個全文檢索引擎,其具有如下突出的優(yōu)點:(1)所有的問題都通過一個額外抽象層來方便以后的擴展和重用:你可以通過重新實現(xiàn)來達到自己的目的,而對其他模塊而不需要;(2)簡單的應(yīng)用入口Searcher、Indexer,并調(diào)用底層一系列組件協(xié)同的完成搜索任務(wù);(3)所有

52、的對象的任務(wù)都非常專一:比如搜索過程:QueryParser分析將查詢語句轉(zhuǎn)換成一系列的精確查詢的組合(Query),通過底層的索引讀取結(jié)構(gòu)IndexReader進行索引的讀取,并用相應(yīng)的打分器給搜索結(jié)果進行打分/排序等。所有的功能模塊原子化程度非常高,因此可以通過重新實現(xiàn)而不需要修改其他模塊。(4)除了靈活的應(yīng)用接口設(shè)計,Lucene還提供了一些適合大多數(shù)應(yīng)用的語言分析器實現(xiàn)(SimpleAnalyser,StandardAnalyser),這也是新用戶能夠很快上手的重要原因之一。Lucene不是一個完整的全文索引應(yīng)用,而是是一個用Java寫的全文索引引擎工具包,它可以方便的嵌入到各種應(yīng)用中

53、實現(xiàn)針對應(yīng)用的全文索引/檢索功能。Lucene的創(chuàng)新之處:大部分的搜索(數(shù)據(jù)庫)引擎都是用B樹結(jié)構(gòu)來維護索引,索引的更新會導(dǎo)致大量的IO操作,Lucene在實現(xiàn)中,對此稍微有所改進:不是維護一個索引文件,而是在擴展索引的時候不斷創(chuàng)建新的索引文件,然后定期的把這些新的小索引文件合并到原先的大索引中(針對不同的更新策略,批次的大小可以調(diào)整),這樣在不影響檢索的效率的前提下,提高了索引的效率。6.2.2 Lucene的原理分析全文檢索的實現(xiàn)機制Lucene的API接口設(shè)計的比較通用,輸入輸出結(jié)構(gòu)都很像數(shù)據(jù)庫的表=記錄=字段,所以很多傳統(tǒng)的應(yīng)用的文件、數(shù)據(jù)庫等都可以比較方便的映射到Lucene的存儲結(jié)

54、構(gòu)和接口中。總體上看:可以先把Lucene當(dāng)成一個支持全文索引的數(shù)據(jù)庫系統(tǒng)。Lucene的索引效率通常書籍后面常常附關(guān)鍵詞索引表(比如:北京:12, 34頁,上海:3,77頁),它能夠幫助讀者比較快地找到相關(guān)內(nèi)容的頁碼。而數(shù)據(jù)庫索引能夠大大提高查詢的速度原理也是一樣,想像一下通過書后面的索引查找的速度要比一頁一頁地翻內(nèi)容高多少倍而索引之所以效率高,另外一個原因是它是排好序的。對于檢索系統(tǒng)來說核心是一個排序問題。由于數(shù)據(jù)庫索引不是為全文索引設(shè)計的,因此,使用like %keyword%時,數(shù)據(jù)庫索引是不起作用的,在使用like查詢時,搜索過程又變成類似于一頁頁翻書的遍歷過程了,所以對于含有模糊查

55、詢的數(shù)據(jù)庫服務(wù)來說,LIKE對性能的危害是極大的。如果是需要對多個關(guān)鍵詞進行模糊匹配:like%keyword1% and like %keyword2% .其效率也就可想而知了。所以建立一個高效檢索系統(tǒng)的關(guān)鍵是建立一個類似于科技索引一樣的反向索引機制,將數(shù)據(jù)源(比如多篇文章)排序順序存儲的同時,有另外一個排好序的關(guān)鍵詞列表,用于存儲關(guān)鍵詞=文章映射關(guān)系,利用這樣的映射關(guān)系索引:關(guān)鍵詞=出現(xiàn)關(guān)鍵詞的文章編號,出現(xiàn)次數(shù)(甚至包括位置:起始偏移量,結(jié)束偏移量),出現(xiàn)頻率,檢索過程就是把模糊查詢變成多個可以利用索引的精確查詢的邏輯組合的過程。從而大大提高了多關(guān)鍵詞查詢的效率,所以,全文檢索問題歸結(jié)到

56、最后是一個排序問題。由此可以看出模糊查詢相對數(shù)據(jù)庫的精確查詢是一個非常不確定的問題,這也是大部分數(shù)據(jù)庫對全文檢索支持有限的原因。Lucene最核心的特征是通過特殊的索引結(jié)構(gòu)實現(xiàn)了傳統(tǒng)數(shù)據(jù)庫不擅長的全文索引機制,并提供了擴展接口,以方便針對不同應(yīng)用的定制??梢酝ㄟ^表6.1所示,對比一下數(shù)據(jù)庫的模糊查詢:表6.1 lucene全文搜索與數(shù)據(jù)庫匹配參照Lucene全文索引引擎數(shù)據(jù)庫索引將數(shù)據(jù)源中的數(shù)據(jù)都通過全文索引一一建立反向索引對于LIKE查詢來說,數(shù)據(jù)傳統(tǒng)的索引是根本用不上的。數(shù)據(jù)需要逐個便利記錄進行GREP式的模糊匹配,比有索引的搜索速度要有多個數(shù)量級的下降。匹配效果通過詞元(term)進行匹

57、配,通過語言分析接口的實現(xiàn),可以實現(xiàn)對中文等非英語的支持。使用:like %net% 會把netherlands也匹配出來,多個關(guān)鍵詞的模糊匹配:使用like %com%net%:就不能匹配詞序顛倒的匹配度有匹配度算法,將匹配程度(相似度)比較高的結(jié)果排在前面。沒有匹配程度的控制:比如有記錄中net出現(xiàn)5詞和出現(xiàn)1次的,結(jié)果是一樣的。結(jié)果輸出通過特別的算法,將最匹配度最高的頭100條結(jié)果輸出,結(jié)果集是緩沖式的小批量讀取的。返回所有的結(jié)果集,在匹配條目非常多的時候(比如上萬條)需要大量的內(nèi)存存放這些臨時結(jié)果集。可定制性通過不同的語言分析接口實現(xiàn),可以方便的定制出符合應(yīng)用需要的索引規(guī)則(包括對中文

58、的支持)沒有接口或接口復(fù)雜,無法定制結(jié)論高負載的模糊查詢應(yīng)用,需要負責(zé)的模糊查詢的規(guī)則,索引的資料量比較大使用率低,模糊匹配規(guī)則簡單或者需要模糊查詢的資料量少源碼利用Lucene為數(shù)據(jù)庫中的每一個URL地址建立索引文件,存入D:/index目錄下。當(dāng)客戶端瀏覽器發(fā)送一個請求時,直接從索引文件中利用Lucene的查找方法,查找出符合客戶端用戶請求相符的內(nèi)容。每個document中包含url,title,contents,createDate四個域。在查詢時主要時對contents的查詢。具體的代碼如下:package com.briup.service;import java.io.File;i

59、mport java.io.IOException;import java.sql.Connection;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Iterator;import java.util.Set;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;i

60、mport org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.Searcher;impo

溫馨提示

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

評論

0/150

提交評論