
【摘要】分散的計算機上存儲有大量的信息,企業級用戶急需一種工具對這些零散的信息進行統一的查找,最好還可通過配置對特定的網站進行檢索,這就是企業級搜索引擎,本文使用開源項目Solr設計了一款面向企業的搜索引擎。整體設計基于SSH設計框架實現;服務器端采用Heritrix抓取網頁,加入IKAnalyzer增加中文分詞功能;客戶端采用Ajax技術實現異步通信,優化用戶體驗。
【關鍵詞】Solr;Heritrix;SSH;企業級;搜索引擎
1.研究背景
隨著Intenet的普及與企業信息化步伐的不斷加快,在企業信息化的發展趨勢下,越來越多的企業廣泛地應用Intemet技術實現數據共享、業務集成與信息發布,信息內容也正在以驚人的速度增加。文件、圖片、多媒體等非結構化數據存放零散,而企業內部業務系統有大量的結構化數據,如報表與業務功能,有時候要找到它們如同大海撈針,如果不及時解決這個問題,很多原來有價值的信息無法得到企業的有效利用。
目前許多企業級門戶網站建立搜索引擎服務通常通過調用互聯網搜索引擎的搜索服務,來實現對本站點的搜索。但是對于一個有很多子網站的企業門戶網站來說,通用搜索引擎存在著很多缺陷,滿足不了這種搜索服務要求,如:盡管通用引擎提供對指定站點內的查詢,但是不能同時對多個站點同時查詢;通用搜索引擎不能及時更新索引,會導致搜索結果不全和出現“壞鏈接”;調用通用搜索引擎的響應速度慢。總之,通用搜索引擎有很廣的信息采集面,深度不夠,它采取的是廣度優先采集策略,而企業搜索需要深入挖掘與企業相關的所有信息,因此應采用深度優先的采集策略,同時由于某些行業網站或數據庫的信息是動態更新的,而且更新頻率很高,需要更頻繁的抓取這些信息,因此企業搜索引擎正是應這種需求而產生。研究如何設計一個適用于企業信息檢索的搜索引擎,具有重要的意義。文中采用Struts+Spring+Solr+Heritrix+IKAnalyzer的開發工具包,進行了一個中文全文搜索引擎的設計。
2.技術路線
2.1 總體架構
該搜索引擎搜索部分框架可概括為Heri trix+Solr+IKAnalyzer,如圖1所示。實現方案中,把Solr作為處理搜索結果的源和入口,Heritrix負責它最擅長的工作:抓取網頁內容。使用Solr作為搜索后端,可以充分使用Solr的搜索特性:查詢拼寫檢查,搜索提醒,數據復制及查詢緩存等。考慮到Solr本身中文分詞功能較弱,因此引用IKAnalyzer來增強其中文分詞功能。
鑒于企業級搜索引擎需要部分定制功能,例如,可能會需要設定訪問一些企業本身感興趣的網站,以提高搜索的速度和精確度,因此需要配置系統維護接口,實現人工的實時定制。
Solr本身提供了靈活的特性,能夠從文本、數據庫和網頁中直接導入數據,而企業本身也需要對檢索到的信息進行整理分類,會希望搜索引擎能夠提供一些人工智能和個性化的東西,因此在設計中加入了數據庫的支持,以實現對網頁內容的學習、分析和聚類等,從而可保證提供智能化結果。
2.2 設計框架
系統設計采用基于SSH框架的三層結構,即表現層、業務層、持久層。
其中表現層使用struts框架,該層將直接面向用戶,精美的UI將能夠體現良好的可用性,本次設計用使用了開源的Yui-ext界面包,可增加彈窗、菜單等效果;使用的Ajax技術實現異步通信功能,提升用戶的體驗;利用struts框架與Yui-ext相結合,Yui-ext進行前臺數據顯示,而struts框架作為數據跳板向前臺提供數據。
業務層使用spring框架,該層作為持久層數據與表現層之間數據傳輸的紐帶,spring框架封裝了DAO和JDBC模塊,可以保持數據庫訪問代碼干凈簡潔,并且可以防止因關閉數據庫資源失敗而引起的問題。
持久層使用Hibernate框架,目前,已經很少有人J2EE應用會直接以JDBC方式進行持久層訪問,畢竟用面向對象的程序設計語言來訪問關系型數據庫令人沮喪;反之,多數人會以ORM框架來進行持久層訪問,其中Hibernate框架靈巧、輕便,非常適用于持久層。
3.關鍵技術
3.1 Solr簡介
Solr是Apache的一個開源子項目,它是一個采用java5開發的、基于lucene全文搜索庫的企業級搜索服務器,提供了豐富的查詢語言,可根據用戶需求配置和擴展,并對查詢性能進行了優化。Solr提供了一個完善的功能管理界面,可輸出多種格式,能夠實現異構系統的整合,有強大的插件功能,使用它很容開發出一款優秀的企業級搜索引擎。
3.2 Heritrix與Solr的整合
Heritrix與Solr的配置主要集中在服務器端,整個搜索的過程可以概括為,Heritrix爬蟲抓取網頁之后,編寫相應的代碼對爬蟲抓取頁面的遍歷,將網頁傳遞給JoyDoc框架,獲取頁面中的content,source,title等信息,建立數據庫,然后使用Solr索引功能對網頁數據庫中的數據建立索引,從而實現全文搜索。其中,需要重新定制heritrix的Extractor方法,配置Heritrix根目錄下的conf文件中的Heritrix文件。
3.3 Struts+Spring+Hibernate的整合
SSH框架的整合直接影響到整個網站的用戶體驗和可用性,整合主要以下兩個方面。
Struts整合Spring,可以將Struts Action管理委托給Spring框架,整個過程需要兩個步驟:
(1)Action中,使用IOC獲得服務,配置struts-config.xml;
(2)Spring配置文件中注冊該動作。
Spring整合Hibernate,在Spring框架中,像JDBC DataSource或Hibernate SessionFactory這樣的資源,在應用程序上下文中可以用bean實現。需要訪問資源的應用程序對象只需通過bean引用得到這類預先定義好的實例的引用即可,需要三個步驟:
(1)配置數據源,一般情況下有三種方式的數據源;
(2)配置sessionfactory;
(3)配置事務。
3.4 中文分詞技術
中文分詞對于搜索引擎來說是至關重要的指標,對于企業來說,絕大部分的搜索時針對中文索引,而Solr默認只支持引文索引,因此需要加入中文索引。
IKAnalyzer實現了以詞典分詞為基礎的正反向全切分算法,適合于大部分用戶的搜索習慣,如搜索時使用“人民”即可涵蓋帶有“人民幣”的文章。對Solr加入中文索引,需要將IKAnalyzer的jar包導入/Tomcat 6.0/webapps/solr的lib里,然后在solr/conf/schema.xml中
4.結語
企業級搜索引擎目前發展還不完善,本文采用開源的Solr作為構建企業級搜索引擎的核心,定制了網絡爬蟲Heritrix的Extractor方法,在單臺服務器上實現了一款基于SSH設計框架的企業級搜索引擎,具有一定的使用價值。如果進一步增加網絡設備,可實現基于Solr的分布式的垂直搜索引擎,進行實際使用和推廣。