文必龍,葉 靜
(東北石油大學計算機與信息技術學院,黑龍江 大慶 163318)
信息社會的快速發展使得信息的容量達到了空前的高度.在大部分行業中,企業內容每年增加一倍以上.重要而敏感的內容遍及各處,它們存在于企業的數據庫中,電子郵件的附件中,專用內容管理服務器中、分布式文件系統或私人工作區中,以及內部網和面向公眾的網站中.用戶需要有效的企業搜索,將分布各處的信息轉化為運營優勢,企業搜索引擎[1]成為研究熱點.企業搜索引擎與因特網搜索引擎比較具有其特殊的特性[2]:企業搜索引擎需要面向企業網,對企業內部的信息資源進行搜索;因特網搜索引擎的搜索對象是網頁和多媒體文件,而企業搜索引擎可以對企業數據庫進行搜索;因特網搜索的內容和展現的信息都是完全開放,不存在安全性問題,但企業的數據涉及企業的核心利益,要求具有很高的保密性;因特網搜索和展現的內容都是網頁和文件的原始形態,但企業數據庫中的數據有的是以編碼形式保存,需要進行專門的語義處理和代碼轉換,變成用戶能讀懂的文字、圖形和報表等方式.
數據采集[3]是搜索引擎工作的第一步,只有相關的信息被爬行器抓取到才能進行下一步的數據分析工作.由于企業搜索引擎素要處理的信息[4]包括了大量的異構數據庫和異構文檔,需要對不同類型的信息書寫不同的處理函數以提取文本.本文根據企業搜索引擎的相關特性,開發出基于SES的通用爬行器.該爬行器可以對 Lotus/Domino的相關內容、基于Microsoft SharePoint Server(SPS)門戶網站、基于Content Management System(CMS)內容管理系統、企業數據庫(Oracle和Sql Server)和FTP上的相關內容進行爬行.從爬行效果上都必須滿足對數據源的完全爬行,對于Domino、FTP的相關內容還應提供增量爬行機制,即采集新增的或有更新情況的文檔,保證了搜索的時效性.
Secure Enterprise Search(SES)安全企業搜索,是由Oracle公司針對企業用戶的企業搜索需求推出的一款安全企業搜索產品,并提供了用于二次開發的相應的接口.Oracle搜索解決方案基于Oracle數據庫構建(定期對可靠性和安全性進行檢查),為搜索提供了高度安全的基礎.Oracle與主要的認證機制和庫進行了集成,用戶不僅可以安全有效地查找信息、緩解信息過載,還可以發掘深層內聯網中難以觸及的隱藏信息.
SES提供的搜索器是一個多線程Java應用程序,負責從用戶在配置期間指定的數據源中收集文檔.要搜索其他信息庫,SES搜索器允許用戶定義特定“數據源”.搜索器也可以通過“插件”擴展(插件是Oracle提供的或客戶開發的Java類,與搜索應用程序運行在同一個OC4J容器中).在定義插件后,它們將作為新數據源列出.在進行配置后,插件可以將數據提供給搜索器,并且可以像其他數據源一樣進行索引.從技術上講,插件負責收集指向要索引文檔的URL,它們將這些URL傳遞給搜索器進行索引.用戶可以根據自己的實際需求,利用SES提供的相應接口,按照一定的規范實現自己的插件.
本系統采用分層設計,結構清晰,可擴展性強.系統的總體結構如圖1所示.

圖1 系統總體結構
數據采集是企業搜索引擎工作的第一步,通過SES提供的相應接口開發出通用爬行器插件,根據需要爬取數據源類型的不同,選擇相應的爬行器類型并填寫好爬行參數,對爬取的數據進行索引,并存儲到索引庫當中.用戶在Web界面中輸入相應的關鍵詞并對其進行簡單的切詞操作后提交到企業搜索引擎當中,將命中的結果的前200條分頁顯示在界面當中.
SES提供了相應的接口供用戶開發符合自己需求的爬行器插件,本系統利用了這些接口開發了通用爬行器插件,該爬行器可以對Lotus/Domino的相關內容、基于Microsoft SharePoint Server(SPS)門戶網站、企業數據庫(Oracle和 Sql Server)和FTP上的相關內容進行爬行.從爬行效果上滿足了對數據源的完全爬行和對部分數據源的增量爬行.
圖2為爬行器的系統架構,其中①②③④⑤為爬行器的工作順序,具體工作流程如下.

圖2 爬行器的系統架構
1)通過源類型注冊,系統知道該到哪個jar文件中查找實現CrawlerPluginManager的類名,該類是爬行器程序的入口.
2)創建源時選擇源類型,系統通過調用管理器類的三個成員函數:getPluginParameters、getPluginDescription和 getPluginName,獲取插件名稱、描述和參數表,其中getPluginParameters返回一組類型為List的參數列表,系統根據列表中的參數名、參數描述和缺省值自動生成參數輸入界面.
3)啟動爬行后,調用初始化函數init(ParameterValues params,boolean forceRecrawl,Date last-CrawlTime,GeneralService generalMgr,int thread-Count),即向管理器類傳遞爬行模式、上次爬行時間、線程數等相應參數.此外,將提供一個輔助服務類(GeneralService generalMgr)傳遞給管理器類,管理器類通過輔助服務類可以獲取系統的各種服務.CrawlerCtrl類為各種數據源的連接及獲取相關內容的管理類,例如,getFileList(String path)可獲得ftp服務器上path目錄下包括子目錄的所有文件列表,LotusAttachment(String dominoURL,String username,String password,String DBname,String Form)可獲得domino服務器上某個表單下的所有附件.對實例化CrawlerCtrl類后得到的結果進行處理,得到文檔鏈接,將其和文檔的最后修改時間拼接后作為唯一的DisplayURL放入隊列中,采用修改時間作為文檔修改的主要標志,實現對domimo和ftp數據源的增量爬行.
4)調度系統在通過init完成管理器類的初始化后,然后調用管理器類getCrawlerPlugin函數,從管理器類中獲得爬行器對象.在getCrawlerPlugin函數中,管理器類創建一個爬行器類的對象,并用系統在init中傳過來的參數對其進行初始化.
5)調度系統用管理器類的getCrawlerPlugin方法獲得爬行器對象后,調用爬行器對象的crawler方法,啟動爬行.crawler方法根據系統傳遞過來的源定義參數,如數據服務器地址、用戶名、口令、文件目錄、爬行的域或屬性、關鍵字等內容,完成以下工作.
①從隊列中依次取出DisplayURL,建立與數據服務器的聯接,查詢出對應的文檔.
②對每一個文檔,獲取其屬性(如標題、最后修改時間、文檔的顯示URL、作者等),根據這些屬性建立一個元數據對象(類DocumentMetadata的實例).
③對每一個文檔,建立一個讀取文件的流對象(InputStream類的實例).
④將元數據對象和流對象提交給爬行線程服務器CrawlingThreadService.
爬行線程服務器在接到提交的元數據對象和流對象后,就會調用流對象獲取文檔內容,根據內容格式調用相應的過濾器(如word、PDF、Excel等基本格式)進行格式分析、內容過濾、建立索引、派生線程等.
本系統分后臺搜索管理模塊和前臺搜索請求模塊兩部分.后臺搜索管理模塊從總體上分為:搜索前準備、搜索過程控制和搜索成果管理等.前臺搜索請求模塊主要負責對已爬行到的結果進行檢索.
后臺管理模塊需要設置所要爬行的數據源的必要信息,包括數據源名稱、服務器地址、用戶名、密碼、所要爬行內容對應的相關實體和屬性.例如,Domino爬行器程序的界面如圖3所示.通過日志模塊可以查看整個爬行的運行狀態,如圖4所示.

圖3 Domino爬行器主界面

圖4 爬行運行狀態
搜索請求界面是企業搜索引擎系統提供的首界面,頁面簡單明了,用戶只需輸入關鍵字,點擊“搜索”按鈕即可.
主要實現基于SES的通用爬行器程序以及基于企業搜索引擎的搜索程序.該通用爬行器可以對企業數據庫、門戶網頁、文檔文件、辦公系統內容等進行抓取和分析,提取有用文字信息,并對這些信息建立索引.該爬行器既提升了信息的可訪問性,也保證了企業內部的敏感信息的安全性.用戶通過后臺搜索管理界面填寫相應參數,讓爬行器只爬取特定的數據源,前臺搜索請求模塊可以對已爬行到的數據源進行檢索,通過對用戶的身份進行確認,從而可以給用戶提供安全搜索模式.
[1]文必龍,李 添.企業搜索引擎安全搜索的研究[J].齊齊哈爾大學學報,2010(5):1-3.
[2]李海豐.基于Lucene的企業搜索引擎研究及應用[J].電腦知識與技術,2009(4):926-929.
[3]鄭 偉.數據采集系統的設計研究[J].電腦與信息技術,2010,18(6):33-35.
[4]姜 華.基于Lucene的面向商業應用的搜索引擎研究與實現[D].成都:電子科技大學,2007:48-76.