廖彬
(福州大學 福建省福州市 350108)
目前多數的搜索引擎已經能很好的為高校師生提供文檔格式的互聯(lián)網資源,但是面對互聯(lián)網信息的海量、異構的特點,以及用戶對信息搜索精度、廣度和速度的要求下,搜索引擎暴露出諸多缺點:搜索覆蓋率低,一個普通的搜索引擎只能覆蓋整個互聯(lián)網信息資源的5 ~20%;[1]。高校師生作為一個特殊的群體,對學術類等特定網絡文檔的搜索需求極高,在數據量聚增的大背景下,如何讓搜索變得更便捷,搜索的內容更完備顯得越來越重要。
html parser 是一個純的java 寫的html 解析的庫,它不依賴于其它的java 庫文件[2]。HTML Parser 主要用于改造或提取html 頁面并能進行超高速解析,是目前使用最為廣泛的網頁分析技術。
Lucene 是一個開放源代碼的全文檢索引擎工具包,它是一個全文檢索引擎的架構,不僅提供了完整的索引和檢索引擎,而且為數據訪問和管理提供了接口[3],這使得它能夠方便的嵌入到各種應用中實現針對應用的全文索引/檢索功能。
系統(tǒng)框架圖如圖1所示。本次系統(tǒng)主要分為獲取和檢索兩部分:獲取部分根據用戶自由組合不同的搜索引擎和信息類型的條件通過爬蟲技術抓取相應頁面的內容;運用HTML Parser 進行網頁內容分析,過濾掉網頁中的垃圾信息,提取對用戶有用的文檔鏈接;最后利用多線程技術對文檔進行下載,并與從師生文檔庫搜索出的文檔合并,獲取完整的文檔。檢索部分是一個基于Lucene 檢索工具包開發(fā)的檢索系統(tǒng),完成了從對文檔的分析、分詞、索引建立到最后的檢索這一系列流程,并優(yōu)化了索引建立的速度,讓師生能快速查找到自己想要的文檔。
本次研究在網絡信息抓取部分主要通過統(tǒng)一的輸入調用各大搜索引擎進行信息搜索,通過接口調用搜索到的結果,對搜索的內容進行進一步的分析,從中提取用戶有用的信息,快速下載這些信息到本地保存,為后期的索引提供大量的數據基礎。
圖2 通過爬蟲技術構建URL,并用openConnection()方法創(chuàng)建Connection 從而得到與URL 相應的HTML 頁面的數據流。運用HTML Parser 對HTML 頁面進行分析,采用廣度優(yōu)先搜索的爬蟲策略從中提取出鏈接節(jié)點,對鏈接進行判斷并采取不同的操作,從而減少鏈接的下載數量,提高速率。
師生文檔庫主要指高校內部用于師生交流學習而建立的文檔數據庫,此文檔數據庫應包含文檔的格式、名稱、文檔的存放路徑,通過與文檔數據庫的對接,可以實現通過用戶的關鍵字和格式輸入從而獲得文檔的存放路徑,并直接進行下載進本地方便后面的檢索。

圖1:系統(tǒng)框架圖

圖2:URL 構造活動圖
同時引入多線程機制對每一個文檔啟動一個獨立的線程負責下載。線程總數是有限制的,通過ThreadCount 參數確保同一時間下載的線程數不超過數量限制。該機制的實現過程如下:


該機制確保了同一時間只有ThreadCount 個線程在運行,只有當其中有線程執(zhí)行完畢之后才會啟動新的線程。
通過上面的信息獲取,我們將在本地獲得包括HTML、DOC、PDF 等格式的大量文件,接下來就是要對這大量的數據文檔建立索引,方便師生進行特定的內容搜索。本次檢索部分主要通過Lucene來設計并實現了一個實用性強、擴展性高的檢索系統(tǒng)。
在檢索部分設計上,因為Lucene 只能對純文本文件進行操作,系統(tǒng)管理員應先通過分析器對本地的文檔進行純文本抽取,然后運用分詞器對傳入的純文本文件進行分詞處理,提供詞元序列建立索引,并把索引的結果存入索引數據庫。用戶通過用戶查詢界面輸入要查詢的關鍵字,系統(tǒng)把關鍵字提取后傳入索引器,索引器根據關鍵字到索引數據庫中進行查找相應內容,并把查找的內容文檔傳回給用戶。
在文本分析上,首先對傳入的文件類型進行判斷其有效性。對有效類型文檔送入相應文件類型的分析器進行文本分析,得到Lucene 可以識別的純文本文件并送入分詞器中進行分詞。
在索引建立和檢索上,Lucene 提供了非常簡單的建立索引的方法,將要檢索的文檔封裝成Document 對象并進行分析分詞處理,再將索引對象寫入索引庫。最后利用org.apache.search.IndexSearcher 包提供到的一些類來實現對索引的檢索。
本次研究針對大數據還特別進行了索引優(yōu)化,由于師生要監(jiān)測的數據量可能非常大,所以數據的檢索速度是至關重要的。除了可以在硬件上進行提升之外,還可以對系統(tǒng)本身進行代碼優(yōu)化,這所花費的成本要比硬件升級要低得多。Lucene 在內存中持有一塊緩沖區(qū),而類IndexWriter 提供了三個參數用來調整緩沖區(qū)的大小以及往磁盤上寫索引文件的頻率[4]。下面將對幾個參數做簡要描述。
合并因子(mergeFactor):決定了在Lucene 的一個索引塊中可以存放多少文檔以及把磁盤上的索引塊合并成一個大的索引塊的頻率[4]。
最大合并文檔因子(MaxMergeDocs):決定在合并段過程中的最大的段合數目。設置的值比較小時,對于交互性的索引比較好,比較的界限一般是10,000[5]。
最小合并文檔因子(MaxBufferedDocs):決定在對內存中的文檔進行合并成段的操作之前,要求的最小的文檔數量。表1 反映了兩個參數取不同值時對索引時間的影響。
一般最大合并文檔因子采用系統(tǒng)默認的最大值,無需設置,通過表1 我們可以清楚地看到合并因子和最小合并文檔因子對索引時間的影響。因子的取值主要是占用內存的大小,實驗表明,只要有足夠大的內存,就可以為合并因子和最小合并文檔數這兩個參數設置較大的值以提高索引速度。
從圖3 我們可以看到,本次的系統(tǒng)可通過關鍵字選擇性的對谷歌、百度、搜狗、搜搜、微軟Bing、有道六大搜索引擎進行同步搜索,并支持大部分的文件格式下載和檢索。
由表2 數據可知,本文所設計的系統(tǒng)可以正確地處理DOC、PPT、PDF、XLS 和HTML 等文檔,對于海量的數據,檢索速度還是令人滿意的。

表1:不同參數值對索引時間影響表

表2:測試結果表

圖3:系統(tǒng)功能主界面
本次系統(tǒng)在測試中搜索的完備性、針對性及檢索速度上得到了用戶的肯定,隨著計算機硬件技術的發(fā)展以及索引算法的進一步優(yōu)化,相信專用信息抓取在大數據時代來臨的時候將會獲得更為完備的數據,擁有更為廣闊的研究價值。