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

正文內(nèi)容

基于lucene的圖書搜索引擎的設計與實現(xiàn)(編輯修改稿)

2024-12-23 21:52 本頁面
 

【文章內(nèi)容簡介】 2020年初, IA 的目的是開發(fā) 一個特殊的爬蟲,對網(wǎng)上的資源進行歸檔,建立網(wǎng)絡數(shù)字圖書館,在過去的 6 年里,IA 已經(jīng)建立了 400TB 的數(shù)據(jù)。 Heritrix 主要有三大部件:范圍部件,邊界部件,處理器鏈 。 范圍部件:主要按照規(guī)則決定將哪個 URI 入隊。 邊界部件:跟蹤哪個預定的 URI 將被收集,和已經(jīng)被收集的 URI,選擇下一個 URI,剔除已經(jīng)處理過的 URI。 處理器鏈:包含若干處理器獲取 URI,分析結果,將它們傳回給邊界部件 。 Heritrix 包含以下關鍵特性: 。 2。從一個提供的種子進行爬,收集站點內(nèi)的精確 URI,和精確主機。 3。主要是用廣度優(yōu)先算法進行處理。 7 4。主要部件都是高效的可擴展的 5。良好的配置,包括: a??稍O置輸出日志,歸檔文件和臨時文件的位置 b??稍O置下載的最大字節(jié),最大數(shù)量的下載文檔,和最大的下載時間。 c??稍O置工作線程數(shù)量。 d??稍O置所利用的帶寬的上界。 e??稍谠O置之后一定時間重新選擇。 f。包含一些可設置的過濾機制,表達方式, URI 路徑深度選擇等等。 Heritrix 的局限: 1。單實例的爬蟲,之間不能進行合作。 2。在有限的機器資源的情況下,卻要復雜的操作。 3。只有官方支持,僅僅在 Linux 上進行了測試。 4。每個爬蟲是單獨進行工作的,沒有對更新進行修訂。 5。在硬件和系統(tǒng)失敗時,恢復能力很差。 3 系統(tǒng)設計 系統(tǒng)實現(xiàn)流程圖 設 計 人 員選 擇 圖 書 信 息 來源 網(wǎng) 站 及 網(wǎng) 頁相 關 網(wǎng) 站 內(nèi) 容 和 網(wǎng)頁 分 析定 向 下 載 相 關 網(wǎng) 站的 圖 書 網(wǎng) 頁 內(nèi) 容網(wǎng) 頁 內(nèi) 容 提 取 和 正則 表 達 式 分 析建 立 網(wǎng) 頁 內(nèi) 容 索 引設 計 前 臺 頁 面 提供 搜 索檢 索 用 戶圖 系統(tǒng)實現(xiàn)流程圖 8 系統(tǒng)順序圖 圖 系統(tǒng)順序圖 9 系統(tǒng)狀態(tài)圖 圖 體統(tǒng)狀態(tài)圖 數(shù)據(jù)庫設計 數(shù)據(jù)庫建立 圖書信息數(shù)據(jù)庫只需完成對于讀書相關信息的存儲,所以比較簡單, 只需建立 bookInfo 表,如下表:表 數(shù)據(jù)庫設計表 列名 數(shù)據(jù)類型 允許空 是否主鍵 id int 非 主鍵 name varchar(50) 非 type varchar(50) content varchar(MAX) url varchar(50) imageurl varchar(50) updatetime varchar(64) 10 數(shù)據(jù)庫 連接 開 始J D B C 建 立 數(shù)據(jù) 庫 連 接是 否 完 成信 息 添 加關 閉 數(shù) 據(jù) 庫 連接向 數(shù) 據(jù) 庫 添 加產(chǎn) 品 信 息結 束是否圖 數(shù)據(jù)庫表結構圖 一、裝入 JDBC 驅(qū)動程序 DriverManager 類管理各種數(shù)據(jù)庫驅(qū)動程序,建立新的數(shù)據(jù)庫連接,以便將 Java 應用程序能夠使用正確的 JDBC 驅(qū)動程序。 DriverManager 類包含一系列 Driver 類,它們通過調(diào)用方法 對自己進行了注冊。所有 Driver 類都必須包含有一個靜態(tài)方法,利用這個靜態(tài)方法可以創(chuàng)建該類的實例,然后在加載該實例時向 DriverManager 類進行注冊。這樣,用戶正常情況下將不會直接調(diào)用 ,而是在加載驅(qū)動程序時 由驅(qū)動程序自動調(diào)用。 可以通過調(diào)用方法 (),這種方法可以顯式地加載驅(qū)動程序類。如: //裝載并注冊 SQL Server Driver (“”)。 (new ())。 二、建立連接 建立連接需要使用 DriverManager 類的靜態(tài)方法 getConnection(String url,String username,String password)來建立數(shù)據(jù)庫的連接對象。其中的三個參數(shù), url 表示連接數(shù)據(jù)庫的 JDBC URL, username 表示連接數(shù)據(jù)庫的用戶名, password 表示連接數(shù)據(jù)庫的密碼。如: //建立 SQL Server Driver 數(shù)據(jù)庫連接 String url = “ jdbc:microsoft: 。DatabaseName=test”。 String username = “sa”。 String password = “123456”。 Connection conn = null。 try{ 11 conn = (url,username,password)。 }catch(Exception e){ ()。 } JBDC URL 的一般格式為: jdbc:drivertype//parameters drivertype 表示驅(qū)動程序的類型, parameters 通常用來設定數(shù)據(jù)庫服務器的 IP 地址、端口號以及數(shù)據(jù)庫名稱。 三、執(zhí)行 SQL 語句 與數(shù)據(jù)庫建立連接之后,就可以向所連接的數(shù)據(jù)庫發(fā)送 SQL 語句。 JDBC 提供了 3 個類,它們由Connection 來創(chuàng)建這些類的對象。這 3 個對象分別是 Statement 對象, PreparedStatement 對象,以及CallableStatement 對象。它們都可以作為執(zhí)行 SQL 語句的容器。每一個都專用于發(fā)送特定類型的 SQL 語句。 1) Statement 對象用語執(zhí)行不帶參數(shù)的簡單 SQL 語句,由方法 createStatement 所創(chuàng)建。 2) PreparedStatement 對象用語執(zhí)行帶參數(shù)或不帶參數(shù)的預編譯 SQL 語句,由 PreparedStatement 創(chuàng)建。 PreparedStatement 接口繼承自 Statement 接口,其功能更加的強大。在 PreparedStatement 對象所使用的 SQL語句中,包含了經(jīng)過預編譯的 SQL 語句,因此可以獲得更高的執(zhí)行效率,同時使用起來也更加的方便。在PreparedStatement 對象所使用的 SQL 語句中,可以包含多個用 ”?”代表的字段,同時也可以是哦那個setXXXX()的方 法來設置該字段的內(nèi)容,從而增強了程序的動態(tài)性。 3) CallableStatement 對象用于執(zhí)行對數(shù)據(jù)庫存儲過程的調(diào)用,由方法 prepareCall 所創(chuàng)建。 CallableStatement用于執(zhí)行 SQL 存儲過程 —— 一組通過名稱來調(diào)用(就像函數(shù)的調(diào)用那樣)的 SQL 語句。 四、檢索結果 SQL 語句發(fā)送以后,返回的結果通常存放在一個 ResultSET 類的對象中,可將 ResultSet 對象看做一個表,這個表中包含由 SQL 返回的列名和相應的值, ResultSet 對象中維持了一個指向當前的指針,通過一系列的 getXXXX()方法,可以檢索當前行的各個列,并顯示出來。 五、關閉連接 在對象使用完畢后,應當使用 close()方法解除與數(shù)據(jù)庫的連接,并關閉數(shù)據(jù)庫。關閉數(shù)據(jù)庫的語句為: ()。 索引建立 Lucene的索引過程 從 IndexWriter 的 addDocument 方法開始。在 Lucene 的 API 中, IndexWriter 的主要職責是向索引中加入文檔,它提供了建立索引的只要外部借口,但是它的具體實現(xiàn),也就是索引的寫入過程是由 DocumentWriter來完成的。因此,在整個 Lucene中, 最繁瑣的對數(shù)據(jù)源分詞、計算出現(xiàn)頻率和位置,以及寫索引過程,實際上是發(fā)生在 DocumentWriter 中的。在 DocumentWriter中完成了向索引的一些情況進行判斷,并作進一步的合并索引等操作。其基本流程步驟如下: JE分詞的 MMAnalyzer 的實例,用于對文本進行中文分詞和文本分隔處理。 12 ,將前面所處理的詞庫進行加載,相關的文件存儲位置通過項目中的配置管理類實例 PropertyConfiguration 得到。 addBook方法,以 Book類型的對象和一個 ID值為參數(shù),調(diào)用 方法處理,生成 Lucene的 Document文檔對象。 IndexWriter 的 addDocument 方法,加入索引中,完成索引的創(chuàng)建和追加。 除此之外項目中的 BookIndexer類中還提供了 optimize()方法和 close()方法,分別用來對索引進行優(yōu)化和關閉索引。 索引創(chuàng)建的程序流程圖如圖 : 開 始創(chuàng) 建 J E 分 詞 的M M A n a l y z e r創(chuàng) 建 文 件 讀 取F i l e R e a d e r 并與 分 詞 器 關 聯(lián)創(chuàng) 建 索 引 寫 入對 象 I n d e x W r i t e r是 否 完 成 信 息添 加關 閉 所 有 對 象連 接結 束創(chuàng) 建 圖 書D o c u m e n t 文 檔索 引 對 象添 加 文 檔 到 索引 文 件是否圖 索引創(chuàng)建流程圖 圖書信息綜合處理 項目中需要建立一個類,把數(shù)據(jù)庫操作、索引操作都集中起來。首先它要可以從文本文檔中提取出需要的內(nèi)容,來 構建 Book對象;然后調(diào)用 BookJDBC,向數(shù)據(jù)庫中寫入 Book相關信息。另外,再調(diào)用 BookIndexer,把 Book對象加入到索引中。具體的操作步驟如下: BookJDBC 類和 BookIndexer 類,來對具體的圖書信息進行處理。 ,并生成一個 BookTextFileProcessor 的實例后,需要調(diào)用其 initialize 方法來初始化 BookJDBC 類的實例和 BookIndexer 的實例。 setDirectories 方法,為其注入所要處理的圖書詳細信息文件所在的目錄,然后調(diào)用process 方法開始處理圖書信息。 程序的流程圖如下頁圖 : 13 開 始向 索 引 中 添 加B o o k 對 象信 息 存 入 數(shù) 據(jù) 庫生 成 圖 書 信 息摘 要生 成 一 個B o o k 對 象是 否 完 成 信 息 添加優(yōu) 化 索 引結 束是否遍 歷 目 錄 讀 取圖 書 屬 性 信 息 圖 數(shù)據(jù)庫、索引綜合處理流程圖 4 系統(tǒng)實現(xiàn) 使用 Heritrix 抓取目標網(wǎng)站 選擇目標網(wǎng)站 選擇目標網(wǎng)站看似是一個很簡單的過程,但是實際操作起來你就會發(fā)現(xiàn)其實不然。首先我們要選擇幾個包含很多圖書信息的網(wǎng)站,并以這 些網(wǎng)站來作為 Heritrix 網(wǎng)絡爬蟲爬取信息的鏈接源。在選定了網(wǎng)站之后就要對這些網(wǎng)站的網(wǎng)頁進行分析。因為我們要把包含圖書分類的頁面作為爬取源,所以我們要盡量選擇包含所有圖書分類的頁面,如果有固然好,但是實際操作中你會發(fā)現(xiàn)有的網(wǎng)站的圖書分類并不會在一個頁面中顯示出來。這就要求我們對網(wǎng)站頁面源代碼進行仔細分析,找出目錄的路徑以供 Heritrix 進行爬去。必要的時候我們甚至要編寫一些 java 小程序生成這些路徑。 在本項目中我選用新書城網(wǎng)( )做為搜索源。但是由于需要遍歷所有的圖書 鏈接以實現(xiàn)網(wǎng)絡爬蟲的爬取,我需要編寫 java小程序來抽取鏈接。 配置 Heritrix、開始抓取 在做好以上的準備工作之后,開始啟動 Heritrix進行任務的抓取。 Heritrix 的啟動方式有多種,這里選擇的是最常用的 WebUI 方式啟動。在 MyEclipse 配置好 Heritrix,運行 這個類。此時,在 Heritrix 的后臺已經(jīng)對服務的 8080 端口進行了監(jiān)聽,在瀏覽器中訪問 :8080,就可以打開 Heritrix的 WebUI了。 如下圖: 14 圖 WebUI 界面 下面要做的就是根據(jù)新書城網(wǎng)( )的網(wǎng)頁特點,開發(fā)定制的下載擴展處理模塊??梢酝瓿蓪︽溄拥奶崛?,內(nèi)容的抽取等功能。定制的網(wǎng)絡爬蟲要求不保存其他無關頁面。因此,需要擴展Heritrix,以實現(xiàn)無關頁面過濾的
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1