畢業(yè)論文——基于A(yíng)jaxLucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
畢業(yè)論文——基于A(yíng)jaxLucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
畢業(yè)論文——基于A(yíng)jaxLucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
畢業(yè)論文——基于A(yíng)jaxLucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
畢業(yè)論文——基于A(yíng)jaxLucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于ajax+lucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)摘要通過(guò)搜索引擎從互聯(lián)網(wǎng)上獲取有用信息已經(jīng)成為人們生活的重要組成部 分,lucene是構(gòu)建搜索引擎的其中一種方式。搜索引擎系統(tǒng)是在.net平臺(tái)上用 c#開(kāi)發(fā)的,數(shù)據(jù)庫(kù)是mssql server 2000o主要完成的功能有:用爬蟲(chóng)抓取網(wǎng) 頁(yè);獲取有效信息放入數(shù)據(jù)庫(kù);通過(guò)lucene建立索引;對(duì)簡(jiǎn)單關(guān)鍵字進(jìn)行搜索; 使用ajax的局部刷新頁(yè)血展不結(jié)果。論文詳細(xì)說(shuō)明了系統(tǒng)開(kāi)發(fā)的背景,開(kāi)發(fā)環(huán)境,系統(tǒng)的需求分析,以及功能 的設(shè)計(jì)與實(shí)現(xiàn)。同吋講述了搜索引擎的原理,系統(tǒng)功能,并探討使用ajax與服 務(wù)器進(jìn)行數(shù)據(jù)異步交互,從而改善現(xiàn)有的web應(yīng)用模式。關(guān)鍵詞:

2、l;異步更新;ajax;搜索引擎the design and implementation for constructing thesearch engine with ajax and luceneabstractobtaining useful information from web by search engines has become the important part of people's lives. lucene is the way of constructing search engine. this system is based on the .net p

3、latform using c#. the database is mssql server 2000. main functions are grasping web pages with crawls, adding effective information to the database, establishing index with lucene, searching through keywords, and displaying the results finally.this paper has showed the principle of search engine in

4、 the form of different modules, functions of this system, improving traditional web application model using ajax. it shows explanation of the system's background, development environment, system analysis of demanding, and functions of design.key words: l; asynchronous update; ajax; search engine

5、s1引言1.1課題背景l(fā)ucene是一個(gè)基于java的全文信息檢索工具包,它為應(yīng)用程序提供索引和 搜索功能。lucene fl前是apache jakarta家族中的一個(gè)開(kāi)源項(xiàng)fl。也是冃前最 為流行的基于java開(kāi)源全文檢索工具包丄ucene是java世界中常用的索引api, 使用它提供的方法可以為文本資料創(chuàng)建索引,并提供檢索。l它只在 命名方面采納了.net的建議,主要目標(biāo)傾向于和java lucene兼容:一個(gè)是索引 格式兼容,達(dá)到可以共同工作的目的;一個(gè)是命名接近(只相差很少,比如大 小寫(xiě)等),目的是可以方便開(kāi)發(fā)者使用java lucene相關(guān)的代碼和資料。1.2國(guó)內(nèi)外研究現(xiàn)狀國(guó)內(nèi)外對(duì)

6、搜索引擎研究比較著名的便是google 了。無(wú)論搜索技術(shù)本身還是 搜索范圍與深度,google搜索總是所有搜索引擎的目標(biāo)。google專(zhuān)業(yè)領(lǐng)域搜索 方而做的成效是有目共睹的。google在低層次的智能搜索方面已經(jīng)開(kāi)始研究很 多年了,實(shí)際的成果就是翻譯方而。利用搜索技術(shù),加上經(jīng)驗(yàn)主義發(fā)展出來(lái)的 google翻譯機(jī)器人,在外語(yǔ)翻譯方面已經(jīng)比傳統(tǒng)的翻譯好很多了。但是翻譯僅 僅是學(xué)術(shù)方面的應(yīng)用,更重要的是google建立起來(lái)的海量搜索歷史記錄。如果 把這些海量搜索歷史記錄當(dāng)作是詞典的話(huà),那么如果與搜索技術(shù)的結(jié)合發(fā)展成 為低層次的只能搜索,那么應(yīng)用就將大大加強(qiáng)與廣泛。國(guó)內(nèi),對(duì)搜索引擎的專(zhuān)注和對(duì)中文的理解

7、能力也是中國(guó)本土搜索引擎行業(yè) 獨(dú)特的競(jìng)爭(zhēng)力。國(guó)內(nèi)比較著名的比如百度,更專(zhuān)注對(duì)中文的處理。中文的意思 多種多樣,是很難用程序處理的。目前國(guó)內(nèi)外都在做中文引擎,門(mén)戶(hù)網(wǎng)站、非 門(mén)戶(hù)網(wǎng)站也都在進(jìn)軍搜索業(yè),成立搜索門(mén)戶(hù)。為了滿(mǎn)足用戶(hù)更深層次的需求, 國(guó)內(nèi)的搜索引擎也在不斷的完善自己。如何將人類(lèi)的知識(shí)和智能加入到檢索中, 如何使搜索引擎的質(zhì)量產(chǎn)生一個(gè)質(zhì)的飛躍,也是國(guó)內(nèi)搜索引擎努力的方向。中 國(guó)網(wǎng)民對(duì)智能化搜索需求也是顯而易見(jiàn)的。這也意味著搜索不再是簡(jiǎn)單的技術(shù) 或者是網(wǎng)絡(luò)導(dǎo)航而已,而是會(huì)成為普通人生活中必備的工具之一。1. 3本課題研究的意義隨著計(jì)算機(jī)技術(shù)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)上的信息量急劇增長(zhǎng),要

8、在浩如煙海的網(wǎng)絡(luò)世界中尋找需要的信息,作為現(xiàn)代信息獲取技術(shù)的主要應(yīng)用, 那么搜索引擎是必不可少的。通過(guò)l,可以很方便的構(gòu)建起搜索引擎, 本畢業(yè)設(shè)計(jì)除了考查使學(xué)生綜合運(yùn)用以前所學(xué)知識(shí)的能力,同時(shí)也使學(xué)生了解 當(dāng)今搜索及編程的一些新技術(shù),并模擬簡(jiǎn)單的搜索引擎開(kāi)發(fā)。1. 4本課題的研究方法在本系統(tǒng)的開(kāi)發(fā)過(guò)程中,首先分析了搜索引擎的相關(guān)功能,寫(xiě)出需求分析; 其次,綜合運(yùn)用以前所學(xué)的相關(guān)知識(shí)(數(shù)據(jù)庫(kù),c#等),選擇所熟悉的開(kāi)發(fā)工 具進(jìn)行開(kāi)發(fā)(本系統(tǒng)選擇了 microsoft visual studio . net 2003作為開(kāi)發(fā)平 臺(tái),開(kāi)發(fā)語(yǔ)言選擇了 c#;數(shù)據(jù)庫(kù)采用microsoft sql ser

9、ver 2000)由于lucene 不是完整的搜索引擎程序,只為搜索引擎應(yīng)用提供了工具包,在a平臺(tái)中, 可使用l這個(gè)對(duì)lucene兼容的庫(kù)。使用lucene. net協(xié)助完成搜索引 擎相關(guān)的網(wǎng)頁(yè)爬蟲(chóng)與抓取,為文檔建立索引,關(guān)鍵詞搜索的功能,通過(guò)ajax優(yōu) 化系統(tǒng),完成頁(yè)面的局部刷新功能,給用戶(hù)好的體驗(yàn)。2 lucene. net構(gòu)建搜索引擎原理2.1全文搜索引擎2丄1搜索引擎的分類(lèi)獲得網(wǎng)站網(wǎng)頁(yè)資料,能夠建立數(shù)據(jù)庫(kù)并提供查詢(xún)的系統(tǒng),我們都可以把它 叫做搜索引擎。真正意義上的搜索引擎,通常指的是收集了因特網(wǎng)上幾千萬(wàn)到 幾十億個(gè)網(wǎng)頁(yè)并對(duì)網(wǎng)頁(yè)中的每一個(gè)詞(即關(guān)鍵詞)進(jìn)行索引,建立索引數(shù)據(jù)庫(kù) 的全文搜索

10、引擎。當(dāng)用戶(hù)查找某個(gè)關(guān)鍵詞的時(shí)候,所有在頁(yè)面內(nèi)容中包含了該 關(guān)鍵詞的網(wǎng)頁(yè)都將作為搜索結(jié)果被搜出來(lái)。在經(jīng)過(guò)復(fù)雜的算法進(jìn)行排序后,這 些結(jié)果將按照與搜索關(guān)鍵詞的相關(guān)度排列。按照工作原理的不同,可以把它們 分為兩個(gè)基本類(lèi)別:全文搜索和分類(lèi)目錄。全文搜索引擎通過(guò)從互聯(lián)網(wǎng)上提取的各個(gè)網(wǎng)站的信息(以網(wǎng)頁(yè)文字為主) 而建立的數(shù)據(jù)庫(kù)中,檢索與用戶(hù)查詢(xún)條件匹配的相關(guān)記錄,然后按一定的排列 順序?qū)⒔Y(jié)果返回給用戶(hù)。從搜索來(lái)源的角度,全文搜索引擎又可細(xì)分為兩種, 一種是擁有自己的檢索程序(indexer),俗稱(chēng)“蜘蛛” (spider)程序或“機(jī)器 人"(robot)程序,并自建網(wǎng)頁(yè)數(shù)據(jù)庫(kù),搜索結(jié)果直接從自

11、身的數(shù)據(jù)庫(kù)中調(diào)用; 另一種則是租用其他引擎的數(shù)據(jù)庫(kù),并按自定的格式排列搜索結(jié)果。分類(lèi)目錄則是通過(guò)人工的方式收集整理網(wǎng)站資料形成數(shù)據(jù)庫(kù)的,比如雅虎 中國(guó)以及國(guó)內(nèi)的搜狐、新浪、網(wǎng)易分類(lèi)目錄。另外,在網(wǎng)上的一些導(dǎo)航站點(diǎn), 也可以歸屬為原始的分類(lèi)目錄。2丄2搜索引擎的工作原理搜索引擎的原理,可以看作三步:從互聯(lián)網(wǎng)上抓取網(wǎng)頁(yè),建立索引數(shù)據(jù)庫(kù), 在索引數(shù)據(jù)庫(kù)中搜索。全文搜索引擎的“網(wǎng)絡(luò)蜘蛛”能夠掃描一定地址范圍內(nèi)的網(wǎng)站,并沿著網(wǎng) 絡(luò)上的鏈接從一個(gè)網(wǎng)頁(yè)到另一個(gè)網(wǎng)頁(yè),從一個(gè)網(wǎng)站到另一個(gè)網(wǎng)站采集網(wǎng)頁(yè)資料。 它為保證采集的資料最新,述會(huì)回訪(fǎng)已抓取過(guò)的網(wǎng)頁(yè)。網(wǎng)絡(luò)機(jī)器人或網(wǎng)絡(luò)蜘蛛 采集的網(wǎng)頁(yè),還要有其它程序進(jìn)行分析,

12、根據(jù)一定的相關(guān)度算法進(jìn)行大量的計(jì) 算建立網(wǎng)頁(yè)索引,才能添加到索引數(shù)據(jù)庫(kù)中。我們平時(shí)看到的全文搜索引擎,實(shí)際上只是一個(gè)搜索引擎系統(tǒng)的檢索界面,當(dāng)你輸入關(guān)鍵詞進(jìn)行查詢(xún)時(shí),搜索 引擎會(huì)從龐大的數(shù)據(jù)庫(kù)中找到符合該關(guān)鍵詞的所有相關(guān)網(wǎng)頁(yè)的索引,并按一定 規(guī)則呈現(xiàn)給我們。不同的搜索引擎,網(wǎng)頁(yè)索引數(shù)據(jù)庫(kù)不同,搜索結(jié)果也就不盡 相同。利用能夠從互聯(lián)網(wǎng)上自動(dòng)收集網(wǎng)頁(yè)的spider程序,自動(dòng)訪(fǎng)問(wèn)互聯(lián)網(wǎng),并沿 著網(wǎng)頁(yè)中的所有url爬到其它網(wǎng)頁(yè),重復(fù)這過(guò)程,并把爬過(guò)的所有網(wǎng)頁(yè)收集回 來(lái)。然后建立索引數(shù)據(jù)庫(kù),由分析索引程序?qū)κ占貋?lái)的網(wǎng)頁(yè)進(jìn)行分析,提取 相關(guān)網(wǎng)頁(yè)信息(包括網(wǎng)頁(yè)所在url、編碼類(lèi)型、頁(yè)而內(nèi)容包含的關(guān)鍵詞、關(guān)

13、鍵 詞位置、生成時(shí)間、大小、與其它網(wǎng)頁(yè)的鏈接關(guān)系等),然后用這些相關(guān)信息建 立網(wǎng)頁(yè)索引數(shù)據(jù)庫(kù)。接下來(lái)在索引數(shù)據(jù)庫(kù)中搜索排序,當(dāng)用戶(hù)輸入關(guān)鍵詞搜索 后,由搜索系統(tǒng)程序從網(wǎng)頁(yè)索引數(shù)據(jù)庫(kù)中找到符合該關(guān)鍵詞的所有相關(guān)網(wǎng)頁(yè)。 最后,由頁(yè)面生成系統(tǒng)將搜索結(jié)果的鏈接地址和頁(yè)面內(nèi)容摘要等內(nèi)容組織起來(lái) 返回給用戶(hù)。搜索引擎只能搜到它網(wǎng)頁(yè)索引數(shù)據(jù)庫(kù)里儲(chǔ)存的內(nèi)容。2.2 lucene與搜索引擎lucene是一個(gè)全文信息檢索工具包,為應(yīng)用程序提供索引和搜索功能。和 java lucene兼容的l可以用在.net平臺(tái)。lucene能夠?yàn)槲谋绢?lèi)型的數(shù) 據(jù)建立索引,所以你只要能把你要索引的數(shù)據(jù)格式轉(zhuǎn)化的文本的,lucene

14、就能 對(duì)你的文檔進(jìn)行索引和搜索。比如你要對(duì)一些html文檔,pdf文檔進(jìn)行索引 的話(huà)你就首先需耍把html文檔和pdf文檔轉(zhuǎn)化成文本格式的,然后將轉(zhuǎn)化 后的內(nèi)容交給lucene進(jìn)行索引,然后把創(chuàng)建好的索引文件保存到磁盤(pán)或者內(nèi)存 中,最后根據(jù)用戶(hù)輸入的查詢(xún)條件在索引文件上進(jìn)行查詢(xún)。不規(guī)定耍索引的文 檔的格式也使lucene能夠適用于幾乎所有的搜索應(yīng)用程序。如圖1表示了搜索應(yīng)用程序和lucene之間的關(guān)系,也反映了利用lucene 構(gòu)建搜索應(yīng)用程序的流程:webgatherdatapresent search results圖1應(yīng)用程序和lucene2.3索引和搜索索引是現(xiàn)代搜索引擎的核心,建立索

15、引是把數(shù)據(jù)源處理成非常方便查詢(xún)的 索引文件的過(guò)程。為什么索引這么重要呢,試想你現(xiàn)在要在大量的文檔中搜索 含有某個(gè)關(guān)鍵詞的文檔,那么如果不建立索引的話(huà)你就需要把這些文檔順序的 讀入內(nèi)存,然后檢查這個(gè)文章中是不是含有要查找的關(guān)鍵詞,這樣的話(huà)就會(huì)耗 費(fèi)非常多的時(shí)間,想想搜索引擎可是在毫秒級(jí)的時(shí)間內(nèi)查找岀要搜索的結(jié)果的。 這就是由于建立了索引的原因,你可以把索引想彖成這樣一種數(shù)據(jù)結(jié)構(gòu),他能 夠使你快速的隨機(jī)訪(fǎng)問(wèn)存儲(chǔ)在索引中的關(guān)鍵詞,進(jìn)而找到該關(guān)鍵詞所關(guān)聯(lián)的文 檔。lucene采用的是一種稱(chēng)為反向索引(inverted index)的機(jī)制。反向索引就 是說(shuō)我們維護(hù)了一個(gè)詞/短語(yǔ)表,對(duì)于這個(gè)表中的每個(gè)詞/

16、短語(yǔ),都有一個(gè)鏈表描 述了有哪些文檔包含了這個(gè)詞/短語(yǔ)。這樣在用戶(hù)輸入查詢(xún)條件的時(shí)候,就能非 ??斓牡玫剿阉鹘Y(jié)果。我們將在本系列文章的第二部分詳細(xì)介紹lucene的索引 機(jī)制,由于lucene提供了簡(jiǎn)單易用的api,所以也可以非常容易的使用lucene 對(duì)文檔實(shí)現(xiàn)索引的建立。對(duì)文檔建立好索引后,就可以在這些索引上面進(jìn)行搜索了。搜索引擎首先 會(huì)對(duì)搜索的關(guān)鍵詞進(jìn)行解析,然后再在建立好的索引上面進(jìn)行查找,最終返回 和用戶(hù)輸入的關(guān)鍵詞相關(guān)聯(lián)的文檔。2. 4 ajax 技術(shù)ajax 全稱(chēng)為"asynchronous javascript and xml"(異步 javascript

17、和 xml), 是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。ajax技術(shù)是目前在瀏覽器中通 id javascript腳本可以使用的所有技術(shù)的集合。包括:html和css,使用文 檔對(duì)象模型dom作動(dòng)態(tài)顯示和交互,使用xml做數(shù)據(jù)交互和操作,使用 xmlhttprequest進(jìn)行異步數(shù)據(jù)接收,使用javascript將它們綁定在一起。ajax技術(shù)之中,核心的技術(shù)就是xmlhttprequest,它最初的名稱(chēng)叫做 xmlhttp,是微軟公司為了滿(mǎn)足開(kāi)發(fā)者的需要,1999年在ie5.0瀏覽器中率 先推岀的。后來(lái)這個(gè)技術(shù)被上述的規(guī)范命名為xmlhttprequesto它正是ajax 技術(shù)之所以與眾不同

18、的地方。簡(jiǎn)而言之,xmlhttprequest為運(yùn)行于瀏覽器中的 javascript腳本提供了一種在頁(yè)面之內(nèi)與服務(wù)器通信的手段。頁(yè)面內(nèi)的javascript 可以在不刷新頁(yè)而的情況下從服務(wù)器獲取數(shù)據(jù),或者向服務(wù)器提交數(shù)據(jù)。 xmlhttprequest的出現(xiàn)為web開(kāi)發(fā)提供了一種全新的可能性,甚至整個(gè)改變 了人們對(duì)于web應(yīng)用由什么來(lái)組成的看法。它可以使我們以一種全新的方式來(lái) 做web開(kāi)發(fā),為用戶(hù)提供更好的交互體驗(yàn)。傳統(tǒng)的web應(yīng)用模型如圖2:與傳統(tǒng)的web開(kāi)發(fā)不同,ajax并不是以一種基于靜態(tài)頁(yè)面的方式來(lái)看待 web應(yīng)用的。從ajax的角度看來(lái),web應(yīng)用應(yīng)由少量的頁(yè)面組成,其中每個(gè)頁(yè) 面

19、其實(shí)是一個(gè)更小型的ajax應(yīng)用。每個(gè)頁(yè)面上面都包括有一些使用javascript 開(kāi)發(fā)的ajax組件。這些組件使用xmlhttprequest對(duì)象以異步的方式與服務(wù)器 通信,從服務(wù)器獲取需要的數(shù)據(jù)后使用dom api來(lái)更新頁(yè)面中的一部分內(nèi)容。 因此ajax應(yīng)用與傳統(tǒng)的web應(yīng)用的區(qū)別主要在三個(gè)地方:1. 不刷新整個(gè)頁(yè)面,在頁(yè)面內(nèi)與服務(wù)器通信。2. 使用異步方式與服務(wù)器通信,不需要打斷用戶(hù)的操作,具有更加迅速的 響應(yīng)能力。3. 系統(tǒng)僅由少量頁(yè)面組成。大部分交互在頁(yè)面之內(nèi)完成,不需要切換整個(gè) 頁(yè)面。由此可見(jiàn),ajax使得web應(yīng)用更加動(dòng)態(tài),帶來(lái)了更高的智能,并且提供了 表現(xiàn)能力豐富的ajax ui

20、組件。3需求分析3. 1同步環(huán)境木系統(tǒng)的同步環(huán)境如圖3:圖3同步環(huán)境檢索服務(wù)器通過(guò)internet檢索web頁(yè)面。3. 2功能需求本設(shè)計(jì)要實(shí)現(xiàn)的功能:1. 能夠?qū)nternet ±的網(wǎng)頁(yè)內(nèi)容、標(biāo)題、鏈接等信息按鏈?zhǔn)绞占?. 能夠?qū)崿F(xiàn)一定鏈接深度的網(wǎng)頁(yè)收集,也就是在internet ±實(shí)現(xiàn)一定的url 級(jí)的數(shù)據(jù)收錄。3. 對(duì)收集到的數(shù)據(jù)存入mssql server 2000等關(guān)系型數(shù)據(jù)庫(kù)中、或者存入 文本文件中。4. 網(wǎng)站信息庫(kù)中的信息會(huì)不斷的變動(dòng),對(duì)收集到的數(shù)據(jù)需要定期的自動(dòng)維 護(hù),做到定期的刪除、從新收集。5. 對(duì)收集到的數(shù)據(jù)進(jìn)行關(guān)鍵詞的檢索。6. 對(duì)檢索出的數(shù)據(jù)要可

21、定位性,即可以顯示對(duì)數(shù)據(jù)的出處的鏈接。7. 實(shí)現(xiàn)中英文分詞功能,能夠按中文或者英文單詞檢索數(shù)據(jù)。&實(shí)現(xiàn)無(wú)刷新的顯示搜索結(jié)果,對(duì)搜索用時(shí)的計(jì)算、顯示,關(guān)鍵字高亮顯 示等。9.邏輯搜索功能比如“中國(guó)” and “北京” and not (“海淀區(qū)” and “中關(guān)村”)。3. 3性能需求1. 精度:1.1對(duì)收集到的信息需要一定的完整性,即對(duì)鏈接層次里的每個(gè)鏈接頁(yè) 面都能夠收集得到,并寫(xiě)入收集的存儲(chǔ)區(qū)里。1. 2對(duì)搜索出的內(nèi)容需要包含有關(guān)鍵字信息2. 時(shí)間特性要求:2. 1數(shù)據(jù)收集吋,因?yàn)槭菍?duì)internet網(wǎng)上web信息的收集,并且采用url級(jí)鏈?zhǔn)降木W(wǎng)頁(yè)收集。收集數(shù)據(jù)時(shí)不能夠出現(xiàn)無(wú)響應(yīng)的等

22、待。2. 2搜索時(shí)響應(yīng)時(shí)間應(yīng)不超過(guò)3秒,無(wú)論搜索的記錄多少。3. 靈活性3. 1具有良好的中文切詞功能。3.4輸入輸出要求輸入:搜索的關(guān)鍵字。處理:去前后空格,關(guān)鍵字,查詢(xún)索引庫(kù)。輸岀:web頁(yè)面上顯示搜索信息。3. 5運(yùn)行需求1 硬件壞境需求:需要使用專(zhuān)用服務(wù)器,p4以上,512m以上內(nèi)存,80g以上硬盤(pán);internet 網(wǎng)絡(luò)連接。2.軟件壞境:源端:windows 2003/xp 操作系統(tǒng)、mssql server 2000 數(shù)據(jù)庫(kù)、iis5.0、.netframework 1.1 o4方案設(shè)計(jì)結(jié)合前面的同步原理,以及需求的介紹,下面給出同步的方案設(shè)計(jì)。4.1搜索引擎模型模型包括爬蟲(chóng)、索

23、引生成、查詢(xún)以及系統(tǒng)配置部分。爬蟲(chóng)包括:網(wǎng)頁(yè)抓取 模塊、網(wǎng)頁(yè)減肥模塊、爬蟲(chóng)維持模塊。索引生成包括:基于文本文件的索引、 基于數(shù)據(jù)庫(kù)的索引。查詢(xún)部分有ajax、后臺(tái)處理、前臺(tái)界面模塊。如圖4所示。爬蟲(chóng)索引查詢(xún)圖4系統(tǒng)模塊4.2數(shù)據(jù)庫(kù)的設(shè)計(jì)本課題包含一張用于存放抓取冋來(lái)的網(wǎng)頁(yè)信息如表1。表1網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)表邏輯字段名物理字段名字段類(lèi)型是否為空主鍵外鍵說(shuō)明編號(hào)idintnot nullyes自增加地址urlvarchar(50)not null內(nèi)容contentvarcllar(looo)not nullmeta標(biāo)簽內(nèi) 容網(wǎng)頁(yè)標(biāo)題 創(chuàng)建時(shí)間matatitlecreatedatevarchar(100)

24、varchar(100)datetime(8)not nullnot nullnot null4. 3模塊設(shè)計(jì)該模型按照功能劃分為三個(gè)部分,一是爬蟲(chóng)抓取網(wǎng)頁(yè)部分,二是從數(shù)據(jù)庫(kù)建立索引部分,三是從前臺(tái)頁(yè)面查詢(xún)部分。系統(tǒng)的功能流程(如圖5.1和5.2)。輸入一個(gè)url獲取有效記錄使用l搜索類(lèi)ajax 結(jié)果列表圖5.1功能流程圖圖5. 2模塊圖該系統(tǒng)用3個(gè)模塊來(lái)實(shí)現(xiàn)搜索引擎的主要功能。流程如上圖所示。從一個(gè)或若干初始網(wǎng)頁(yè)的url開(kāi)始,獲得初始網(wǎng)頁(yè)上的url,在抓取網(wǎng) 頁(yè)的過(guò)程中,不斷從當(dāng)前頁(yè)面上抽取新的url放入隊(duì)列,直到滿(mǎn)足系統(tǒng)的一定 停止條件。這條件可以是限定的謀個(gè)域名空間、或者是限定的網(wǎng)頁(yè)抓取

25、級(jí)數(shù)。 當(dāng)在獲取url時(shí)存在這樣的問(wèn)題就是在實(shí)際應(yīng)用中主要以絕對(duì)地址和和對(duì)地 址來(lái)表現(xiàn)。絕對(duì)地址是指一個(gè)準(zhǔn)確的、無(wú)歧義的internet資源的位置,包含域名 (主機(jī)名)、路徑名和文件名;相對(duì)地址是絕對(duì)地址的一部分。然后把抓取到的 網(wǎng)頁(yè)信息包括網(wǎng)頁(yè)內(nèi)容、標(biāo)題、鏈接抓取時(shí)間等信息經(jīng)過(guò)'減肥'后保存到網(wǎng) 頁(yè)存儲(chǔ)數(shù)據(jù)庫(kù)表里。然后通過(guò)正則表達(dá)式,去掉多余的html標(biāo)簽。因?yàn)樽ト?的網(wǎng)頁(yè)含有html標(biāo)簽、javascript等,對(duì)搜索多余的信息,如果抓取到的網(wǎng)頁(yè) 不經(jīng)過(guò)處理就會(huì)使搜索變得不夠精確。讓爬蟲(chóng)程序能繼續(xù)運(yùn)行下去,就得抓取這個(gè)網(wǎng)頁(yè)上的其它url,所以要用 正則將這個(gè)網(wǎng)頁(yè)上的所有ur

26、l都取出來(lái)放到一個(gè)隊(duì)列里。用同樣的方法繼續(xù)抓 取網(wǎng)頁(yè),這里將運(yùn)用到多線(xiàn)程技術(shù)。為了對(duì)文檔進(jìn)行索引,lucene提供了五個(gè)基礎(chǔ)的類(lèi),他們分別是document, field, index writer, analyzer, directory document 是用來(lái)描述文檔的,這里的 文檔可以指一個(gè)html頁(yè)面,一封電子郵件,或者是一個(gè)文本文件。一個(gè) document對(duì)象由多個(gè)field對(duì)象組成的??梢园岩粋€(gè)document對(duì)象想象成數(shù) 據(jù)庫(kù)中的一個(gè)記錄,而每個(gè)field對(duì)象就是記錄的一個(gè)字段。在一個(gè)文檔被索引 之前,首先需要對(duì)文檔內(nèi)容進(jìn)行分詞處理,這部分工作就是由analyzer來(lái)做的。 a

27、nalyzer類(lèi)是一個(gè)抽象類(lèi),它有多個(gè)實(shí)現(xiàn)。針對(duì)不同的語(yǔ)言和應(yīng)用需要選擇適 合的analyzero analyzer把分詞后的內(nèi)容交給indexwriter來(lái)建立索引。所有的搜索引擎的目標(biāo)都是為了用戶(hù)查詢(xún)。通過(guò)查詢(xún)頁(yè)面,輸入關(guān)鍵字,提交給系統(tǒng),程序就開(kāi)始處理,最后把結(jié)果以列表的形式顯示出來(lái)。在用lucene的搜索引擎中,用到了 lucene提供的方法,可從所建立的索引文檔中獲得結(jié)果。5系統(tǒng)實(shí)現(xiàn)5. 1開(kāi)發(fā)環(huán)境開(kāi)發(fā)平臺(tái)的選擇:本系統(tǒng)的開(kāi)發(fā)平臺(tái)選擇微軟公司的.net,開(kāi)發(fā)工具采用asp.net。.net是microsoft面向web月艮務(wù)的平臺(tái),由框架、web服務(wù)、.net 企業(yè)服務(wù)器等幾部分組成

28、,提供涉及而較廣、功能較全面的解決方案。數(shù)據(jù)庫(kù) 選擇:根據(jù)需求分析選擇了 mssql sewer 2000。5. 2關(guān)鍵代碼詳解5.2.1代碼結(jié)構(gòu)如圖6:圖6代碼結(jié)構(gòu)在網(wǎng)頁(yè)爬蟲(chóng)console端應(yīng)用程序里輸入一個(gè)有效的url后這部份就開(kāi)始從 第一個(gè)url開(kāi)始遍歷相關(guān)的鏈接并把相關(guān)的信息寫(xiě)入到網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù) 里,然后就由索引牛成程序讀取網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù),對(duì)每條記錄牛成索引記 錄,存放于生成的索引庫(kù)文件里。生成索引需要調(diào)用lucene.net類(lèi)。索引生成 后在查詢(xún)部分就能夠在網(wǎng)頁(yè)上輸入關(guān)鍵字,對(duì)剛才抓取的信息的查詢(xún)。并可以 定位到信息的出處。下面對(duì)各部分關(guān)鍵代碼進(jìn)行詳解。5.2.2爬蟲(chóng)部分這部

29、份的功能就是從輸入的url開(kāi)始遍歷各個(gè)相關(guān)的網(wǎng)頁(yè),它包括三個(gè)功 能模塊:網(wǎng)頁(yè)抓取模塊、網(wǎng)頁(yè)減肥模塊、爬蟲(chóng)維持模塊。首先定義一些變量用于保存抓取到的網(wǎng)頁(yè)信息,urllist用于保存當(dāng)前頁(yè)面 上的url集合。然后根據(jù)全局變量url抓取此url的網(wǎng)頁(yè)信息到字節(jié)流變量里, 經(jīng)過(guò)轉(zhuǎn)碼后讀取到變量pagestring里,下步通過(guò)函數(shù)gethttpurl(pagestring)對(duì) pagestring中的url標(biāo)記進(jìn)行提取并返回到urllist變量里,函數(shù) gettitle(pagestring) 、 parsescript(pagestring) 、 parsehtml(pagestring)、 pars

30、echar(content)別對(duì)網(wǎng)頁(yè)信息變量獲取標(biāo)題、去除腳本塊、去除html標(biāo) 記、去除特殊字符操作。再下步就是對(duì)獲取到的標(biāo)題、網(wǎng)頁(yè)內(nèi)容、鏈接等信息 調(diào)用數(shù)據(jù)庫(kù)操作通用類(lèi)dai保存到數(shù)據(jù)庫(kù)里,這就實(shí)現(xiàn)了一個(gè)網(wǎng)頁(yè)的抓取。再 下步就是循環(huán)的對(duì)獲取到的url列表創(chuàng)建線(xiàn)程,針對(duì)每個(gè)url來(lái)循環(huán)的執(zhí)行 上面的網(wǎng)頁(yè)信息的抓取操作。具體代碼如下: private static void urlthread()string title=""string content 二”;string mata=,m;string url二”“;string urlarr = null;stringb

31、uilder urllist = new stringbuilder();system.net.webclient client=new system.net.webclient();trystream strm=null;try/讀取一個(gè)url的信息到流變量里stream strm=client.openread(url);catchconsole.writeline(murl無(wú)法找到! ”);return;streamreader sr=new streamreader(strm,encoding.getencoding(mgb2312");string pagestring=s

32、r.readtoend();/從流屮讀収網(wǎng)頁(yè)信息到字符串變量屮 strm.close();urllist = gethttpurl(pagestring);title=gettitle(pagestring);content = parsescript(pagestring); /去掉腳本的網(wǎng)頁(yè)文本 content=parsehtml(pagestring);得到去 了 html 標(biāo)簽的網(wǎng)頁(yè)文本url=url;mata=,n,;content = parsechar(content);if(title != ” | title != string.empty) && url !

33、= ”“)dai.runsqlnonqueryc'insert into webcontent(url,content,title,mata) values(“'+url+”t”+content+”',”'+titlc+“',“'+mata+”')”); console.writeline(h對(duì)url:“+url+”相關(guān)信息寫(xiě)入數(shù)據(jù)庫(kù)成功! “);elseconsole.writeline(h對(duì)url:“+url+”相關(guān)信息寫(xiě)入數(shù)據(jù)庫(kù)失敗! “);urlarr=urllist.tostring().split(t);對(duì)前面獲取的url列表

34、循壞的創(chuàng)建線(xiàn)程再執(zhí)行本方法實(shí)現(xiàn)爬蟲(chóng)的維持for(int i=o;i<urlait.length;i+)url=urlarri;if(url = "" | url = null | url = string.empty)continue;thread th = new thread(new threadstarl(urlthread);th.start();catch 523索引生成這部分包含對(duì)文本的索引生成以及對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的索引生成,下面只對(duì)數(shù) 據(jù)庫(kù)索引生成的關(guān)鍵代碼進(jìn)行介紹:下面這段代碼實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)里存儲(chǔ)的記錄創(chuàng)建索引。主要通過(guò)lucene提供 的方法來(lái)協(xié)助實(shí)現(xiàn)。p

35、ublic indexer(string indexdir)#region lucene code首先通過(guò)標(biāo)準(zhǔn)分詞定義了一個(gè)索引寫(xiě)入器indexwriter writer = new indexwriter(indexdir, new standardanalyzer(), true);在創(chuàng)建索引庫(kù)時(shí),會(huì)合并多個(gè)segments文件。此方式有助丁減少索引文件 數(shù)量,減少同時(shí)打開(kāi)的文件數(shù)量。writer.setusecompoundfile(false);刪除以前生成的索引文件。system.10.directory.delete(idexdirjrue);# endregiondatetime

36、 start = datetime.now;doindexbydb(wriler);/datetime end = datetime.now;int docnum = writer.doccount();console.writeline(mindex finished. 0 documents takes 1 second役docnum, (timespan)(end - start).totalseconds);writer.optimize();writencloseo;使用lucene提供的方法對(duì)數(shù)據(jù)庫(kù)中的每條記錄建立索引實(shí)現(xiàn)如下:document doc = new document

37、();console.writeline("indexing 0 ", row"title".tostring(); doc.add(field.text("contentsn, row "content" .tos tring(); doc.add(field.keyword("titleh, row',title',j.tostring(); doc.add(field.keyword(,'mata",row,mata".tostring();doc.add(fiel

38、d.keyword("createdate",rowf"createdate"l.tostring(); doc.add(field.keyword(,urr,row,urr,.tostring();doc.add(field.keyword(,id,row,id,.tostring();writer. adddocument(doc);5.2.4頁(yè)面查詢(xún)這部分主要完成的功能是獲取前臺(tái)表單屮輸入的關(guān)鍵字,在程序屮獲取查 詢(xún)結(jié)果,最后把列表顯示在前臺(tái)頁(yè)面。ajax在此部分中被使用到,它完成的功能是部分刷新頁(yè)面,不需整個(gè)頁(yè)面 的重新加載。為了方便的在程序屮使

39、用ajax,此系統(tǒng)引用了封裝完善的ajax 類(lèi)庫(kù)。在程序中注冊(cè)后,在html里就可以使用javascript來(lái)調(diào)用后臺(tái)的程序。 選取部分代碼來(lái)說(shuō)明:首先在頁(yè)面后臺(tái)程序中進(jìn)行ajax注冊(cè),代碼如下:private void page_load(object sender, system.eventargs e)/ajax注冊(cè) ajaxpro.utility.registertypeforajax(typeof(search);如果前臺(tái)javascript需要調(diào)用某個(gè)方法,那就在那個(gè)函數(shù)前加上 ajaxpro.ajaxmethod,表示此方法屬于ajax應(yīng)用。ajaxpro.ajaxmethodp

40、ublic string searchresult(string keywords,string pageno)其中,前臺(tái)所存在的文字的代碼如下:stringbuilder sb = new stringbuilder();sb.append(n<trxtd> 結(jié)果數(shù):u+result+h&nbsp;所用時(shí)間:”+t+” 毫秒 </td></tr>n);前臺(tái)顯示結(jié)果記錄的代碼,動(dòng)態(tài)生成table標(biāo)簽,如下:for(int i = startnum ; i < endnum; i+)在顯示內(nèi)容中,仍然使用到了 lucene提供的類(lèi),可以方便的從所

41、建立的索 引文檔中獲取網(wǎng)址,網(wǎng)頁(yè)標(biāo)題,內(nèi)容,時(shí)間。document doc = hits.doc(i);con tent=doc.get(uc on tentsh);content=content.replace(keywords,h<font color=red>u+keywords+m</font>m); sb.append(,r<tr class=n+c+m>u);sb.append("<td><a href=n+doc.get("url")+,>,'+doc.get("title

42、',)+',</a></td>");sb.append(u</tr>u);sb.append("<tr class="+c+">");sb.append("<td>m+content+"<br>"+doc.get(mcreatedate")+"</td>h); sb.append(n</tr>n);6測(cè)試為了檢驗(yàn)搜索引擎的基木功能是否實(shí)現(xiàn),過(guò)程是否出現(xiàn)錯(cuò)誤,以及是否達(dá) 到了需求說(shuō)明中所

43、定義的需求,測(cè)試結(jié)果介紹如下:6. 1功能測(cè)試第一步:確定數(shù)據(jù)庫(kù)中數(shù)據(jù)為空。運(yùn)行spider爬蟲(chóng),抓取網(wǎng)頁(yè)。運(yùn)行界面 及過(guò)程如圖7:c、 "c 二 dociment s and set t ingsadainxst rat orlfljindexdebo5 1 8 144spiihtt p : z/222 丄8.147 1.63/ch/index - html圖 7 spider第二步:運(yùn)行index模塊,把數(shù)據(jù)庫(kù)中的記錄建立索引,運(yùn)行界面及過(guò)程 如下:-lx如果存放索引的文件已經(jīng)存在,則會(huì)清除 當(dāng)數(shù)據(jù)庫(kù)里沒(méi)有記錄時(shí),如圖&c *c: docu>ent s and se

44、tt ingsad>inist rat or桌面indexde10-5-18-l-44diri.b犒空成功,現(xiàn)在開(kāi)始重新建立索引indexingindexingindexingindexingindexingindexingindexing口國(guó)高育 口國(guó)高育 咼考生扌iwtis頁(yè)擊場(chǎng)塘數(shù)索統(tǒng)ingindex finisbed. 7 documents takes 0.484375 second. press any key to continue圖 9index2第三步:運(yùn)行search web模塊,從表單中進(jìn)行關(guān)鍵字搜索,此搜索結(jié)果數(shù) 據(jù)來(lái)源于前2步的操作,如圖10。1 http :

45、/loc<lhozt/so &rchyab/sa arch, axpx輸入關(guān)鍵詞n投索圖 10 searchi當(dāng)在表單中輸入信息時(shí),結(jié)果以列表形式顯示,其中關(guān)鍵字顯示為紅色, 網(wǎng)頁(yè)的title顯示為藍(lán)色,其他信息包括搜集信息時(shí)的日期,內(nèi)容。圖片顯示 如圖11:輸入彌詞i高老生報(bào)老信i匚皺二索目結(jié)果數(shù):4所用時(shí)司:0.0156252抄直考生報(bào)考信息提交奇送生報(bào)考佶息提交 function high(which)theobject=whichhighhghnr«g=setlnteivaxhighhghut(theot9ect)jo)fhnctioit towhkh)clea

46、iintervakhighlight! 'aduchfilteis.alpha.opacityjoiftirction highhit(cux)if (cur.fillers.dpha.opacity 用尸:gaohwyun您己成功jshave been possfolehis woild wide web service rould not have been possible without the excellent contrkutions to the euiope-ld mailing list by all its member. i* d particulariy li

47、ke to think bovl (andy bovmgton) of sco ghent integration division. steve hosgpod of swansea university, and duncan smith of hewlett-packaxd for their imny and various contribulions. 1* d also like to thank the department of electronic and electrical ergiheenng for allows me to host the europe-ld se

48、rvices on their mgchmes i hope that you* w found tins web service useftil, if not please tet me know, any feedback on what we could do better is always uselul 1 can only do so much and any contributions you can make to this server and the othei parts of the europe-ld sendee wall be most welcome enter.隨著社會(huì)轉(zhuǎn)型步伐的加快、企業(yè)發(fā) 展周期的縮短以及全球經(jīng)濟(jì)的日玲融合 > 今天人們對(duì)待職業(yè)和生活的姿態(tài)發(fā)生了巨大的改吏.未乘新的就業(yè)根式是一個(gè)由三個(gè)階段構(gòu)成的循環(huán) >彼 總結(jié)為“藤找、充電、,這個(gè)循環(huán)將畫(huà)穿我們整個(gè)職業(yè)生涯如果你找到一份工作,這個(gè)循環(huán)將從你與新公司的協(xié)調(diào)開(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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論