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