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

正文內(nèi)容

jsp基于產(chǎn)品的搜索引擎(編輯修改稿)

2024-12-20 04:00 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 構(gòu)來(lái)實(shí)現(xiàn) Spider 程序。 基于的搜索引擎 第 11 頁(yè) 共 34 頁(yè) 遞歸結(jié)構(gòu) 遞歸是在一個(gè)方法中調(diào)用自己本身的程序設(shè)計(jì)技術(shù)。雖然比較容易實(shí)現(xiàn)但耗費(fèi)內(nèi)存且不能使用多線(xiàn)程技術(shù),故不適合大型項(xiàng)目。 非遞歸結(jié)構(gòu) 這種方法使用隊(duì)列的數(shù)據(jù)結(jié)構(gòu),當(dāng) Spider 程序 發(fā)現(xiàn)超連接后并不調(diào)用自己本身而是把超連接加入到等待隊(duì)列中。當(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)。 以上的圖表示了隊(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ì)停止它的工作。 如何構(gòu)造 Spider 程序 在構(gòu)造 Spider 程序之 前我們先了解下程序的各個(gè)部分是如何共同工作的。以及如何對(duì)這個(gè)程序進(jìn)行擴(kuò)展。 流程圖如下所示: 發(fā)現(xiàn) URL 等待隊(duì)列 運(yùn)行隊(duì)列 完成隊(duì)列 錯(cuò)誤隊(duì)列 完成 URL 基于的搜索引擎 第 12 頁(yè) 共 34 頁(yè) 把 URL 加入等待隊(duì)列 Spider 程序工作完成 等待隊(duì)列中是否有 URL? 否 下載從等待隊(duì)列中得到的網(wǎng)頁(yè),并將他送入運(yùn)行隊(duì)列中。 是 這個(gè)網(wǎng)頁(yè)包含其他超級(jí)連接嗎? 將這一網(wǎng)頁(yè)送入完成隊(duì)列并繼續(xù) 查看網(wǎng)頁(yè)上的下一個(gè)超連接 是否為指向Web 的連接? 報(bào)告其他類(lèi)型連接 連接是否與網(wǎng)頁(yè)所在主機(jī)不同且只處理本地連接? 報(bào)告外部連接 報(bào)告網(wǎng)頁(yè)連接 將連接加入等候隊(duì)列 否 是 否 是 否 是 基于的搜索引擎 第 13 頁(yè) 共 34 頁(yè) IspiderReportable 接口 這是一個(gè)必須實(shí)現(xiàn)的接口,可以通過(guò)回調(diào)函數(shù)接受 Spider 所遇到的頁(yè)面。接口定義了 Spider 向他的控制者發(fā)送的幾個(gè)事件。通過(guò)提供對(duì)每個(gè)事件的處理程序,可以創(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 頁(yè)面,如果開(kāi)發(fā)出高效的 Spider 程序是非常重要的。下面就來(lái)介紹下幾種提高性能的技術(shù): Java 的多線(xiàn)程技術(shù) 線(xiàn)程是通過(guò)程序的一條執(zhí)行路線(xiàn)。多線(xiàn)程是一個(gè)程序同時(shí)運(yùn)行多個(gè)任務(wù)的能力。它是在一個(gè)程序的內(nèi)部進(jìn)行分工合作。 優(yōu)化程序的通常方法是確定瓶頸并改進(jìn)他。瓶頸是一個(gè)程序中最慢的部分,他限制了其他任務(wù)的運(yùn)行。據(jù)個(gè)例子說(shuō)明:一個(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)程序性能。 數(shù)據(jù)庫(kù)技術(shù) 當(dāng) Spider 程序訪(fǎng)問(wèn)一個(gè)大型 Web 站點(diǎn)時(shí),必須使用一種有效的方法來(lái)存儲(chǔ)站點(diǎn)隊(duì)列。這些隊(duì)列管理 Spider 程序必須維護(hù)大型網(wǎng)頁(yè)的列表。如果把他們放在內(nèi)存中將會(huì)是性能下降,所以我們可以把他們放在數(shù)據(jù)庫(kù)中減少系統(tǒng)資源的消基于的搜索引擎 第 14 頁(yè) 共 34 頁(yè) 耗。 網(wǎng)絡(luò)機(jī)器人的代碼分析 程序結(jié)構(gòu)圖如下: 程序代碼實(shí)現(xiàn)如下: package news。 import 。 import 。 import 。 import 。 import 。 import 。 /** * 構(gòu)造一個(gè) Bot程序 */ public class Searcher implements ISpiderReportable { public static void main(String[] args) throws Exception { IWorkloadStorable wl = new SpiderInternalWorkload()。 Searcher _searcher = new Searcher()。 Spider _spider 基于的搜索引擎 第 15 頁(yè) 共 34 頁(yè) = new Spider(_searcher, new HTTPSocket(), 100, wl)。 (100)。 ()。 } // 發(fā)現(xiàn)內(nèi)部連接時(shí)調(diào)用, url表示程序發(fā)現(xiàn)的 URL,若返回 true則加入作業(yè)中,否則不加入。 public boolean foundInternalLink(String url) { return false。 } // 發(fā)現(xiàn)外部連接時(shí)調(diào)用, url表示程序所發(fā)現(xiàn)的 URL,若返回 true則把加入作業(yè)中,否則不加入。 public boolean foundExternalLink(String url) { return false。 } // 當(dāng)發(fā)現(xiàn)其他連接時(shí)調(diào)用這個(gè)方法。其 他連接指的是非 HTML網(wǎng)頁(yè),可能是 Email或者 FTP public boolean foundOtherLink(String url) { return false。 } // 用于處理網(wǎng)頁(yè),這是 Spider程序要完成的實(shí)際工作。 public void processPage(HTTP ) { (掃描網(wǎng)頁(yè): + ())。 new HTMLParse().start()。 } // 用 來(lái)請(qǐng)求一個(gè)被處理的網(wǎng)頁(yè)。 public void pletePage(HTTP , boolean error) { } // 由 Spider程序調(diào)用以確定查詢(xún)字符串是否應(yīng)刪除。如果隊(duì)列中的字符串應(yīng)當(dāng)刪除,方法返回真。 public boolean getRemoveQuery() { return true。 } 基于的搜索引擎 第 16 頁(yè) 共 34 頁(yè) // 當(dāng) Spider程序沒(méi)有剩余的工作時(shí)調(diào)用這個(gè)方法。 public void spiderComplete() { } } 在本章 中,首先介紹了網(wǎng)絡(luò)機(jī)器人的基本概念,然后具體分析了 Spider 程序的結(jié)構(gòu)和功能。在最后還結(jié)合具體代碼進(jìn)行了詳細(xì)說(shuō)明。 本人在編程中運(yùn)用了 JavaTM技術(shù),主要涉及到了 和 io 兩個(gè)包。此外還用了第三方開(kāi)發(fā)包 Bot(由 Jeff Heaton 提供的開(kāi)發(fā)包)。 基于的搜索引擎 第 17 頁(yè) 共 34 頁(yè) 第四章 基于 lucene 的索引與搜索 Lucene 全文檢索 Lucene 是 Jakarta Apache 的開(kāi)源項(xiàng)目。它 是一個(gè)用 Java 寫(xiě)的全文索引引擎工具包,可以方便的嵌入到各種應(yīng)用中實(shí)現(xiàn)針對(duì)應(yīng)用的全文索 引 /檢索功能。 Lucene 的原理分析 全文檢索的實(shí)現(xiàn)機(jī)制 Lucene 的 API 接口設(shè)計(jì)的比較通用,輸入輸出結(jié)構(gòu)都很像數(shù)據(jù)庫(kù)的表 ==記錄 ==字段,所以很多傳統(tǒng)的應(yīng)用的文件、數(shù)據(jù)庫(kù)等都可以比較方便的映射到 Lucene 的存儲(chǔ)結(jié)構(gòu) 和接口中。 總體上看:可以先把 Lucene 當(dāng)成一個(gè)支持全文索引的數(shù)據(jù)庫(kù)系統(tǒng) 。 索引數(shù)據(jù)源: doc(field1,field2...) doc(field1,field2...) \ indexer / _____________ | Lucene Index| / searcher \ 結(jié)果輸出: Hits(doc(field1,field2) doc(field1...)) Document:一個(gè)需要進(jìn)行索引的 “單元 ”,一個(gè) Document由多個(gè)字段組成 Field: 字段 Hits: 查詢(xún)結(jié)果集,由匹配的 Document組成 Lucene 的索引效率 通 常書(shū)籍后面常常附關(guān)鍵詞索引表(比如:北京: 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)題 。 基于的搜索引擎 第 18 頁(yè) 共 34 頁(yè) 由于數(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ì)性能的危害是極大的。如果是需要對(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ān)系索引: [關(guān)鍵詞 ==出現(xiàn)關(guān)鍵詞的文章編號(hào),出現(xiàn)次數(shù)(甚至包括位置:起始偏移量,結(jié)束偏移量),出現(xiàn)頻率 ],檢索過(guò)程就是把 模糊查詢(xún)變成多個(gè)可以利用索引的精確查詢(xún)的邏輯組合的過(guò)程 。從而大大提高了多關(guān)鍵詞查詢(xún)的效率,所以,全文檢索問(wèn)題歸結(jié)到最后是一個(gè)排序問(wèn)題。 由此可以看出模糊查詢(xún)相對(duì)數(shù)據(jù)庫(kù)的精確查詢(xún)是一個(gè)非常不確定的問(wèn)題,這也是大部分?jǐn)?shù)據(jù)庫(kù)對(duì)全文檢索支持有限的原因。 Lucene最核心的特征是通過(guò)特殊的索引結(jié)構(gòu)實(shí)現(xiàn)了傳統(tǒng)數(shù)據(jù)庫(kù)不擅長(zhǎng)的全文索引機(jī)制,并提
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1