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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于ajaxlucene構(gòu)建搜索引擎的設(shè)計(jì)和實(shí)現(xiàn)-論文(編輯修改稿)

2025-01-06 17:12 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 圖 4 系統(tǒng) 模塊 數(shù)據(jù)庫(kù)的設(shè)計(jì) 本課題包含一張用于存放抓取回來(lái)的網(wǎng)頁(yè)信息如表 1。 第 8 頁(yè) 共 19 頁(yè) 表 1 網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)表 邏輯字段名 物理字段名 字段類型 是否為空 主鍵 外鍵 說(shuō) 明 編號(hào) ID int NOT NULL Yes 自增加 地址 Url Varchar(50) NOT NULL 內(nèi)容 Content VARCHAR(1000) NOT NULL meta 標(biāo)簽內(nèi)容 Mata Varchar(100) NOT NULL 網(wǎng)頁(yè)標(biāo)題 Title Varchar(100) NOT NULL 創(chuàng)建時(shí)間 Createdate Datetime(8) NOT NULL 模塊設(shè)計(jì) 該模型按照功能劃分為 三 個(gè)部分,一是 爬蟲抓取網(wǎng)頁(yè)部分 ,二是 從數(shù)據(jù)庫(kù)建立索引 部 分 ,三是 從前臺(tái)頁(yè)面查詢 部 分。系統(tǒng)的功能流程 (如 圖 和 )。 輸 入 一 個(gè) U R L結(jié) 果 列 表 啟 動(dòng) 爬 蟲 程 序 使 用 L u c e n e . n e t 文 檔 類建 立 文 檔 索 引不 斷 的 抓 取 網(wǎng) 頁(yè)寫 入 數(shù) 據(jù) 庫(kù)去 掉 多 余 標(biāo) 簽獲 取 有 效 記 錄 頁(yè) 面 上 輸 入 關(guān) 鍵 字使 用 L u c e n e . n e t 搜 索 類是 否 成 功YA J A X 圖 功能流程圖 第 9 頁(yè) 共 19 頁(yè) 圖 模塊圖 該系統(tǒng)用 3 個(gè)模塊來(lái)實(shí)現(xiàn)搜索引擎的主要功能。流程如上圖所示。 從一個(gè)或 若干初始網(wǎng)頁(yè)的 URL 開始,獲得初始網(wǎng)頁(yè)上的 URL,在抓取網(wǎng)頁(yè)的過(guò)程中,不斷從當(dāng)前頁(yè)面上 抽取新的 URL 放入隊(duì)列 ,直到滿足系統(tǒng)的一定停止條件。這條件可以是限定的謀個(gè)域名空間、或者是限定的網(wǎng)頁(yè)抓取級(jí)數(shù)。當(dāng)在獲取 URL 時(shí)存在這樣的問題就是在實(shí)際應(yīng)用中主要以絕對(duì)地址和相對(duì)地址來(lái)表現(xiàn)。絕對(duì)地址是指一個(gè)準(zhǔn)確的、無(wú)歧義的 Inter 資源的位置,包含域名(主機(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(wǎng)頁(yè)含有 HTML 標(biāo)簽、 Javascript 等, 對(duì)搜索多余的信息,如果抓取到的網(wǎng)頁(yè)不經(jīng)過(guò)處理就會(huì)使搜索變得不夠 精確。 讓爬蟲程序能繼續(xù)運(yùn)行下去 , 就得抓取這個(gè)網(wǎng)頁(yè)上的其它 URL,所以 要用正則將這個(gè)網(wǎng)頁(yè)上的所有 URL 都取出來(lái) 放到一個(gè)隊(duì)列里。 用同樣的方法繼續(xù)抓取網(wǎng)頁(yè) , 這里將運(yùn)用到多線程技術(shù) 。 為 了對(duì) 文檔進(jìn)行索引, Lucene 提供了五個(gè)基礎(chǔ)的類,他們分別是 Document,F(xiàn)ield, IndexWriter, 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)做的。Analyzer 類是一個(gè)抽象類,它有多個(gè)實(shí)現(xiàn)。針對(duì)不同的語(yǔ)言和應(yīng)用需要選擇適合的 Analyzer。 Analyzer 把分詞后的內(nèi)容交給 IndexWriter 來(lái)建立 索引 。 所有的搜索引擎的目標(biāo)都是為了用戶查詢。通過(guò)查詢頁(yè)面,輸入關(guān)鍵字,提交給系統(tǒng),程序就開始處理,最后把結(jié)果以列表的形式顯示 出來(lái)。在用 Lucene的搜索引擎中,用到了 Lucene 提供的方法,可從所建立的索引文檔中獲得結(jié)果。 第 10 頁(yè) 共 19 頁(yè) 5 系統(tǒng) 實(shí)現(xiàn) 開發(fā)環(huán)境 開發(fā)平臺(tái)的選擇:本系統(tǒng)的開發(fā)平臺(tái)選擇微軟公司的 .NET,開發(fā)工具采用。 .NET 是 Microsoft 面向 Web 服務(wù)的平臺(tái),由框架、 Web 服務(wù)、 .NET企業(yè)服務(wù)器等幾部分組成,提供涉及面較廣、功能較全面的解決方案。數(shù)據(jù)庫(kù)選擇:根據(jù)需求分析選擇了 MSSQL Server 2021。 關(guān)鍵代碼詳解 代碼結(jié)構(gòu) 如圖 6: 寫入 讀取 生成 引用 檢索 圖 6 代碼結(jié)構(gòu) 在網(wǎng)頁(yè)爬蟲 Console 端應(yīng)用程序里輸入一個(gè)有效的 URL后這部份就開始從第一個(gè) URL 開始遍歷相關(guān)的鏈接并把相關(guān)的信息寫入到網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù)里,然后就由索引生成程序讀取網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù),對(duì)每條記錄生成索引記錄,存放于生成的索引庫(kù)文件里。生成索引需要調(diào)用 類。索引生成后在查詢部分就能夠在網(wǎng)頁(yè)上輸入關(guān)鍵字,對(duì)剛才抓取的信息的查詢。并可以定位到信息的出處。下面對(duì)各部分關(guān)鍵代碼 進(jìn)行詳解。 爬蟲部分 這部份的功能就是從輸入的 URL開始遍歷各個(gè)相關(guān)的網(wǎng)頁(yè),它包括三個(gè)功能模塊: 網(wǎng)頁(yè)抓取模塊、網(wǎng)頁(yè)減肥模塊、爬蟲維持模塊。 首先定義一些變量用于保存抓取到的網(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) 、網(wǎng)頁(yè)爬蟲 Console 端應(yīng)用程序 數(shù) 據(jù) 庫(kù) 索引生成 Console 端應(yīng)用 查詢 Web 程序 第 11 頁(yè) 共 19 頁(yè) parseChar(Content)分別對(duì)網(wǎng)頁(yè)信息變量獲取標(biāo)題、去除腳本塊、去除 HTML 標(biāo)記、去除特殊字符操作。再下步就是對(duì)獲取到的標(biāo)題、網(wǎng)頁(yè)內(nèi)容、鏈接等信息調(diào)用數(shù)據(jù)庫(kù)操作通用類 DAI 保存到數(shù)據(jù)庫(kù)里,這就實(shí)現(xiàn)了一個(gè)網(wǎng)頁(yè)的抓取。再下步就是循環(huán)的對(duì)獲取到的 URL 列表創(chuàng)建線程,針對(duì)每個(gè) URL 來(lái)循環(huán)的執(zhí)行上面的網(wǎng)頁(yè)信息的抓取操作。具體代碼如下: private static void UrlThread() { String title=。 String Content=。 String mata=。 string URL=。 string[] urlArr = null。 StringBuilder urlList = new StringBuilder()。 Client=new ()。 try { Stream strm=null。 try {//讀取一個(gè) URL的信息到流變量里 Stream strm=(url)。 } catch { (url無(wú)法找到! )。 return。 } StreamReader sr=new StreamReader(strm,(gb2312))。 String PageString=()。//從流中讀取網(wǎng)頁(yè)信息到字符串變量中 ()。 urlList = GetHttpUrl(PageString)。 title=GetTitle(PageString)。 Content = parseScript(PageString)。 //去掉腳本 的網(wǎng)頁(yè)文本 Content=parseHtml(PageString)。 //得到去了 HTML標(biāo)簽的網(wǎng)頁(yè)文本 URL=url。 mata=。 Content = parseChar(Content)。 if((title != || title != ) amp。amp。 URL != ) { (insert into WebContent(url,content,title,mata) values(39。+URL+39。,39。+Content+39。,39。+title+39。,39。+mata+39。))。 (對(duì) url:+URL+相關(guān)信息寫入數(shù)據(jù)庫(kù)成功 !)。 } else 第 12 頁(yè) 共 19 頁(yè) { (對(duì) url:+URL+相關(guān)信息寫入數(shù)據(jù)庫(kù)失敗 !)。 } urlArr=().Split(39。|39。)。 //對(duì)前面獲取的 URL列表循環(huán)的創(chuàng)建線程再執(zhí)行本方法實(shí)現(xiàn)爬蟲的維持 for(int i=0。i。i++) { url=urlArr[i]。 if(url == || url == null || url == ) continue。 Thread th = new Thread(new ThreadStart(UrlThread))。 ()。 } } catch{} } 索引生成 這部分包含對(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)。 public Indexer(string indexDir) { region Lucene Code 首先通過(guò)標(biāo)準(zhǔn)分詞定義了一個(gè)索引寫入器 IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), true)。 在創(chuàng)建索引庫(kù)時(shí),會(huì)合并多個(gè) Segments 文件。此方式有助于減少索引文件數(shù)量,減少同時(shí)打開的文件數(shù)量 。 (false)。 //刪除以前生成的索引文件。 (iDexDir,true)。 endregion DateTime start = 。 DoIndexByDB(writer)。// DateTime end = 。 int docNum = ()。 (Index Finished. {0} Documents takes {1} second., docNum, ((TimeSpan)(end start)).TotalSeconds)。 ()。 ()。 } 使用 Lucene 提供的方法對(duì)數(shù) 據(jù)庫(kù)中的每條記錄建立索引實(shí)現(xiàn)如下: 第 13 頁(yè) 共 19 頁(yè) Document doc = new Document()。 (Indexing {0} , row[title].ToString())。 ((contents, row[content].ToString()))。 ((title, row[title].ToString()))。 ((mata,row[mata].ToString()))。 ((CreateDate,row[CreateDate].ToString()))。 ((Url,row[Url].ToString()))。 ((ID,row[ID].ToString()))。 (doc)。 頁(yè)面查詢 這部分主要完成的功能是獲取前臺(tái)表單中輸入的關(guān) 鍵字,在程序中獲取查詢結(jié)果,最后把列表顯示在前臺(tái)頁(yè)面。 Ajax 在此部分中被使用到,它完成的功能是部分刷新頁(yè)面,不需整個(gè)頁(yè)面的重新加載。為了方便的在程序中使用 Ajax,此系統(tǒng)引用了封裝完善的 Ajax類庫(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, e) { //ajax注冊(cè) (typeof(Search))。 } 如果前臺(tái) Javascript 需要調(diào)用某個(gè)方法,那就在那個(gè)函數(shù)前加上[],表示此方法屬于 ajax 應(yīng)用。 [] public string SearchResult(string keywords,string pageNo) { 其中,前臺(tái)所存在的文字的代碼如下: StringBuilder sb = new StringBuilder()。 (trtd結(jié)果數(shù) :+result+ 所用時(shí)間 :+t+毫秒 /td/tr)。 前臺(tái)顯示結(jié)果記錄的代碼,動(dòng)態(tài)生成 table 標(biāo)簽,如下: for(int i = startNum 。 i endNum。 i++) { 在顯示內(nèi)容中,仍然使用到了 Lucene 提供的類, 可以方便的從所建立的索引文檔中 獲取 網(wǎng)址,網(wǎng)頁(yè)標(biāo)題,內(nèi)容,時(shí)間。 Document doc = (i)。 content=(contents)。 content=(keywords,font color=red+keywords+/font)。 (tr class
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1