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