楊爍 任曉菲
摘 要:在浩瀚無邊的網(wǎng)絡(luò)資源中,特別是院校等自建網(wǎng)站的大型單位中,信息檢索是一件很困難的工作,而建立搜索引擎顯得尤為重要。文章闡述在廣域網(wǎng)或局域網(wǎng)下建立信息檢索的技術(shù)描述,從四個(gè)方面進(jìn)行系統(tǒng)分析。為了使大家加深對信息檢索的理解,從原理上解釋從指定的Web頁面中按照超連接進(jìn)行解析、搜索,并把搜索到的每條結(jié)果進(jìn)行建立索引。然后通過Web服務(wù)器接受客戶端請求后,將關(guān)鍵字用ICTCLAS.dll中文切詞工具進(jìn)行切割,將關(guān)鍵字列表在索引中搜索出所匹配的結(jié)果,并將其顯示給客戶。此外,還利用Ajax等一些技術(shù)增加了一些自動(dòng)提示的效果,使得搜索界面更加人性化。
關(guān)鍵詞:搜索引擎;網(wǎng)絡(luò)蜘蛛;Lucene;中文切詞
引言
面對浩瀚的網(wǎng)絡(luò)資源,各區(qū)間之間達(dá)到資源共享,為盡快達(dá)到用戶索取資源的目的性而建立搜索引擎,毫不夸張的說所有的用戶都可以從搜索出發(fā)到達(dá)自己想去的網(wǎng)上任何一個(gè)地方。伴隨著網(wǎng)絡(luò)的發(fā)展,搜索引擎主要經(jīng)歷了三個(gè)發(fā)展時(shí)期。從1994年初始,在“求全”的基礎(chǔ)上開展應(yīng)用,反應(yīng)速率較慢。從1966年出現(xiàn)分布式方案,采取機(jī)器抓取技術(shù),大大提高了檢索速度。在2000年左右,在改進(jìn)二代技術(shù)基礎(chǔ)上,增加了互動(dòng)性和個(gè)性化,采用自動(dòng)分類、自動(dòng)聚類、區(qū)域智能識別等技術(shù),成為當(dāng)今主流搜索引擎技術(shù),提高用戶應(yīng)用效率。
1 搜索引擎的結(jié)構(gòu)
1.1 搜索引擎系統(tǒng)概述
搜索引擎是根據(jù)用戶的查詢請求,按照一定算法從索引數(shù)據(jù)中查找信息返回給用戶。為了保證用戶查找信息的精度和新鮮度,搜索引擎需要建立并維護(hù)一個(gè)龐大的索引數(shù)據(jù)庫。一般的搜索引擎由網(wǎng)絡(luò)機(jī)器人程序、索引與搜索程序、索引數(shù)據(jù)庫等部分組成。
網(wǎng)絡(luò)機(jī)器人程序建立Lucene索引從SQL中搜索信息Tomcat服務(wù)器Lucene索引數(shù)據(jù)庫瀏覽器JSP網(wǎng)絡(luò)機(jī)器人程序、文檔網(wǎng)絡(luò)、機(jī)器人程序,建立Lucene索引從SQL中搜索信息Tomcat服務(wù)器Lucene索引數(shù)據(jù)庫瀏覽的機(jī)器人程序系統(tǒng)結(jié)構(gòu)圖。
1.2 搜索引擎的構(gòu)成
搜索引擎的工作原理主要指輸入一定規(guī)則,在相應(yīng)的數(shù)據(jù)中抓取存儲(chǔ),進(jìn)行預(yù)處理,組織排名調(diào)用索引庫數(shù)據(jù)獲取信息。
1.2.1 網(wǎng)絡(luò)蜘蛛
網(wǎng)絡(luò)蜘蛛也稱為“網(wǎng)絡(luò)機(jī)器人”(Spider),用Myeclipse、MysqL開發(fā),采用Spring+Struts+Hibernate框架構(gòu)成的系統(tǒng)。
1.2.2 索引與搜索
采用索引技術(shù),采用NON-CLUSTERED方法,生成關(guān)鍵詞到URL,并以特定數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在方式。高度注意提高信息查詢的精度,利用信息機(jī)制進(jìn)行過濾和個(gè)性化服務(wù),采用分布式結(jié)構(gòu)來提高系統(tǒng)規(guī)模和性能返回用戶的方式。
1.2.3 Web服務(wù)器
Web 服務(wù)器也被稱為HTTP服務(wù)器,它通過HTTP協(xié)議與客戶端通信,采取超文本連接的概念,利用Blog、Rss、Psdcasting、SNS、WIKI、Page Rank等技術(shù)任,使資源比較直觀的表現(xiàn)出來。
1.3 搜索引擎的主要指標(biāo)及分析
搜索引擎的主要指標(biāo)有響應(yīng)時(shí)間、召回率、準(zhǔn)確率、相關(guān)度等。這些指標(biāo)決定了搜索引擎的技術(shù)指標(biāo),搜索引擎的技術(shù)指標(biāo)決定了搜索引擎的評價(jià)標(biāo)準(zhǔn)。具有較快的反應(yīng)速度和高召回率、準(zhǔn)確率是衡量搜索引擎的重要指標(biāo),而實(shí)現(xiàn)此功能是需要搜索引擎技術(shù)指標(biāo)來保障的。
2 網(wǎng)絡(luò)機(jī)器人
2.1 網(wǎng)絡(luò)機(jī)器人概念
網(wǎng)絡(luò)機(jī)器人稱Spider程序,是專業(yè)Bot程序的一種,用于查找大量的Web頁面。
2.2 網(wǎng)絡(luò)機(jī)器人的結(jié)構(gòu)分析
Internet內(nèi)存有很多協(xié)議,系統(tǒng)層中的協(xié)議較為復(fù)雜。網(wǎng)頁是建立在系統(tǒng)層基于HTTP(Hypertext Transfer Protocol)協(xié)議基礎(chǔ)上的,而TCP/IP(Transmission Control Protocol/Internet Protocol)是HTTP的基礎(chǔ)協(xié)議,因此網(wǎng)絡(luò)機(jī)器人就是一種Socket協(xié)議。
2.2.1 網(wǎng)絡(luò)機(jī)器程序結(jié)構(gòu)
Spider在不同網(wǎng)頁之間跳轉(zhuǎn),必須找到一個(gè)關(guān)鍵點(diǎn),也就是頁面上的超連接。網(wǎng)頁代碼由網(wǎng)絡(luò)機(jī)器人解析,分解頁面內(nèi)的超連接,通過內(nèi)部遞歸結(jié)構(gòu)和非遞歸結(jié)構(gòu)這兩種結(jié)構(gòu)實(shí)現(xiàn)Spider程序。URL在同一時(shí)間只能在一個(gè)隊(duì)列內(nèi),這種狀態(tài)稱為URL狀態(tài)。
圖1表示URL隊(duì)列工作流程,Spider在URL被加入等待隊(duì)列中程序被激活運(yùn)行,Spider程序會(huì)按指定方式排序分析網(wǎng)頁中URL,直到無列隊(duì)時(shí)工作停止。
2.2.2 Spider程序構(gòu)造
只有了解Spider程序工作原理及功能擴(kuò)展,才能構(gòu)建出高效的Spider程序。
Spider類:這是一個(gè)實(shí)現(xiàn)了Runnable的類,以便實(shí)現(xiàn)多線程提高性能。
此外Spider還實(shí)現(xiàn)了Constants,Constants接口實(shí)際上是一個(gè)定義常量的地方,它定義了一些與線程處理有關(guān)的常量。工作流程圖如圖2所示:
2.2.3 提升程序性能。Web頁面資源在互聯(lián)網(wǎng)中十分豐富,提高Spider程序的效能成為最迫切的需求,就如何提高程序有效性介紹幾種技術(shù):(1)Java的多線程技術(shù)。多線程技術(shù)是指同一程序同時(shí)運(yùn)行多個(gè)任務(wù)的能力,通過優(yōu)化內(nèi)部程序分工,強(qiáng)化程序間關(guān)聯(lián)度,提高和改善程序性能。(2)數(shù)據(jù)庫技術(shù)。利用數(shù)據(jù)庫技術(shù)是存儲(chǔ)網(wǎng)頁中站點(diǎn)隊(duì)列,將網(wǎng)頁站點(diǎn)從內(nèi)存中解放出來,達(dá)到提高性能的作用。
2.2.4 Spider代碼分析
程序結(jié)構(gòu)圖為:
程序代碼簡要實(shí)現(xiàn)如下:
public class Spider extends Logger implements Runnable, Constants
{
private SpiderConfig config;
private DownloadQueue queue;
private Set urlsDownloadedOrScheduled;
private Set urlsDownloading;
private int downloadsInProgress;
private boolean quit;
private int running;
private long lastCheckpoint;
public void start();
public void stop();
private void writeCheckpoint();
public void readCheckpoint();
public void run();
private int queueSize();
private List downloadURL(URLToDownload url, URLGetter urlGetter, HTMLParser htmlParser);
private List filterURLs(List URLs);
}
3 基于lucene的索引與搜索
3.1 Lucene檢索簡介
Lucene是開放源代碼的全文引擎工具包,用java編寫方便嵌套各類應(yīng)用中實(shí)現(xiàn)檢索的工具。
3.2 Lucene原理分析
3.2.1 Lucene原理。Lucene的API設(shè)計(jì)功能強(qiáng)大,可以映射到各類軟件中,將數(shù)據(jù)處理為交叉引用查找,提高索引和搜索效率,Lucene類似于索引全文的數(shù)據(jù)庫系統(tǒng)。
3.2.2 Lucene的索引效率。Lucene索引將查詢的模糊化變成多個(gè)精確查詢的邏輯組合過程,進(jìn)而提高查詢的效率。將數(shù)據(jù)通過全文索引一一建立反向索引,以term匹配數(shù)據(jù),實(shí)現(xiàn)接口對接支持,以緩沖式批量讀取的形式將特別算法匹配率最高的前100條結(jié)果輸出,用自身算法實(shí)現(xiàn)不同語言接口的對接,從優(yōu)選擇符合需要的索引規(guī)則,建立最優(yōu)排序規(guī)則,提高索引效率。
3.2.3 中文切分詞機(jī)制。目前采取比較流行的自動(dòng)切分算法,這種算法必須要?jiǎng)?chuàng)建相對較為豐富的詞庫用以識別單字或詞,利用規(guī)則將多個(gè)關(guān)鍵詞進(jìn)行組合,并映射到相應(yīng)的索引中,查找出所需內(nèi)容。
4 構(gòu)建自己的搜索引擎
4.1 為什么要構(gòu)建自己的搜索引擎
伴隨經(jīng)濟(jì)發(fā)展,信息呈現(xiàn)爆炸式增長的新情況,使用一個(gè)入口查尋搜索已經(jīng)不能用戶的需要,提供全面、精確、高效的搜索引擎是滿足用戶需求的必然要求。
4.2 通過Lucene建立索引
4.2.1 參數(shù)設(shè)置。建立索引至少需要兩個(gè)參數(shù):目標(biāo)文件路徑,索引的路徑。它可以以配置文件的形式存在,但是簡單起見,作者直接用常量在類中了。
4.2.2 建立索引。索引的建立索引的類為LuceneSearch.java,它主要用來搜索數(shù)據(jù)和處理結(jié)果的。
4.3 通過Struts+Tomcat構(gòu)架系統(tǒng)
有了上面的一些基本功能點(diǎn),我們還差一個(gè)跟用戶交互的UI接口,和一個(gè)運(yùn)行B/S模式的web服務(wù)器。選用JSP+Struts,Web服務(wù)器作者選用Tomcat。
4.3.1 UI和web層設(shè)計(jì)。UI分成兩層,最外一層為跟客戶端接觸的JSP頁面,里面還有一層來處理我們的請求——Action層。
Action層是由Struts技術(shù)來完成的。Struts是一種基于MVC設(shè)計(jì)模式的框架,其中struts-config.xml是其核心配置文件。
4.3.2 基于Tomcat的Web服務(wù)器。Web服務(wù)器以實(shí)現(xiàn)在網(wǎng)絡(luò)中發(fā)布信息、查詢數(shù)據(jù)、處理數(shù)據(jù)等為目的,可搭建眾多應(yīng)用程序的基礎(chǔ)平臺。Tomcat是一個(gè)免費(fèi)開放源代碼、應(yīng)用廣泛的頂級程序,是運(yùn)行servlet和JSP Web應(yīng)用軟件的必備程序。由于程序免費(fèi)、源代碼開放、維護(hù)及時(shí)、技術(shù)先進(jìn)、性能穩(wěn)定等特點(diǎn),成為目前較為流行的Web服務(wù)器之一,得以廣泛的應(yīng)用。Tomcat服務(wù)器由一系列可配置組件構(gòu)成,核心組件為Catalina Servlet組件,其層次關(guān)系如圖3:
在Tomcat中,部署應(yīng)用程序并不復(fù)雜,按指定的方法安裝調(diào)試,即可達(dá)到編譯效果,提高訪問速度。
5 結(jié)束語
文章對基于網(wǎng)絡(luò)的搜索引擎結(jié)構(gòu)和性能指標(biāo)進(jìn)行了分析,介紹了網(wǎng)絡(luò)機(jī)器人的基本概念,分析了Spider程序的結(jié)構(gòu)和功能,對一些結(jié)合具體代碼舉例說明,增強(qiáng)了對搜索引擎的了解應(yīng)用,并加入利用Lucene索引技術(shù)闡述,采用Tomcat框架提高交互體驗(yàn),進(jìn)一步增強(qiáng)自建探索引擎的效率。
參考文獻(xiàn)
[1]盧亮,張博文.搜索引擎原理、實(shí)踐與應(yīng)用[M].北京:電子工業(yè)出版社,2007,9.
[2]佘正平.搜索引擎的關(guān)鍵詞分析與處理[J].情報(bào)探索,2008,5.
[3]何會(huì)民,韓東霞.基于Lucene的網(wǎng)絡(luò)新聞搜索引擎研究與實(shí)現(xiàn)[J].商場現(xiàn)代化,2008,9.
[4]曾偉輝.深層網(wǎng)絡(luò)爬蟲研究綜述[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008,5.
[5]房志峰.中文搜索引擎中的分詞技術(shù)研究[J].科學(xué)技術(shù)與工程,2008,9.
[6]埃克爾著(美),陳昊鵬(譯).JAVA編程思想[M].北京:機(jī)械工業(yè)出版社,2007,6.