freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于web搜索引擎的設(shè)計與實現(xiàn)畢業(yè)論文(編輯修改稿)

2024-10-06 17:54 本頁面
 

【文章內(nèi)容簡介】 ider 程序結(jié)構(gòu) 網(wǎng)絡(luò)機器人必須從一個網(wǎng)頁遷移到另一個網(wǎng)頁,所以必須找到 該頁面上的超連接。程序首先解析網(wǎng)頁的 HTML 代碼,查找該頁面內(nèi)的超連接然后通過遞歸和非遞歸兩種結(jié)構(gòu)來實現(xiàn) Spider 程序。 雖然這里只描述了一個隊列,但在實際編程中用到了四個隊列,他們每個隊列都保存著同一處理狀態(tài)的 URL。 等待隊列 :在這個隊列中, URL 等待被 Spider 程序處理。新發(fā)現(xiàn)的 URL也被加入到這個隊列中。 處理隊列 : 當(dāng) Spider 程序開始處理時,他們被送到這個隊列中 錯誤隊列 : 如果在解析網(wǎng)頁時出錯, URL 將被送到這里。該隊列中的 URL 不能被移入其他隊列中 完成隊列 : 如果解析網(wǎng)頁沒有出錯, URL將被送到這里。該隊列中的 URL 不能被移入其它隊列中 在同一時間 URL 只能在一個隊列中,我們把它稱為 URL 的狀態(tài)。 13 圖 1 隊列的變化過程 以上的圖表示了隊列的變化過程,在這個過程中,當(dāng)一個 URL 被加入到等待隊列中時 Spider 程序就會開始運行。只要等待隊列中有一個網(wǎng)頁或 Spider 程序正在處理一個網(wǎng)頁,程序就會繼續(xù)他的工作。當(dāng)?shù)却犃袨榭詹⑶耶?dāng)前沒有任何網(wǎng)頁時, Spider程序就會停止它的工作。 如何構(gòu)造 Spider 程序 在構(gòu)造 Spider 程序之前我們先了解下程序的各個部分是如何共同工作的。以及如何對這個程序進(jìn)行擴展。 流程圖如下所示: 發(fā)現(xiàn) URL 等待隊列 運行隊列 完成隊列 錯誤隊列 完成 URL 14 圖 2 Spider 程序流程圖 把 URL 加入等待隊列 Spider 程序工作完成 等待隊列中是否有 URL? 否 下載從等待隊列中得到的網(wǎng)頁,并將他送入運行隊列中。 是 這個網(wǎng)頁包含其他超級連接嗎? 將這一網(wǎng)頁送入完成隊列并繼續(xù) 查看網(wǎng)頁上的下一個超連接 是否為指向Web 的連接? 報告其他類型連接 連接是否與 網(wǎng)頁所在主機不同且只處理本地連接? 報告外部連接 報告網(wǎng)頁連接 將連接加入等候隊列 否 是 否 是 否 是 15 Ispider Reportable 接口 5 這是一個必須實現(xiàn)的接口,可以通過回調(diào)函數(shù)接受 Spider 所遇到的頁面。接口定義了 Spider 向他的控制者發(fā)送的幾個事件。通過提供對每個事件的處理程序,可以創(chuàng)建各種 Spider 程序。下面是他的接口聲明: public interface IspiderReportable{ public boolean foundInternalLink(String url)。 public boolean foundExternalLink(String url)。 public boolean foundOtherLink(String url)。 public void processPage(HTTP page)。 public void pletePage(HTTP page,boolean error)。 public boolean getRemoveQuery()。 public void SpiderComplete()。 } 如何提高程序性能 Inter 中擁有海量的 Web 頁面,如果開發(fā)出高效的 Spider 程序是非常重要的。下面就來介紹下幾種提高性能的技術(shù): Java 的多線程技術(shù) 線程是通過程序的一條執(zhí)行路線。多線程是一個程序同時運行多個任務(wù)的能力。它是在一個程序的內(nèi)部進(jìn)行分工合作。 優(yōu)化程序的通常方法是確定瓶頸并改進(jìn) 它 。瓶頸是一個程序中最慢的部分, 它 限制了其他任務(wù)的運行。據(jù)個例子說明:一個 Spider 程序需要下載十個頁面,要完成這 一任務(wù),程序必須向服務(wù)器發(fā)出請求然后接受這些網(wǎng)頁。當(dāng)程序等待響應(yīng)的時候其他任務(wù)不能執(zhí)行,這就影響了程序的效率。如果用多線程技術(shù)可以讓這些網(wǎng)頁的等待時間合在一起,不用互相影響,這就可以極大的改進(jìn)程序性能。 數(shù)據(jù)庫技術(shù) 當(dāng) Spider 程序訪問一個大型 Web 站點時,必須使用一種有效的方法來存儲站點隊列。這些隊列管理 Spider 程序必須維護大型網(wǎng)頁的列表。如果把他們放在內(nèi)存中 16 將會是性能下降,所以我們可以把他們放在數(shù)據(jù)庫中減少系統(tǒng)資源的消耗。 網(wǎng)絡(luò)機器人的代碼分析 程序結(jié)構(gòu)圖如下: 圖 3 網(wǎng)絡(luò)機器人 程 序結(jié)構(gòu)圖 程序代碼實現(xiàn)如下: package news。 /** * 新聞搜索引擎 * 計算機 99630 沈晨 * 版本 */ import 。 import 。 import 。 import 。 import 。 import 。 /** * 構(gòu)造一個 Bot程序 */ 17 public class Searcher implements ISpiderReportable { public static void main(String[] args) throws Exception { IWorkloadStorable wl = new SpiderInternalWorkload()。 Searcher _searcher = new Searcher()。 Spider _spider = new Spider(_searcher, new HTTPSocket(), 100, wl)。 (100)。 ()。 } // 發(fā)現(xiàn)內(nèi)部連接時調(diào)用, url 表示程序發(fā)現(xiàn)的 URL,若返回 true 則加入作業(yè)中,否則不加入。 public boolean foundInternalLink(String url) { return false。 } // 發(fā)現(xiàn)外部連接時調(diào)用, url 表示程序所發(fā)現(xiàn)的 URL,若返回 true 則把加入作業(yè)中,否則不加入。 public boolean foundExternalLink(String url) { return false。 } // 當(dāng)發(fā)現(xiàn)其他連接時調(diào)用這個方法。其他連接指的是非 HTML 網(wǎng)頁,可能是Email 或者 FTP public boolean foundOtherLink(String url) { return false。 } // 用于處理網(wǎng)頁,這是 Spider 程序要完成的實際工作。 public void processPage(HTTP ) { (掃描網(wǎng)頁: + ())。 18 new HTMLParse().start()。 } // 用來請求一個被處理的網(wǎng)頁。 public void pletePage(HTTP , boolean error) { } // 由 Spider 程序調(diào)用以確定查詢字符串是否應(yīng)刪除。如果隊列中的字符串應(yīng)當(dāng)刪除,方法返回真。 public boolean getRemoveQuery() { return true。 } // 當(dāng) Spider 程序沒有剩余的工作時調(diào)用這個方法。 public void spiderComplete() { } } 小結(jié) 在本章中,首先介紹了網(wǎng)絡(luò)機器人的基本概念,然后具體分析了 Spider 程序的結(jié)構(gòu)和功能。在最后還結(jié)合具體代碼進(jìn)行 了詳細(xì)說明。 本人在編程中運用了 JavaTM 技術(shù),主要涉及到了 和 io 兩個包。此外還用了第三方開發(fā)包 Bot。 19 第四章 基于 Lucene 的索引與搜索 什么是 Lucene 全文檢索 Lucene 是 Jakarta Apache 的開源項目。它是一個用 Java 寫的全文 索引 引擎工具包,可以方便的嵌入到各種應(yīng)用中實現(xiàn)針對應(yīng)用的全文索引 /檢索功能。 Lucene 的原理分析 全文檢索的實現(xiàn)機制 Lucene 的 API 接口設(shè)計的比較通用,輸入輸出結(jié)構(gòu)都很像數(shù)據(jù)庫的表 ==記錄==字段 ,所以很多傳統(tǒng)的應(yīng)用的文件、數(shù)據(jù)庫等都可以比較方便的映射到 Lucene 的存儲結(jié)構(gòu)和接口中。 總體上看:可以先把 Lucene 當(dāng)成一個支持全文索引的數(shù)據(jù)庫系統(tǒng)。 索引數(shù)據(jù)源: doc(field1,field2...) doc(field1,field2...) \ indexer / _____________ | Lucene Index| / searcher \ 結(jié)果輸出: Hits(doc(field1,field2) doc(field1...)) Document:一個需要進(jìn)行索引的“單元”,一個 Document 由多個字段組成 Field:字段 Hits:查詢結(jié)果集,由匹配的 Document 組成 Lucene 的索引效率 由于數(shù)據(jù)庫索引不是為全文索引設(shè)計的,因此,使用 like %keyword%時,數(shù)據(jù)庫索引是不起作用的,在使用 like 查詢時,搜索過程又變成類似于一頁頁翻書的 遍歷過程了,所以對于含有模糊查詢的數(shù)據(jù)庫服務(wù)來說, LIKE 對性能的危害是極大的。如果是需要對多個關(guān)鍵詞進(jìn)行模糊匹配: like%keyword1% and like %keyword2% ...其效率也就可想而知了。所以建立一個高效檢索系統(tǒng)的關(guān)鍵是建立一個類似于科技索引一樣的反向索引機制,將數(shù)據(jù)源(比如多篇文章)排序順序存儲 20 的同時,有另外一個排好序的關(guān)鍵詞列表,用于存儲
點擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1