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

下載本文檔

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

文檔簡介

太原理工大學(xué)畢業(yè)設(shè)計(論文)用紙搜索引擎的研究與實現(xiàn)摘 要網(wǎng)絡(luò)中的資源非常豐富,但是如何有效地找到自己需要的信息卻是一件困難的事情。網(wǎng)絡(luò)搜索引擎應(yīng)運而生。本文首先詳細介紹了網(wǎng)絡(luò)搜索引擎的系統(tǒng)結(jié)構(gòu),然后從網(wǎng)頁信息抓取、網(wǎng)頁內(nèi)容分析、網(wǎng)頁索引建立、用戶檢索與結(jié)果排序等方面進行詳細的說明。為了更加深刻的理解這種技術(shù),本人還親自實現(xiàn)了一個自己的搜索引擎,能夠?qū)崿F(xiàn)網(wǎng)頁內(nèi)容的抓取和搜索功能,也能夠自己添加內(nèi)容并顯示在搜索結(jié)果中。網(wǎng)絡(luò)搜索引擎根據(jù)初始配置,自動從網(wǎng)絡(luò)上抓取信息并處理,將提取到的信息結(jié)構(gòu)化,然后建立索引。然后通過web服務(wù)器接收用戶請求,在索引庫中找到相關(guān)結(jié)果并排序,最終通過頁面的形式呈現(xiàn)給用戶。本人在介紹搜索引擎的章節(jié)中除了詳細的闡述技術(shù)核心外還結(jié)合了搜索引擎的實現(xiàn)代碼來說明,圖文并茂、易于理解。關(guān)鍵詞:搜索引擎;網(wǎng)絡(luò);Lucene全套設(shè)計加扣 3012250582Research and implementation of search engineAbstractThe resources in the internet are abundant, but it is a difficult job to search some useful information. So a search engine is the best method to solve this problem. This article fist introduces the system structure of search engine based on the internet in detail, then gives a minute explanation form Spider search, engine and web server. In order to understand the technology more deeply, I have programmed a web search engine by myself.The news search engine is explained and searched according to hyperlink from a appointed web page, then indexes every searched information and adds it to the index database. Then after receiving the customers requests from the web server, it soon searches the right pages form the index engine。In the chapter of introducing search engine, it is not only elaborate the core technology, but also combine with the modern code,pictures included, easy to understand.Key words: search engine; network; Luceneii目錄摘 要iAbstractii1 引言12 搜索引擎研究22.1 搜索引擎發(fā)展歷史22.1.1 分類目錄時代22.1.2 文本檢索時代22.1.3 整合分析時代22.1.4 用戶中心時代22.2 搜索引擎的結(jié)構(gòu)22.2.1 Web 搜索引擎體系結(jié)構(gòu)22.2.2 網(wǎng)絡(luò)機器人32.2.3 網(wǎng)頁分析器42.2.4 網(wǎng)頁索引器52.2.5 網(wǎng)頁搜索器52.3 現(xiàn)代搜索引擎的主要技術(shù)62.3.1 倒排索引技術(shù)62.3.2 分布式技術(shù)62.4 小結(jié)73 開發(fā)平臺和技術(shù)83.1 Java編程語言83.2 MyEclipse93.3 Tomcat93.4 Lucene103.4.1 什么是Lucene103.4.2 索引和搜索103.4.3 lucene能做什么103.4.4 lucene的工作方式113.5 Spring113.6 Struts2123.7 Mybatis124 搜索引擎的總體設(shè)計134.1 系統(tǒng)概述134.2 系統(tǒng)需求134.3 系統(tǒng)結(jié)構(gòu):134.4 小結(jié)145 網(wǎng)絡(luò)機器人的實現(xiàn)155.1 什么是網(wǎng)絡(luò)機器人155.2 網(wǎng)絡(luò)機器人結(jié)構(gòu)分析155.2.1 如何解析HTML165.2.2 工作流程175.3 網(wǎng)絡(luò)機器人的實現(xiàn)175.3.1 實現(xiàn)說明175.3.2 HTML頁面結(jié)構(gòu)175.3.3 代碼分析185.4 內(nèi)容處理185.4.1 正文提取195.5 小結(jié)226 網(wǎng)頁索引程序的實現(xiàn)236.1 索引程序簡介236.2 準備工作236.2.1 分詞236.2.2 特征值抽取246.3 Lucene索引器266.3.1 實現(xiàn)原理266.3.2 存儲結(jié)構(gòu)276.3.3 提高性能286.4 實現(xiàn)286.4.1 代碼說明286.5 小結(jié)307 網(wǎng)絡(luò)搜索程序和客戶端的實現(xiàn)317.1 網(wǎng)絡(luò)搜索程序簡介317.2 檢索317.3 排序317.3.1 Jaccard coefficient327.3.2 向量空間模型(Vector Space Model,VSM)327.4 Web客戶端實現(xiàn)337.4.1 JavaEE與Web容器337.4.2 查詢的基本方法347.4.3 請求處理347.4.4 主要代碼347.4.5 前端界面357.5 小結(jié)37結(jié)論38參考文獻39致 謝40外文原文41中文翻譯45v 太原理工大學(xué)畢業(yè)設(shè)計(論文)用紙1 引言面對浩瀚的網(wǎng)絡(luò)資源,搜索引擎為所有網(wǎng)上沖浪的用戶提供了一個入口,毫不夸張的說,所有的用戶都可以從搜索出發(fā)到達自己想去的網(wǎng)上任何一個地方。因此它也成為除了電子郵件以外最多人使用的網(wǎng)上服務(wù)。搜索引擎技術(shù)伴隨著WWW的發(fā)展是引人注目的。搜索引擎大約經(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)于利用一些已有技術(shù)實現(xiàn)的一個WWW上的應(yīng)用。在1994年3月到4月,網(wǎng)絡(luò)爬蟲World Web Worm (WWWW)平均每天承受大約1500次查詢。大約在1996年出現(xiàn)的第二代搜索引擎系統(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)時最先進的幾個搜索引擎號稱能建立從2,000,000到100,000,000的網(wǎng)頁索引。Altavista搜索引擎聲稱他們每天大概要承受20,000,000次查詢。2000年搜索引擎2000年大會上,按照Google公司總裁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、HotBot等。在中國,搜索引擎通常指基于網(wǎng)站目錄的搜索服務(wù)或是特定網(wǎng)站的搜索服務(wù),本人這里研究的是基于因特網(wǎng)的搜索技術(shù)。12 搜索引擎研究2.1 搜索引擎發(fā)展歷史2.1.1 分類目錄時代分類目錄是將網(wǎng)站信息系統(tǒng)地分類整理,提供一個按類別編排的網(wǎng)站目錄,在每類中,排列著屬于這一類別的網(wǎng)站站名、網(wǎng)址鏈接、內(nèi)容提要,以及子分類目錄,可以在分類目錄中逐級瀏覽尋找相關(guān)的網(wǎng)站,分類目錄中往往還提供交叉索引,從而可以方便地在相關(guān)的目錄之間跳轉(zhuǎn)和瀏覽。也可以使用關(guān)鍵詞進行檢索,檢索結(jié)果為網(wǎng)站信息,這種檢索也稱之為網(wǎng)站檢索。分類目錄專案效仿一些在20世紀最重要的編輯員/志愿者項目。就像牛津英文字典通過志愿者的努力成為權(quán)威的工具一樣,Open Directory跟隨著它的腳步也成為了權(quán)威的互聯(lián)網(wǎng)分類目錄。2.1.2 文本檢索時代文本檢索,亦稱為自然語言檢索,指不對文獻進行任何標引,直接通過計算機以自然語言中的語詞匹配查找的系統(tǒng)。文本檢索進行匹配的對象,可以是整個出版的文本,包括文章、報告甚整本圖書,也可以是它的部分,如文摘、摘錄或只是文獻的題名。以整個文獻正文為對象進行的匹配查找,稱為全文檢索。這種方式無需標引,數(shù)據(jù)庫制作快,可以很快投入運行。2.1.3 整合分析時代這一代的搜索引擎所使用的方法大概是和我們今天的網(wǎng)站的外部鏈接形式基本相同,在當(dāng)時,外部鏈接代表的是一種推薦的含義,通過每個網(wǎng)站的推薦鏈接的數(shù)量來判斷一個網(wǎng)站的流行性和重要性。然后搜索引擎再結(jié)合網(wǎng)頁內(nèi)容的重要性來和相似程度來改善用戶搜索的信息質(zhì)量。這種模式的首先使用者是google,google不僅為首次使用并且大獲成功,這一成就在當(dāng)時引起了學(xué)術(shù)界和其他商業(yè)搜索引擎的極度關(guān)注。后來,學(xué)術(shù)界以此成就為基礎(chǔ),提出了更多的改進的鏈接分析算法。大多數(shù)的主流搜索引擎都在使用分析鏈接技術(shù)算法。這就是第三代搜索引擎。2.1.4 用戶中心時代這一時代的搜索引擎的特點是以用戶為中心。其與第三代搜索引擎最大的區(qū)別是,對于相同的搜索關(guān)鍵詞,不同用戶得到的搜索結(jié)果可能不同。第四代 搜索將把個性化信息及人際推薦關(guān)系疊加到鏈接分析上,大大改善搜索結(jié)果排序效果;同時,跨媒體搜索將實現(xiàn)諸如用圖片搜索圖片等功能,打通文字,圖片,視頻,聲音的界限,顛覆現(xiàn)在全部基于關(guān)鍵字的搜索方法,為用戶帶來更加直觀的搜索體驗。 并且,社交關(guān)系的引入將使網(wǎng)頁排序質(zhì)量大大提高。2.2 搜索引擎的結(jié)構(gòu)2.2.1 Web 搜索引擎體系結(jié)構(gòu)在搜索引擎的后臺,有一些用于搜集網(wǎng)頁信息的程序。所收集的信息一般是能表明網(wǎng)站內(nèi)容(包括網(wǎng)頁本身、網(wǎng)頁的URL地址、構(gòu)成網(wǎng)頁的代碼以及進出網(wǎng)頁的連接)的關(guān)鍵詞或者短語。接著將這些信息的索引存放到數(shù)據(jù)庫中。一個典型的網(wǎng)絡(luò)搜索引擎的結(jié)構(gòu)如圖2-1所示:圖 2-1 搜索引擎的結(jié)構(gòu)2.2.2 網(wǎng)絡(luò)機器人又稱為網(wǎng)絡(luò)爬蟲,網(wǎng)絡(luò)蜘蛛等。在搜索引擎系統(tǒng)中扮演搜集器的角色。它通常是一個計算機程序,在需要時運行。網(wǎng)絡(luò)機器人通過統(tǒng)一資源定位符(URL)來訪問網(wǎng)絡(luò)資源。它會從一個入口URL列表開始,通過一定的算法順序,下載并通過網(wǎng)頁分析器分析網(wǎng)頁,從網(wǎng)頁中發(fā)現(xiàn)新的URL 地址,并將新發(fā)現(xiàn)的URL 添加到待訪問的URL 列表中。網(wǎng)絡(luò)爬蟲將得到的網(wǎng)頁保存在本地網(wǎng)頁庫中,以備網(wǎng)頁分析器和索引器進行處理和使用?;ヂ?lián)網(wǎng)中的網(wǎng)頁數(shù)以億計,一個網(wǎng)絡(luò)機器人應(yīng)該盡可能多地覆蓋網(wǎng)絡(luò),但不可能訪問到所有的網(wǎng)頁。如何更加有效地下載網(wǎng)頁就成了網(wǎng)絡(luò)機器人設(shè)計過程中最需要解決的問題。為了有效利用帶寬資源和處理能力,抓取過程中需要算法和策略支持。常用的算法有深度優(yōu)先搜索策略、IP段掃描搜索策略、廣度優(yōu)先搜索策略等。通常主要采用廣度優(yōu)先搜索策略,保證對互聯(lián)網(wǎng)的整體覆蓋率。同時配合探測性的搜索策略,快速發(fā)現(xiàn)新的網(wǎng)絡(luò)資源。每個搜索策略的具體介紹如下:1. 深度優(yōu)先搜索策略:深度優(yōu)先的基本方法是依次訪問下一級的網(wǎng)頁鏈接,直到不能再深入為止。網(wǎng)絡(luò)機器人完成一個搜索分支后返回到上一個鏈接節(jié)點進一步搜索其他鏈接。當(dāng)所有鏈接已經(jīng)遍歷之后,搜索任務(wù)結(jié)束。深度優(yōu)先算法比較適合垂直搜索或站內(nèi)搜索等應(yīng)用環(huán)境。對大規(guī)模的互聯(lián)網(wǎng)搜索,由于部分網(wǎng)站內(nèi)容層次結(jié)構(gòu)很深,會造成巨大的資源浪費。2. IP 段掃描搜索策略:IP 段掃描搜索策略的基本思想是以某種策略找到一批起始IP地址。從設(shè)定的IP地址,按照IP地址遞增的方式搜索后續(xù)的每一個IP地址中的信息。這種方法可以解決網(wǎng)絡(luò)蜘蛛對HTML文件中指向其他Web站點的超鏈接地址的過度依賴,能夠發(fā)現(xiàn)新的孤立資源。但是這種策略計算范圍巨大,不適用于大規(guī)模的搜索,但可以用于配合其他策略在小范圍內(nèi)全面搜索。3. 廣度優(yōu)先搜索策略:廣度優(yōu)先搜索策略主要按照目錄層次比較淺的網(wǎng)頁內(nèi)容優(yōu)先的搜索方法。網(wǎng)絡(luò)機器人先訪問所有同一層次的內(nèi)容,然后再繼續(xù)搜索下一層。這種方法保證了對網(wǎng)頁內(nèi)容的有效控制,避免遇到一個無窮深層分智時無法結(jié)束的問題。廣度優(yōu)先搜索策略實現(xiàn)方便,不需要存儲大量的中間節(jié)點,目前被廣泛采用。存在的問題是需要話費比較長的時間才能到達深層的網(wǎng)頁。單個網(wǎng)站的訪問速度通常不高,為了提高網(wǎng)絡(luò)利用率,網(wǎng)絡(luò)機器人通常會采用多線程技術(shù)來同時訪問多個網(wǎng)頁。網(wǎng)絡(luò)機器人遇到的另一個問題是如何高效且正確的提取網(wǎng)頁中的URL。對于普通的HTML中你的鏈接比較容易。但是隨著XHTML技術(shù)的普及,大量的網(wǎng)頁不再是簡單的鏈接關(guān)系。很多網(wǎng)絡(luò)入口都包含在Javascript代碼中,甚至有些是動態(tài)生成的。如何正確地得到這些URL,如何解決死鏈,如何處理非文本內(nèi)容等, 都是網(wǎng)絡(luò)機器人需要解決的問題。2.2.3 網(wǎng)頁分析器網(wǎng)絡(luò)機器人搜集來的網(wǎng)頁信息或下載的文檔一般要首先進行分析,用于后續(xù)建立索引。對于通用型網(wǎng)絡(luò)搜索引擎,網(wǎng)頁提取技術(shù)主要對下載的數(shù)據(jù)進行正文提取分析操作;對于垂直搜索,在結(jié)構(gòu)化操作以后,還要對其進行數(shù)據(jù)挖掘,進行領(lǐng)域信息識別,從而提高信息的質(zhì)量。我呢當(dāng)分析技術(shù)一般包括分詞、過濾、轉(zhuǎn)換等工作,具體處理與文檔類型、搜索引擎的具體結(jié)構(gòu)和算法密切相關(guān)。網(wǎng)頁分析中的一項關(guān)鍵技術(shù)就是分詞。與英文為代表的拉丁語系語言相比,英文以空格作為天然的分隔符,而中文由于繼承自古代漢語的傳統(tǒng),詞語之間沒有分隔。古代漢語中除了連綿詞和人名地名等,詞通常就是單個漢字,所以當(dāng)時沒有分詞書寫的必要。而現(xiàn)代漢語中雙字或多字詞居多,一個字不再等同于一個詞。在中文里,“詞”和“詞組”邊界模糊。現(xiàn)代漢語的基本表達單元雖然為“詞”,且以雙字或者多字詞居多,但由于人們認識水平的不同,對詞和短語的邊界很難去區(qū)分。中文分詞對于搜索引擎來說,最重要的并不是找到所有結(jié)果,因為在上百億的網(wǎng)頁中找到所有結(jié)果沒有太多的意義,沒有人能看得完,最重要的是把最相關(guān)的結(jié)果排在最前面,這也稱為相關(guān)度排序。中文分詞的準確與否,常常直接影響到對搜索結(jié)果的相關(guān)度排序。從定性分析來說,搜索引擎的分詞算法不同,詞庫的不同都會影響頁面的返回結(jié)果?,F(xiàn)有的分詞算法可分為三大類:基于字符串匹配的分詞方法、基于理解的分詞方法和基于統(tǒng)計的分詞方法。按照是否與詞性標注過程相結(jié)合,又可以分為單純分詞方法和分詞與標注相結(jié)合的一體化方法。2.2.4 網(wǎng)頁索引器網(wǎng)頁需要建立索引才能被后續(xù)流程使用。設(shè)計良好的索引可以加快搜索速度,能夠更準確地進行網(wǎng)頁定位,從而減少設(shè)計開銷。索引的功能是對搜索器所搜索的信息進行分析處理,從中抽取索引項,用于表示文檔以及生成文檔庫的索引表。搜索引擎普遍借鑒了傳統(tǒng)信息檢索中的索引模型,包括倒排文檔、矢量空間模型、概率模型等。為了快速查找特定的信息,建立索引數(shù)據(jù)庫是一種常用的方法,即將文檔表示為一種便于檢索的方式,并存儲在索引數(shù)據(jù)庫中。索引數(shù)據(jù)庫的格式是一種特殊的數(shù)據(jù)存儲格式。索引結(jié)構(gòu)和效率的好壞是Web信息檢索系統(tǒng)的關(guān)鍵,要求易于實現(xiàn)和維護、檢索速度快、空間需求低。倒排索引的結(jié)構(gòu)如圖2-2所示:圖 2-2 倒排索引的結(jié)構(gòu)索引器是用來建立索引的軟件程序。索引器的主要功能是分析處理文檔的內(nèi)容和信息,把文檔轉(zhuǎn)化成一系列的索引項。索引中的最小信息單位是索引項,索引項除了文檔內(nèi)容,還可以包含文檔的大小、時間、類型、存放路徑等描述信息和附屬信息。索引項可以是短語、詞組或單字。索引項存儲的信息包括關(guān)鍵詞及其權(quán)重,以及來源URL、更新時間、編碼格式、鏈接情況等。搜索引擎的索引通常使用倒排表,也就是常說的倒排索引。根據(jù)要求的速度和精度等要求,搜索引擎可以采用復(fù)合索引和簡單索引。記錄索引項在文檔中出現(xiàn)的位置,對檢索時的匹配度計算也很有好處。索引表也可能要記錄索引項在文檔中出現(xiàn)的位置,以便檢索器計算索引項之間的相鄰或接近關(guān)系。2.2.5 網(wǎng)頁搜索器用戶輸入檢索詞后,搜索引擎返回的結(jié)果需要根據(jù)語義相關(guān)性和其他權(quán)值進行排序。通常的網(wǎng)頁排序除了基本的檢索詞語素相關(guān)外,還要根據(jù)網(wǎng)頁的連接情況,分析網(wǎng)頁自身的重要性,保證用戶得到重要的網(wǎng)頁信息。中文搜索引擎中經(jīng)常由于語義歧義和差別,造成關(guān)鍵字檢索將誒過的語義相關(guān)性效果較差。一詞多義造成的搜索結(jié)果和用戶本意差距較大的情況時常發(fā)生。垂直搜索由于只包含某個領(lǐng)域的信息,詞義明確,可以提高結(jié)果的相關(guān)性。2.3 現(xiàn)代搜索引擎的主要技術(shù)2.3.1 倒排索引技術(shù)在關(guān)系數(shù)據(jù)庫系統(tǒng)里,索引1是檢索數(shù)據(jù)最有效率的方式。但對于搜索引擎,它并不能滿足其特殊要求:1)海量數(shù)據(jù):搜索引擎面對的是海量數(shù)據(jù),像Google,百度這樣大型的商業(yè)搜索引擎索引都是億級甚至幾千億的網(wǎng)頁數(shù)量,面對如此海量數(shù)據(jù),使得數(shù)據(jù)庫系統(tǒng)很難有效的管理。2)數(shù)據(jù)操作簡單:搜索引擎使用的數(shù)據(jù)操作簡單,一般而言,只需要增、 刪、 改、 查幾個功能,而且數(shù)據(jù)都有特定的格式,可以針對這些應(yīng)用設(shè)計出簡單高效的應(yīng)用程序。而一般的數(shù)據(jù)庫系統(tǒng)則支持大而全的功能,同時損失了速度和空間。最后,搜索引擎面臨大量的用戶檢索需求,這要求搜索引擎在檢索程序的設(shè)計上要分秒必爭,盡可能的將大運算量的工作在索引建立時完成,使檢索運算盡量的少。一般的數(shù)據(jù)庫系統(tǒng)很難承受如此大量的用戶請求,而且在檢索響應(yīng)時間和檢索并發(fā)度上都不及我們專門設(shè)計的索引系統(tǒng)。倒排索引,也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。通過倒排索引,可以根據(jù)單詞快速獲取包含這個單詞的文檔列表。倒排索引主要由兩個部分組成:“單詞詞典”和“倒排文件”。倒排索引有兩種不同的反向索引形式:一條記錄的水平反向索引(或者反向檔案索引)包含每個引用單詞的文檔的列表。一個單詞的水平反向索引(或者完全反向索引)又包含每個單詞在一個文檔中的位置。后者的形式提供了更多的兼容性(比如短語搜索),但是需要更多的時間和空間來創(chuàng)建?,F(xiàn)代搜索引擎的索引都是基于倒排索引。相比“簽名文件”、“后綴樹”等索引結(jié)構(gòu),“倒排索引”是實現(xiàn)單詞到文檔映射關(guān)系的最佳實現(xiàn)方式和最有效的索引結(jié)構(gòu).2.3.2 分布式技術(shù)分布式搜索引擎是根據(jù)地域、主題、IP地址及其它的劃分標準將全網(wǎng)分成若干個自治區(qū)域,在每個自治區(qū)域內(nèi)設(shè)立一個檢索服務(wù)器,而每個檢索服務(wù)器由信息搜索機器人、索引搜索軟件數(shù)據(jù)庫和代理三部分組成。信息搜索機器人負責(zé)本自治區(qū)域內(nèi)的信息搜索,并建立索引信息存入索引數(shù)據(jù)庫。代理負責(zé)向用戶提供查詢接口,并與其它代理進行互換,實現(xiàn)檢索服務(wù)器之間的信息交換,且查詢可以重定向,即如果一個索引數(shù)據(jù)庫沒有滿足查詢要求,它可以將查詢請求發(fā)送到其它檢索服務(wù)器上。它與集中式搜索引擎相比有以下優(yōu)點:各檢索服務(wù)器之間相互共享資源,站點只向本自治區(qū)域內(nèi)的信息搜索機器人提供信息,減輕了網(wǎng)絡(luò)及各站點的負載。各代理之間的相互協(xié)作及查詢重定向使得提供的服務(wù)更完善。與Web本身的分布式特性相適應(yīng),具有良好的可擴充性,便于維護。索引信息劃分到各自的索引數(shù)據(jù)庫中,使得各索引數(shù)據(jù)庫相對較小,查詢的響應(yīng)時間相對較短。部分檢索服務(wù)器發(fā)生故障時,其它部分能正常工作。2.4 小結(jié)本章介紹了搜索引擎的發(fā)展歷程,并討論了未來搜索引擎的形態(tài)。然后重點闡述了現(xiàn)代網(wǎng)絡(luò)搜索引擎的主要組成結(jié)構(gòu)。網(wǎng)絡(luò)機器人利用搜索策略和算法獲取網(wǎng)頁。網(wǎng)頁分析器對網(wǎng)頁進行正文提取、分詞等加工操作,分析和處理,生成可以被索引的標準文檔。網(wǎng)頁索引器生成對文檔的倒排索引。網(wǎng)頁搜索器分析用戶輸入的關(guān)鍵詞,在索引庫中檢索,按照一定的算法將檢索結(jié)果排序后呈現(xiàn)給用戶。最后,介紹了現(xiàn)代搜索引擎的兩個主要技術(shù):倒排索引和分布式技術(shù)。3 開發(fā)平臺和技術(shù)本章主要介紹了搜索引擎系統(tǒng)的開發(fā)平臺以及使用的技術(shù)。3.1 Java編程語言Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計語言和Java平臺(即JavaEE, JavaME, JavaSE)的總稱。Java自面世后就非常流行,發(fā)展迅速,對C+語言形成了有力沖擊。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。Java語言具有如下特點:1.簡單Java最初是為對家用電器進行集成控制而設(shè)計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面:1)Java的風(fēng)格類似于C+,因而C+程序員是非常熟悉的。從某種意義上講,Java語言是C及C+語言的一個變種,因此,C+程序員可以很快就掌握Java編程技術(shù)。2)Java摒棄了C+中容易引發(fā)程序錯誤的地方,如指針和內(nèi)存管理。3)Java提供了豐富的類庫。2.面向?qū)ο竺嫦驅(qū)ο罂梢哉f是Java最重要的特性。Java語言的設(shè)計完全是面向?qū)ο蟮模恢С诸愃艭語言那樣的面向過程的程序設(shè)計技術(shù)。Java支持靜態(tài)和動態(tài)風(fēng)格的代碼繼承及重用。單從面向?qū)ο蟮奶匦詠砜?,Java類似于SmallTalk,但其它特性、尤其是適用于分布式計算環(huán)境的特性遠遠超越了SmallTalk。3.分布式Java包括一個支持HTTP和FTP等基于TCP/IP協(xié)議的子庫。因此,Java應(yīng)用程序可憑借URL打開并訪問網(wǎng)絡(luò)上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。為分布環(huán)境尤其是Internet提供的動態(tài)內(nèi)容無疑是一項非常宏偉的任務(wù),但Java的語法特性卻使我們很容易地實現(xiàn)這項目標。4.健壯Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自已操縱內(nèi)存減少了內(nèi)存出錯的可能性。Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這些功能特征大大縮短了開發(fā)Java應(yīng)用程序的周期。Java提供Null指針檢測數(shù)組邊界檢測異常出口字節(jié)代碼校驗。5.結(jié)構(gòu)中立另外,為了建立Java作為網(wǎng)絡(luò)的一個整體,Java將它的程序編譯成一種結(jié)構(gòu)中立的中間文件格式。只要有Java運行系統(tǒng)的機器都能執(zhí)行這種中間代碼。現(xiàn)在,Java運行系統(tǒng)有Solaris2.4(SPARC),Win32系統(tǒng)(Windows95和WindowsNT)等.Java源程序被編譯成一種高層次的與機器無關(guān)的byte-code格式語言,這種語言被設(shè)計在虛擬機上運行,由機器相關(guān)的運行調(diào)試器實現(xiàn)執(zhí)行。6.安全Java的安全性可從兩個方面得到保證。一方面,在Java語言里,象指針和釋放內(nèi)存等C+功能被刪除,避免了非法內(nèi)存操作。另一方面,當(dāng)Java用來創(chuàng)建瀏覽器時,語言功能和瀏覽器本身提供的功能結(jié)合起來,使它更安全。Java語言在你的機器上執(zhí)行前,要經(jīng)過很多次的測試。它經(jīng)過代碼校驗,檢查代碼段的格式,檢測指針操作,對象操作是否過分以及試圖改變一個對象的類型。7.可移植的這句話一直是Java程序設(shè)計師們的精神指標,也是Java之所以能夠受到程序設(shè)計師們喜愛的原因之一,最大的功臣就是JVM的技術(shù)。大多數(shù)編譯器產(chǎn)生的目標代碼只能運行在一種CPU上(如Intel的x86系列),即使那些能支持多種CPU的編譯器也不能同時產(chǎn)生適合多種CPU的目標代碼。如果你需要在三種CPU(如x86、SPARC和MIPS)上運行同一程序,就必須編譯三次。但JAVA編譯器就不同了。JAVA編譯器產(chǎn)生的目標代碼(J-Code)是針對一種并不存在的CPU-JAVA虛擬機(JAVA Virtual Machine),而不是某一實際的CPU。JAVA虛擬機能掩蓋不同CPU之間的差別,使J-Code能運行于任何具有JAVA虛擬機的機器上。3.2 MyEclipseMyEclipse企業(yè)級工作平臺(MyEclipseEnterprise Workbench ,簡稱MyEclipse)是對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, Struts,Spring, Hibernate,EJB3,JDBC數(shù)據(jù)庫鏈接工具等多項功能??梢哉fMyEclipse是幾乎囊括了目前所有主流開源產(chǎn)品的專屬eclipse開發(fā)工具。3.3 TomcatTomcat是由Apache軟件基金會下屬的Jakarta項目開發(fā)的一個Servlet容器,按照Sun Microsystems提供的技術(shù)規(guī)范,實現(xiàn)了對Servlet和JavaServer Page(JSP)的支持,并提供了作為Web服務(wù)器的一些特有功能,如Tomcat管理和控制平臺、安全局管理和Tomcat閥等。由于Tomcat本身也內(nèi)含了一個HTTP服務(wù)器,它也可以被視作一個單獨的Web服務(wù)器。但是,不能將Tomcat和Apache Web服務(wù)器混淆,Apache Web Server是一個用C語言實現(xiàn)的HTTP web server;這兩個HTTP web server不是捆綁在一起的。Apache Tomcat包含了一個配置管理工具,也可以通過編輯XML格式的配置文件來進行配置。Tomcat提供了一個Jasper編譯器用以將JSP編譯成對應(yīng)的Servlet。Tomcat的Servlet引擎通常與Apache或者其他Web服務(wù)器一起工作。除了用于開發(fā)過程中的調(diào)試以及那些對速度和事務(wù)處理只有很小要求的用戶,很少會將Tomcat單獨作為Web服務(wù)器。但隨著版本的更新,正有越來越多的用戶將其單獨作為Web服務(wù)器用以那些對速度和可靠性有較高要求的環(huán)境中。3.4 Lucene3.4.1 什么是LuceneApacheLucene是一個基于Java全文搜索引擎,利用它可以輕易地為Java軟件加入全文搜尋功能。Lucene是一個基于Java的全文信息檢索工具包,它不是一個完整的搜索應(yīng)用程序,而是為你的應(yīng)用程序提供索引和搜索功能??梢苑奖愕那度氲礁鞣N應(yīng)用中實現(xiàn)針對應(yīng)用的全文索引/檢索功能。因此它并不像 或者google Desktop那么拿來就能用,它只是提供了一種工具讓你能實現(xiàn)這些產(chǎn)品。Lucene目前是ApacheJakarta家族中的一個開源項目。也是目前最為流行的基于Java開源全文檢索工具包。目前已經(jīng)有很多應(yīng)用程序的搜索功能是基于Lucene的,比如Eclipse的幫助系統(tǒng)的搜索功能。Lucene能夠為文本類型的數(shù)據(jù)建立索引,所以你只要能把你要索引的數(shù)據(jù)格式轉(zhuǎn)化為文本的,Lucene就能對你的文檔進行索引和搜索。比如你要對一些HTML文檔,PDF文檔進行索引的話你就首先需要把HTML文檔和PDF文檔轉(zhuǎn)化成文本格式的,然后將轉(zhuǎn)化后的內(nèi)容交給Lucene進行索引,然后把創(chuàng)建好的索引文件保存到磁盤或者內(nèi)存中,最后根據(jù)用戶輸入的查詢條件在索引文件上進行查詢。不指定要索引的文檔的格式也使Lucene能夠幾乎適用于所有的搜索應(yīng)用程序。Lucene的最主要工作是替文件的每一個字作索引,索引讓搜尋的效率比傳統(tǒng)的逐字比較大大提高,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,最重要的是使使用者可以隨時應(yīng)自已需要自訂其功能。3.4.2 索引和搜索索引是現(xiàn)代搜索引擎的核心,建立索引的過程就是把源數(shù)據(jù)處理成非常方便查詢的索引文件的過程。為什么索引這么重要呢,試想你現(xiàn)在要在大量的文檔中搜索含有某個關(guān)鍵詞的文檔,那么如果不建立索引的話你就需要把這些文檔順序的讀入內(nèi)存,然后檢查這個文章中是不是含有要查找的關(guān)鍵詞,這樣的話就會耗費非常多的時間,想想搜索引擎可是在毫秒級的時間內(nèi)查找出要搜索的結(jié)果的。這就是由于建立了索引的原因,你可以把索引想象成這樣一種數(shù)據(jù)結(jié)構(gòu),他能夠使你快速的隨機訪問存儲在索引中的關(guān)鍵詞,進而找到該關(guān)鍵詞所關(guān)聯(lián)的文檔。Lucene采用的是一種稱為反向索引(invertedindex)的機制。反向索引就是說我們維護了一個詞/短語表,對于這個表中的每個詞/短語,都有一個鏈表描述了有哪些文檔包含了這個詞/短語。這樣在用戶輸入查詢條件的時候,就能非常快的得到搜索結(jié)果。我們將在本系列文章的第二部分詳細介紹Lucene的索引機制,由于Lucene提供了簡單易用的API,所以即使讀者剛開始對全文本進行索引的機制并不太了解,也可以非常容易的使用Lucene對你的文檔實現(xiàn)索引。對文檔建立好索引后,就可以在這些索引上面進行搜索了。搜索引擎首先會對搜索的關(guān)鍵詞進行解析,然后再在建立好的索引上面進行查找,最終返回和用戶輸入的關(guān)鍵詞相關(guān)聯(lián)的文檔。3.4.3 lucene能做什么要回答這個問題,先要了解lucene的本質(zhì)。實際上lucene的功能很單一,說到底,就是你給它若干個字符串,然后它為你提供一個全文搜索服務(wù),告訴你你要搜索的關(guān)鍵詞出現(xiàn)在哪里。知道了這個本質(zhì),你就可以發(fā)揮想象做任何符合這個條件的事情了。你可以把站內(nèi)新聞都索引了,做個資料庫;你可以把一個數(shù)據(jù)庫表的若干個字段索引起來,那就不用再擔(dān)心因為“%like%”而鎖表了;你也可以寫個自己的搜索引擎。3.4.4 lucene的工作方式lucene提供的服務(wù)實際包含兩部分:一入一出。所謂入是寫入,即將你提供的源(本質(zhì)是字符串)寫入索引或者將其從索引中刪除;所謂出是讀出,即向用戶提供全文搜索服務(wù),讓用戶可以通過關(guān)鍵詞定位源。寫入流程源字符串首先經(jīng)過analyzer處理,包括:分詞,分成一個個單詞;去除stopword(可選)。將源中需要的信息加入Document的各個Field中,并把需要索引的Field索引起來,把需要存儲的Field存儲起來。將索引寫入存儲器,存儲器可以是內(nèi)存或磁盤。讀出流程用戶提供搜索關(guān)鍵詞,經(jīng)過analyzer處理。對處理后的關(guān)鍵詞搜索索引找出對應(yīng)的Document。用戶根據(jù)需要從找到的Document中提取需要的Field(原文或者源URL)。3.5 SpringSpring Framework是一個開源的JavaJava EE全功能棧(full-stack)的應(yīng)用程序框架,以Apache許可證形式發(fā)布,也有.NET平臺上的移植版本。該框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的代碼,最初由Rod Johnson和Juergen Hoeller等開發(fā)。Spring Framework提供了一個簡易的開發(fā)方式,這種開發(fā)方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。Spring中包含的關(guān)鍵特性:強大的基于JavaBeans的采用控制翻轉(zhuǎn)(Inversion of Control,IoC)原則的配置管理,使得應(yīng)用程序的組建更加快捷簡易。一個可用于從applet到Java EE等不同運行環(huán)境的核心Bean工廠。數(shù)據(jù)庫事務(wù)的一般化抽象層,允許聲明式(Declarative)事務(wù)管理器,簡化事務(wù)的劃分使之與底層無關(guān)。內(nèi)建的針對JTA和單個JDBC數(shù)據(jù)源的一般化策略,使Spring的事務(wù)支持不要求Java EE環(huán)境,這與一般的JTA或者EJB CMT相反。JDBC 抽象層提供了有針對性的異常等級(不再從SQL異常中提取原始代碼),簡化了錯誤處理,大大減少了程序員的編碼量。再次利用JDBC時,你無需再寫出另一個終止(finally)模塊。并且面向JDBC的異常與Spring通用數(shù)據(jù)訪問對象(Data Access Object)異常等級相一致。以資源容器,DAO實現(xiàn)和事務(wù)策略等形式與Hibernate,JDO和iBATIS SQL Maps集成。利用眾多的翻轉(zhuǎn)控制方便特性來全面支持,解決了許多典型的Hibernate集成問題。所有這些全部遵從Spring通用事務(wù)處理和通用數(shù)據(jù)訪問對象異常等級規(guī)范。靈活的基于核心Spring功能的MVC網(wǎng)頁應(yīng)用程序框架。開發(fā)者通過策略接口將擁有對該框架的高度控制,因而該框架將適應(yīng)于多種呈現(xiàn)(View)技術(shù),例如JSP、FreeMarker、Velocity、Tiles、iText以及POI。值得注意的是,Spring中間層可以輕易地結(jié)合于任何基于MVC框架的網(wǎng)頁層,例如Struts、WebWork或Tapestry。提供諸如事務(wù)管理等服務(wù)的面向方面編程框架。在設(shè)計應(yīng)用程序Model時,MVC模式(例如Struts)通常難于給出一個簡潔明了的框架結(jié)構(gòu)。Spring卻具有能夠讓這部分工作變得簡單的能力。程序開發(fā)員們可以使用Spring的JDBC抽象層重新設(shè)計那些復(fù)雜的框架結(jié)構(gòu)。3.6 Struts2Apache Struts 2是一個用于開發(fā)Java EE網(wǎng)絡(luò)應(yīng)用程序的開源Web應(yīng)用框架。它利用并擴展了Java Servlet API,鼓勵開發(fā)者采用MVC架構(gòu)。Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設(shè)計也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產(chǎn)品。雖然從Struts 1到Struts 2有著太大的變化,但是相對于WebWork,Struts 2的變化很小。當(dāng)Web容器收到 請求(HttpServletRequest)它將請求傳遞給一個標準的的過濾鏈包括(ActionContextCleanUp)過濾器,然后經(jīng)過Other filters(SiteMesh ,etc)。接下來需要調(diào)用FilterDispatcher核心控制器,然后它調(diào)用ActionMapper確定請求那個Action,ActionMapper返回一個收集Action詳細信息的ActionMaping對象。接下來FilterDispatcher將控制權(quán)委派給ActionProxy,ActionProxy調(diào)用配置管理器(ConfigurationManager) 從配置文件中讀取配置信息(struts.xml),然后創(chuàng)建ActionInvocation對象,ActionInvocation在調(diào)用Action之前會依次的調(diào)用所用配置攔截器(Interceptor N) 一旦執(zhí)行結(jié)果返回結(jié)果字符串ActionInvocation負責(zé)查找結(jié)果字符串對應(yīng)的(Result)然后執(zhí)行這個Result Result會調(diào)用一些模版(JSP)來呈現(xiàn)頁面,之后攔截器(Interceptor N)會在被執(zhí)行(順序和Action執(zhí)行之前相反)最后響應(yīng)(HttpServletResponse)被返回在web.xml中配置的那些過濾器和(核心控制器)(FilterDispatcher)。3.7 MybatisMyBatis是一個Java持久化框架,它通過XML描述符或注解把對象與存儲過程或SQL語句關(guān)聯(lián)起來。與其他的對象關(guān)系映射框架不同,MyBatis并沒有將Java對象與數(shù)據(jù)庫表關(guān)聯(lián)起來,而是將Java方法與SQL語句關(guān)聯(lián)。MyBatis允許用戶充分利用數(shù)據(jù)庫的各種功能,例如存儲過程、視圖、各種復(fù)雜的查詢以及某數(shù)據(jù)庫的專有特性。如果要對遺留數(shù)據(jù)庫、不規(guī)范的數(shù)據(jù)庫進行操作,或者要完全控制SQL的執(zhí)行,MyBatis是一個不錯的選擇。與JDBC相比,MyBatis簡化了相關(guān)代碼:SQL語句在一行代碼中就能執(zhí)行。MyBatis提供了一個映射引擎,聲明式的把SQL語句執(zhí)行結(jié)果與對象樹映射起來。通過使用一種內(nèi)建的類XML表達式語言,或者使用Apache Velocity集成的插件,SQL語句可以被動態(tài)的生成。MyBatis與Spring Framework和Google Guice集成,這使開發(fā)者免于依賴性問題。MyBatis支持聲明式數(shù)據(jù)緩存(declarative data caching)。當(dāng)一條SQL語句被標記為“可緩存”后,首次執(zhí)行它時從數(shù)據(jù)庫取得的所有數(shù)據(jù)會被存儲在一段高速緩存中,今后執(zhí)行這條語句時就會從高速緩存中讀取結(jié)果,而不是再次命中數(shù)據(jù)庫。MyBatis提供了默認下基于Java HashMap的緩存實現(xiàn),以及用于與OSCache、Ehcache、Hazelcast和Memcached連接的默認連接器。MyBatis還提供API供其他緩存實現(xiàn)使用。4 搜索引擎的總體設(shè)計在前面章節(jié)中對搜索引擎的技術(shù)的研究和探討基礎(chǔ)上,從本章開始將逐步實現(xiàn)一個自己的具有爬蟲、索引器、搜索器等功能的完整搜索引擎。本章描述了搜索引擎實現(xiàn)的需求分析、概要設(shè)計等內(nèi)容,為后面的具體功能實現(xiàn)打下基礎(chǔ)。4.1 系統(tǒng)概述搜索引擎是根據(jù)用戶的查詢請求,按照一定算法從索引數(shù)據(jù)中查找信息返回給用戶。為了保證用戶查找信息的精度和新鮮度,搜索引擎需要建立并維護一個龐大的索引數(shù)據(jù)庫。一般的搜索引擎由網(wǎng)絡(luò)機器人程序、索引與搜索程序、索引數(shù)據(jù)庫等部分組成。雖然在大多數(shù)的實際應(yīng)用場合中,搜索引擎這樣的系統(tǒng)的運行過程中通常伴隨著超高并發(fā)、超大數(shù)據(jù)量,對性能會有苛刻的要求,所以通常使用C/C+語言開發(fā)。但在本程序中,為了探索搜索引擎的主要技術(shù),為了效率更高,節(jié)約時間和成本,所以使用Java語言進行開發(fā),并引入了Lucene框架的支持。4.2 系統(tǒng)需求從功能上看,搜索引擎需要在后臺下載和分析網(wǎng)頁、建立索引,用戶在系統(tǒng)提供的圖形界面中輸入關(guān)鍵詞并得到搜索結(jié)果,由此我們得到了本系統(tǒng)的用例圖,如圖4-1所示。圖 4-1 用例圖4.3 系統(tǒng)結(jié)構(gòu):由系統(tǒng)需求可以看出,系統(tǒng)的組成部分必不可少的有:l 網(wǎng)絡(luò)機器人l 網(wǎng)頁分析程序l 網(wǎng)頁索引程序l 網(wǎng)頁搜索程序l 搜索程序客戶端通過以上的分析可以確立系統(tǒng)的基本框架。首先,需要實現(xiàn)的是一個BS結(jié)構(gòu)的JSP動態(tài)Web程序。程序使用Spring作為類依賴管理器,使程序功能具有更好的獨立性。使用Struts2作為MVC框架,使程序結(jié)構(gòu)清晰。MyBatis做ORM(對象關(guān)系映射),簡化數(shù)據(jù)庫操作。Lucene框架提供對索引功能的基本支持。系統(tǒng)結(jié)構(gòu)如圖4-2所示。WWW文檔網(wǎng)絡(luò)機器人程序建立Lucene索引從數(shù)據(jù)庫中搜索信息Tomcat服務(wù)器Lucene索引數(shù)據(jù)庫WWW瀏覽器WWW瀏覽器JSP網(wǎng)絡(luò)機器人程序圖 4-2 程序結(jié)構(gòu)圖4.4 小結(jié)本章中我們分析了搜索引擎實現(xiàn)的系統(tǒng)需求,確立了系統(tǒng)結(jié)構(gòu),接下的章節(jié)將講述系統(tǒng)各部分的具體實現(xiàn)。5 網(wǎng)絡(luò)機器人的實現(xiàn)5.1 什么是網(wǎng)絡(luò)機器人又稱為網(wǎng)絡(luò)爬蟲,網(wǎng)絡(luò)蜘蛛等。在搜索引擎系統(tǒng)中扮演搜集器的角色。它通常是一個計算機程序,在需要時運行。網(wǎng)絡(luò)機器人通過統(tǒng)一資源定位符(URL)來訪問網(wǎng)絡(luò)資源。它會從一個入口URL列表開始,通過一定的算法順序,下載并通過網(wǎng)頁分析器分析網(wǎng)頁,從網(wǎng)頁中發(fā)現(xiàn)新的URL 地址,并將新發(fā)現(xiàn)的URL 添加到待訪問的URL 列表中。網(wǎng)絡(luò)爬蟲將得到的網(wǎng)頁保存在本地網(wǎng)頁庫中,以備網(wǎng)頁分析器和索引器進行處理和使用。5.2 網(wǎng)絡(luò)機器人結(jié)構(gòu)分析在搜索引擎實現(xiàn)中,網(wǎng)絡(luò)機器人和網(wǎng)頁分析器通常協(xié)同工作,關(guān)系緊密。在獲得網(wǎng)頁后直接對其分析,去掉不必要的內(nèi)容,從而減少了磁盤空間的浪費。所以這里將網(wǎng)絡(luò)機器人的實現(xiàn)和網(wǎng)頁分析器的實現(xiàn)放在一起進行說明。5.2.1 如何解析HTML

溫馨提示

  • 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

提交評論