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 本頁面
 

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