文必龍,葉 靜
(東北石油大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院,黑龍江 大慶 163318)
信息社會(huì)的快速發(fā)展使得信息的容量達(dá)到了空前的高度.在大部分行業(yè)中,企業(yè)內(nèi)容每年增加一倍以上.重要而敏感的內(nèi)容遍及各處,它們存在于企業(yè)的數(shù)據(jù)庫(kù)中,電子郵件的附件中,專(zhuān)用內(nèi)容管理服務(wù)器中、分布式文件系統(tǒng)或私人工作區(qū)中,以及內(nèi)部網(wǎng)和面向公眾的網(wǎng)站中.用戶(hù)需要有效的企業(yè)搜索,將分布各處的信息轉(zhuǎn)化為運(yùn)營(yíng)優(yōu)勢(shì),企業(yè)搜索引擎[1]成為研究熱點(diǎn).企業(yè)搜索引擎與因特網(wǎng)搜索引擎比較具有其特殊的特性[2]:企業(yè)搜索引擎需要面向企業(yè)網(wǎng),對(duì)企業(yè)內(nèi)部的信息資源進(jìn)行搜索;因特網(wǎng)搜索引擎的搜索對(duì)象是網(wǎng)頁(yè)和多媒體文件,而企業(yè)搜索引擎可以對(duì)企業(yè)數(shù)據(jù)庫(kù)進(jìn)行搜索;因特網(wǎng)搜索的內(nèi)容和展現(xiàn)的信息都是完全開(kāi)放,不存在安全性問(wèn)題,但企業(yè)的數(shù)據(jù)涉及企業(yè)的核心利益,要求具有很高的保密性;因特網(wǎng)搜索和展現(xiàn)的內(nèi)容都是網(wǎng)頁(yè)和文件的原始形態(tài),但企業(yè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)有的是以編碼形式保存,需要進(jìn)行專(zhuān)門(mén)的語(yǔ)義處理和代碼轉(zhuǎn)換,變成用戶(hù)能讀懂的文字、圖形和報(bào)表等方式.
數(shù)據(jù)采集[3]是搜索引擎工作的第一步,只有相關(guān)的信息被爬行器抓取到才能進(jìn)行下一步的數(shù)據(jù)分析工作.由于企業(yè)搜索引擎素要處理的信息[4]包括了大量的異構(gòu)數(shù)據(jù)庫(kù)和異構(gòu)文檔,需要對(duì)不同類(lèi)型的信息書(shū)寫(xiě)不同的處理函數(shù)以提取文本.本文根據(jù)企業(yè)搜索引擎的相關(guān)特性,開(kāi)發(fā)出基于SES的通用爬行器.該爬行器可以對(duì) Lotus/Domino的相關(guān)內(nèi)容、基于Microsoft SharePoint Server(SPS)門(mén)戶(hù)網(wǎng)站、基于Content Management System(CMS)內(nèi)容管理系統(tǒng)、企業(yè)數(shù)據(jù)庫(kù)(Oracle和Sql Server)和FTP上的相關(guān)內(nèi)容進(jìn)行爬行.從爬行效果上都必須滿(mǎn)足對(duì)數(shù)據(jù)源的完全爬行,對(duì)于Domino、FTP的相關(guān)內(nèi)容還應(yīng)提供增量爬行機(jī)制,即采集新增的或有更新情況的文檔,保證了搜索的時(shí)效性.
Secure Enterprise Search(SES)安全企業(yè)搜索,是由Oracle公司針對(duì)企業(yè)用戶(hù)的企業(yè)搜索需求推出的一款安全企業(yè)搜索產(chǎn)品,并提供了用于二次開(kāi)發(fā)的相應(yīng)的接口.Oracle搜索解決方案基于Oracle數(shù)據(jù)庫(kù)構(gòu)建(定期對(duì)可靠性和安全性進(jìn)行檢查),為搜索提供了高度安全的基礎(chǔ).Oracle與主要的認(rèn)證機(jī)制和庫(kù)進(jìn)行了集成,用戶(hù)不僅可以安全有效地查找信息、緩解信息過(guò)載,還可以發(fā)掘深層內(nèi)聯(lián)網(wǎng)中難以觸及的隱藏信息.
SES提供的搜索器是一個(gè)多線程Java應(yīng)用程序,負(fù)責(zé)從用戶(hù)在配置期間指定的數(shù)據(jù)源中收集文檔.要搜索其他信息庫(kù),SES搜索器允許用戶(hù)定義特定“數(shù)據(jù)源”.搜索器也可以通過(guò)“插件”擴(kuò)展(插件是Oracle提供的或客戶(hù)開(kāi)發(fā)的Java類(lèi),與搜索應(yīng)用程序運(yùn)行在同一個(gè)OC4J容器中).在定義插件后,它們將作為新數(shù)據(jù)源列出.在進(jìn)行配置后,插件可以將數(shù)據(jù)提供給搜索器,并且可以像其他數(shù)據(jù)源一樣進(jìn)行索引.從技術(shù)上講,插件負(fù)責(zé)收集指向要索引文檔的URL,它們將這些URL傳遞給搜索器進(jìn)行索引.用戶(hù)可以根據(jù)自己的實(shí)際需求,利用SES提供的相應(yīng)接口,按照一定的規(guī)范實(shí)現(xiàn)自己的插件.
本系統(tǒng)采用分層設(shè)計(jì),結(jié)構(gòu)清晰,可擴(kuò)展性強(qiáng).系統(tǒng)的總體結(jié)構(gòu)如圖1所示.
圖1 系統(tǒng)總體結(jié)構(gòu)
數(shù)據(jù)采集是企業(yè)搜索引擎工作的第一步,通過(guò)SES提供的相應(yīng)接口開(kāi)發(fā)出通用爬行器插件,根據(jù)需要爬取數(shù)據(jù)源類(lèi)型的不同,選擇相應(yīng)的爬行器類(lèi)型并填寫(xiě)好爬行參數(shù),對(duì)爬取的數(shù)據(jù)進(jìn)行索引,并存儲(chǔ)到索引庫(kù)當(dāng)中.用戶(hù)在Web界面中輸入相應(yīng)的關(guān)鍵詞并對(duì)其進(jìn)行簡(jiǎn)單的切詞操作后提交到企業(yè)搜索引擎當(dāng)中,將命中的結(jié)果的前200條分頁(yè)顯示在界面當(dāng)中.
SES提供了相應(yīng)的接口供用戶(hù)開(kāi)發(fā)符合自己需求的爬行器插件,本系統(tǒng)利用了這些接口開(kāi)發(fā)了通用爬行器插件,該爬行器可以對(duì)Lotus/Domino的相關(guān)內(nèi)容、基于Microsoft SharePoint Server(SPS)門(mén)戶(hù)網(wǎng)站、企業(yè)數(shù)據(jù)庫(kù)(Oracle和 Sql Server)和FTP上的相關(guān)內(nèi)容進(jìn)行爬行.從爬行效果上滿(mǎn)足了對(duì)數(shù)據(jù)源的完全爬行和對(duì)部分?jǐn)?shù)據(jù)源的增量爬行.
圖2為爬行器的系統(tǒng)架構(gòu),其中①②③④⑤為爬行器的工作順序,具體工作流程如下.
圖2 爬行器的系統(tǒng)架構(gòu)
1)通過(guò)源類(lèi)型注冊(cè),系統(tǒng)知道該到哪個(gè)jar文件中查找實(shí)現(xiàn)CrawlerPluginManager的類(lèi)名,該類(lèi)是爬行器程序的入口.
2)創(chuàng)建源時(shí)選擇源類(lèi)型,系統(tǒng)通過(guò)調(diào)用管理器類(lèi)的三個(gè)成員函數(shù):getPluginParameters、getPluginDescription和 getPluginName,獲取插件名稱(chēng)、描述和參數(shù)表,其中g(shù)etPluginParameters返回一組類(lèi)型為L(zhǎng)ist的參數(shù)列表,系統(tǒng)根據(jù)列表中的參數(shù)名、參數(shù)描述和缺省值自動(dòng)生成參數(shù)輸入界面.
3)啟動(dòng)爬行后,調(diào)用初始化函數(shù)init(ParameterValues params,boolean forceRecrawl,Date last-CrawlTime,GeneralService generalMgr,int thread-Count),即向管理器類(lèi)傳遞爬行模式、上次爬行時(shí)間、線程數(shù)等相應(yīng)參數(shù).此外,將提供一個(gè)輔助服務(wù)類(lèi)(GeneralService generalMgr)傳遞給管理器類(lèi),管理器類(lèi)通過(guò)輔助服務(wù)類(lèi)可以獲取系統(tǒng)的各種服務(wù).CrawlerCtrl類(lèi)為各種數(shù)據(jù)源的連接及獲取相關(guān)內(nèi)容的管理類(lèi),例如,getFileList(String path)可獲得ftp服務(wù)器上path目錄下包括子目錄的所有文件列表,LotusAttachment(String dominoURL,String username,String password,String DBname,String Form)可獲得domino服務(wù)器上某個(gè)表單下的所有附件.對(duì)實(shí)例化CrawlerCtrl類(lèi)后得到的結(jié)果進(jìn)行處理,得到文檔鏈接,將其和文檔的最后修改時(shí)間拼接后作為唯一的DisplayURL放入隊(duì)列中,采用修改時(shí)間作為文檔修改的主要標(biāo)志,實(shí)現(xiàn)對(duì)domimo和ftp數(shù)據(jù)源的增量爬行.
4)調(diào)度系統(tǒng)在通過(guò)init完成管理器類(lèi)的初始化后,然后調(diào)用管理器類(lèi)getCrawlerPlugin函數(shù),從管理器類(lèi)中獲得爬行器對(duì)象.在getCrawlerPlugin函數(shù)中,管理器類(lèi)創(chuàng)建一個(gè)爬行器類(lèi)的對(duì)象,并用系統(tǒng)在init中傳過(guò)來(lái)的參數(shù)對(duì)其進(jìn)行初始化.
5)調(diào)度系統(tǒng)用管理器類(lèi)的getCrawlerPlugin方法獲得爬行器對(duì)象后,調(diào)用爬行器對(duì)象的crawler方法,啟動(dòng)爬行.crawler方法根據(jù)系統(tǒng)傳遞過(guò)來(lái)的源定義參數(shù),如數(shù)據(jù)服務(wù)器地址、用戶(hù)名、口令、文件目錄、爬行的域或?qū)傩?、關(guān)鍵字等內(nèi)容,完成以下工作.
①?gòu)年?duì)列中依次取出DisplayURL,建立與數(shù)據(jù)服務(wù)器的聯(lián)接,查詢(xún)出對(duì)應(yīng)的文檔.
②對(duì)每一個(gè)文檔,獲取其屬性(如標(biāo)題、最后修改時(shí)間、文檔的顯示URL、作者等),根據(jù)這些屬性建立一個(gè)元數(shù)據(jù)對(duì)象(類(lèi)DocumentMetadata的實(shí)例).
③對(duì)每一個(gè)文檔,建立一個(gè)讀取文件的流對(duì)象(InputStream類(lèi)的實(shí)例).
④將元數(shù)據(jù)對(duì)象和流對(duì)象提交給爬行線程服務(wù)器CrawlingThreadService.
爬行線程服務(wù)器在接到提交的元數(shù)據(jù)對(duì)象和流對(duì)象后,就會(huì)調(diào)用流對(duì)象獲取文檔內(nèi)容,根據(jù)內(nèi)容格式調(diào)用相應(yīng)的過(guò)濾器(如word、PDF、Excel等基本格式)進(jìn)行格式分析、內(nèi)容過(guò)濾、建立索引、派生線程等.
本系統(tǒng)分后臺(tái)搜索管理模塊和前臺(tái)搜索請(qǐng)求模塊兩部分.后臺(tái)搜索管理模塊從總體上分為:搜索前準(zhǔn)備、搜索過(guò)程控制和搜索成果管理等.前臺(tái)搜索請(qǐng)求模塊主要負(fù)責(zé)對(duì)已爬行到的結(jié)果進(jìn)行檢索.
后臺(tái)管理模塊需要設(shè)置所要爬行的數(shù)據(jù)源的必要信息,包括數(shù)據(jù)源名稱(chēng)、服務(wù)器地址、用戶(hù)名、密碼、所要爬行內(nèi)容對(duì)應(yīng)的相關(guān)實(shí)體和屬性.例如,Domino爬行器程序的界面如圖3所示.通過(guò)日志模塊可以查看整個(gè)爬行的運(yùn)行狀態(tài),如圖4所示.
圖3 Domino爬行器主界面
圖4 爬行運(yùn)行狀態(tài)
搜索請(qǐng)求界面是企業(yè)搜索引擎系統(tǒng)提供的首界面,頁(yè)面簡(jiǎn)單明了,用戶(hù)只需輸入關(guān)鍵字,點(diǎn)擊“搜索”按鈕即可.
主要實(shí)現(xiàn)基于SES的通用爬行器程序以及基于企業(yè)搜索引擎的搜索程序.該通用爬行器可以對(duì)企業(yè)數(shù)據(jù)庫(kù)、門(mén)戶(hù)網(wǎng)頁(yè)、文檔文件、辦公系統(tǒng)內(nèi)容等進(jìn)行抓取和分析,提取有用文字信息,并對(duì)這些信息建立索引.該爬行器既提升了信息的可訪問(wèn)性,也保證了企業(yè)內(nèi)部的敏感信息的安全性.用戶(hù)通過(guò)后臺(tái)搜索管理界面填寫(xiě)相應(yīng)參數(shù),讓爬行器只爬取特定的數(shù)據(jù)源,前臺(tái)搜索請(qǐng)求模塊可以對(duì)已爬行到的數(shù)據(jù)源進(jìn)行檢索,通過(guò)對(duì)用戶(hù)的身份進(jìn)行確認(rèn),從而可以給用戶(hù)提供安全搜索模式.
[1]文必龍,李 添.企業(yè)搜索引擎安全搜索的研究[J].齊齊哈爾大學(xué)學(xué)報(bào),2010(5):1-3.
[2]李海豐.基于Lucene的企業(yè)搜索引擎研究及應(yīng)用[J].電腦知識(shí)與技術(shù),2009(4):926-929.
[3]鄭 偉.數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)研究[J].電腦與信息技術(shù),2010,18(6):33-35.
[4]姜 華.基于Lucene的面向商業(yè)應(yīng)用的搜索引擎研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2007:48-76.