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