摘要:分析了企業級搜索引擎應具有的功能和總體架構,研究了Lucene的系統結構及檢索原理,提出了統一處理html、pdf、word等多種常用文檔的思路。針對中文特點設計搜索引擎的構建技術,包括從源數據采集、文檔解析與分詞、索引器、信息檢索、結果排序的全過程,基于Lucene軟件包實現了一個原型系統,取得了較好的搜索效果。
關鍵詞:Lucene;企業搜索引擎;中文分詞;非結構化文檔
中圖分類號:TP393文獻標識碼:A 文章編號:1009-3044(2009)04-0926-04
Research and Application of Enterprise Search Engine Based on Lucene
LI Hai-feng
(Colleage of Computer Science of Central South University of Forestry and Technology, Changsha 410004, China)
Abstract: The structure and function of the enterprise search engine has been analyzed,introduces the structure and the index principles of Lucene,put forward the method of the deal with html,pdf,word documents.Design of search engine technology based on characteristics of the Chinese,include the process ofCollection of source data,Document Analysis and Segmentation,Indexer, information search,result sorting.Realize a prototype system based on Lucene,and achieved a good search results.
Key words: lucene; enterprise search engine; chinese word segmentation; unstructured documents
1 引言
伴隨著互聯網的興起,企業信息化建設也迅速發展起來。面對浩瀚的企業內部數據和網絡數據,如何更有效、快速的獲取成為一個非常重要的問題,企業搜索引擎很好的解決了這個問題。網絡信息數據分為兩類:一類信息能夠用數據或統一的結構加以表示,稱之為結構化數據,如數字、符號等;另一類信息無法用數字或統一的結構表示,如word文檔、PPT演示文檔、PDF文件乃至網頁等,這些非結構化信息都位于傳統數據庫之外。隨著企業信息化水平的提高,企業內部和網絡上的大部分數據為非結構化信息。
現有的數據庫檢索,是以結構化數據為檢索的主要目標,實現相對簡單,但對于非結構化數據,由于復雜的數據事務操作以及低效的高層接口,導致檢索效率低下。Lucene[1]這個開源項目的推出及發展,為開發者提供了一個優秀的信息檢索引擎。
2 Lucene技術簡介
Lucene作為一個優秀的全文檢索引擎,它的系統結構[2]具有強烈的面向對象特征。首先是定義了一個與平臺無關的索引文件格式,其次通過抽象將系統的核心組成部分設計為抽象類,具體的平臺實現部分設計為抽象類的實現,此外與具體平臺相關的部分比如文件存儲也封裝為類,經過層層的面向對象式的處理,最終達成了一個低耦合高效率,容易二次開發的檢索引擎系統。
2.1 Lucene的系統結構
Lucene的系統由基礎結構封裝、索引核心、對外接口三大部分組成。其中直接操作索引文件的索引核心又是系統的重點,如圖1所示。
Lucene每個包完成的特定功能,如表1所示。
2.2 Lucene的特點
Lucene作為一個全文檢索引擎,其具有如下突出的優點:
1) 索引文件格式獨立于應用平臺。Lucene定義了一套以8位字節為基礎的索引文件格式,使得兼容系統或者不同平臺的應用能夠共享建立的索引文件。
2) 在傳統全文檢索引擎的倒排索引的基礎上,實現了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達到優化的目的。
3) 優秀的面向對象的系統架構,使得對于Lucene擴展的學習難度降低,方便擴充新功能。
4) 設計了獨立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創立, 每個域有是否索引、是否存儲、是否分詞3個參數,用戶擴展新的語言和文件格式,只需要實現文本分析的接口。
5) 已經默認實現了一套強大的查詢引擎,用戶無需自己編寫代碼即可使系統獲得強大的查詢能力,如短語查詢、模糊查詢、前綴匹配、區間查詢、條件過濾、邏輯運算符等。
3 系統概述
3.1 設計目標
企業搜索要求不同于網絡搜索,對引擎有如下的一些特別要求:1) 提供對多數據源的支持(DB、Web、Mail、Office等);2) 提供對多種文件格式的支持(文本、郵件、網頁、辦公文檔等);3) 提供對文件的權限控制,即搜索的結果需要根據請求用戶權限的不同而變化;4) 需要提供多種檢索方式的支持;此外還有信息推送、信息分類聚類等其他要求。
3.2 系統框架
企業級搜索引擎[3]依靠企業的硬件平臺和網絡環境,針對企業的非結構化文檔信息以及異構的結構化數據庫,提供整體檢索服務方案。主要內容包括異構文檔解析、異構數據庫解析、信息分類系統、文檔索引系統、信息檢索系統、系統管理控制、安全控制等各種內容。
整個系統數據流程從原始數據開始,經過格式化分析和處理,得到統一的中間純文本形式。通過信息分類建立不同信息的屬性,在安全管理和系統管理的配合下,完成文檔索引功能。系統用戶通過信息檢索系統搜索系統數據。系統功能流程如圖2所示。
4 系統模塊和設計
4.1 源數據采集
企業搜索引擎指對企業文檔資源和數據庫資源進行索引和檢索的一類搜索機制。企業搜索引擎對用戶提交的查詢匹配串找到相應的文檔鏈接,搜集企業文檔的目錄列表以及向用戶提供信息查詢服務。企業搜索引擎的信息采集不僅需要對企業外部的站點進行采集,還需要對企業內部的站點進行采集。
企業內部的網站數量往往不會很多,而且網址(或IP地址)相對固定,因此可以將這些站點全部加到搜索引擎的內部網絡站點集中。如建設了新站點,用戶只要把網址添加到內部網絡站點集中即可。對內網站點信息的采集,網絡蜘蛛爬行的范圍僅限于內部網絡,而將那些內部網絡站點的頁面中指向外部網站的鏈接添加到外網種子站點集中。
為了確保對外部網站信息檢索的質量,對外網信息采集的種子站點需要精心選擇。外網種子站點集包含兩個層次:
種子站點集和候選種子站點集。
種子站點集由如下兩個途徑產生:1) 用戶推薦的行業或領域內的權威站點;2) 企業內部網站中鏈接到的外部網站。這些網站是企業用戶經常訪問的站點,其中往往包含有對企業用戶有用的信息。
候選種子站點集也由兩個途徑產生:1) 用企業關鍵詞集的關鍵詞,利用多個通用搜索引擎檢索,獲得的排名靠前的若干站點;2) 在企業搜索引擎的一個更新周期內,企業用戶在檢索時命中率和點擊率較高的若干站點。
種子站點集是相對固定不變的,而候選種子站點集在每一次更新搜索引擎數據庫時要重新計算。增加候選種子站點集的做法有助于發現尚未為用戶所知的權威站點以及行業內新出現的一些站點。種子站點和候選種子站點的數量可根據企業具體情況設定,一般十幾個到幾十個為宜。
企業關鍵詞由企業各部門推薦,經企業專家認定,并根據行業及企業的發展進行動態調整。
4.2 文檔解析與中文分詞
漢語的書寫以漢字作為基本單位,詞與詞之間沒有明顯的形態界限,要進行漢語的計算機處理,必須首先將漢語的詞與詞分割開,即分詞[4]。通常認為中文分詞主要有以下3種形式:
4.2.1 基于詞典匹配的分詞方法
基于詞典的分詞方法的三個要素為分詞詞典、文本掃描順序和匹配原則。分詞詞典包括常規詞典和專業詞典。文本的掃描順序有正向掃描、逆向掃描和雙向掃描。正向掃描是指從待切分字符串的第一個字符往后掃描,而逆向掃描是指從待切分字符串的最后一個字符往前掃描。雙向掃描則是正向掃描和逆向掃描的組合。匹配原則主要有最大匹配、最小匹配、逐詞匹配和最佳匹配等。常見的基于詞典的分詞方法有正向最大匹配法、逆向最大匹配發、雙向掃描法、逐詞遍歷法、最佳匹配法等。
4.2.2 基于統計的分詞方法
基于統計的分詞方法的基本思想是:從形式上看,詞是穩定的字的組合,因此在文檔中,相鄰的字按順序同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映它們成為詞的可信度。所以基于統計的分詞法的基本原理就是:對語料庫中相鄰的字的組合的頻度進行統計,根據一定的頻度計算公式來決定字符串成為詞的可能性來分詞。字詞共現的頻度高低體現了漢字之間結合關系的緊密程度。當緊密程度高于某一個閾值時,便可認為此字符串可能已經構成了一個詞。基于統計的分詞方法所應用的主要的統計量或統計模型有:互信息、N元文法模型、神經網絡模型、隱Markov模型等。
4.2.3 基于理解的分詞方法
基于語義理解的分詞方法是模擬人腦對語言和句子的理解,達到識別詞匯單元的效果。基本模式是把分詞、句法、語義分析并行進行,利用句法和語義信息來處理分詞的歧義。
由于Lucene只支持txt等純文本格式的索引,對于html、pdf、word和Excel等異構文檔數據我們需要進行文檔解析過濾后才能進行索引,我們利用各種相關工具對異構文檔進行文本提取,將解析出來的文本利用中文分詞工具ICTCLAS[5]進行分詞。下一步就是停用詞的處理,以節省存儲空間和提高搜索效率,然后傳遞給Lucene的索引器建立索引。
4.3 索引結構分析與建立
在Lucene的文件格式中,以字節為基礎,定義了數據類型,由于它們都以字節為基礎定義而來,因此保證了與平臺無關,這也是Lucene索引文件格式平臺無關的主要原因。Lucene存放索引信息的是文件。它的索引存儲文件設計的比較通用,輸入輸出結構都很像數據庫的表→記錄→字段,所以很多傳統應用的文件、數據庫等都可以比較方便地映射到Lucene的存儲結構/接口中。
Lucene索引由一個或多個段(Segment)組成,而每個段又由多個文檔(Document)組成。一個Document對象都包含一個或多個不同命名的域(Field)。一個文檔的域代表文檔或者和文檔相關的一些元數據。每一個域都對應于一段數據,這些數據在搜索過程中可能會被查詢或者在索引中被檢索。每個域都由域名(name)和域值(value)對所組成。項(Term)是用于搜索的一個基本單元。如同域對象一樣,它包括一對字符串元素:與域中的域名(name)和域值(value)相對應。一個搜索引擎的有效性在很大程度上取決于索引的質量。索引器主要完成將切詞形成的順排檔文檔組織成倒排檔索引數據。索引的建立,主要分兩步,因為只有符合Lucene.Document要求的文檔才能使用Lucene對其建立索引,所以首先構造一個Document的文檔對象doc,其中包括描述數據域和正文數據域。然后對該doc文檔建立索引,對于描述數據,因其體積小、占字段多、被檢索率高,所以直接存入索引庫中,而龐大的正文數據僅將其存放地址和文件名等存入索引庫中。
由于企業搜索引擎所要處理的信息[6]包括了大量的異構數據庫和異構文檔,因此需要對不同類型的信息書寫不同的處理函數以提取出文本然后進行索引。索引邏輯圖如圖3所示。
4.4 信息檢索
信息檢索的核心就是判斷待檢索文章與用戶查詢式是否相關,通常通過一個相關性評價的數據檢索模型來實現。在這個數據檢索模型中給出了文檔的表示方式、檢索的表示方式以及檢索與文檔的匹配過程。根據搜索引擎查找相關信息、方式的不同,可將信息檢索方式分為:布爾邏輯模型、模糊邏輯模型、向量空間模型以及概率模型等。
在索引建好的基礎上我們需要建立檢索API,Lucene的檢索機制是根據用戶輸入的關鍵詞,用其分析器(這里我們先用ICTCLAS進行中文分詞)分析關鍵詞,再將分析結果傳給搜索函數進行搜索,返回命中文檔的集合。在本系統中我們提供了兩個搜索函數:一個是Lucene搜索函數的改進版,它結合Lucene的評分規則和PageRank[7];另一個根據時間排序。
在搜索引擎的研究中,一個核心問題就是評分規則的確定,如何確保用戶感興趣的網頁或重要的富含信息的網頁得分較高,這是一個較難的工作,也是一個研究熱點。由于Lucene只考慮了文檔自身的內容,沒有考慮文檔間的關系,而文檔間的引用關系往往能反應文檔的重要程度;就比如經常被引用的論文往往是好論文,盡管可能它的文檔內容得分不高,但因為它足夠權威,我們還是要提高其得分。PageRank便基于類似的思路利用網頁間的鏈接關系來計算網頁的重要性。于是我們引入PageRank對Lucene的評分機制進行修改,在計算向量模型時加入PageRank的值,再進行規范化處理。
4.5 檢索排序技術
Lucene的排序技術[8]總體來說,還是屬于一般信息檢索的向量模型方法,計算過程中使用TF/IDF的關鍵字匹配方式,通過計算關鍵字在不同文檔中的量化權重進行排序。Lucene中與文檔評分有關的因素包括文檔中關鍵字頻率TF、逆文檔頻率IDF、文檔的加權值Boost、文檔關鍵字與文檔的長度比LengthNorm等。另外在具體檢索時還可以通過設定臨時排序字段等方法控制結果的順序,如圖4所示。
原型系統中參照了Lucene中的評分機制,公式如下:
■tf(tind)·idf(t)·boost(t.fieldind)·lengthNorm(t.fieldind)
其中:tf(t in d)表示文檔d中出現搜索項t的頻率;
idf(t)表示搜索項t在倒排檔中出現的頻率;boost(t.field in d)表示域的加權因子,其值在索引過程中進行設置;
lengthNorm(t.field in d)表示域的標準化值,即在某一域中所有項的個數,通常在索引時計算該值并將其存儲到索引中;
最后我們按照得分從大到小輸出檢索結果。
4.6 Pagerank的計算
PageRank是Google使用的根據網頁之間的鏈接關系,給出網頁權重的一種算法。其基本思想為:當網頁A有n個鏈接指向其他網頁時,將網頁A的rank值分為n份,分別賦予這n個網頁。對網頁集合中的所用網頁使用迭代計算的方法反復計算,直到收斂到一個不動點為止。我們采用中的算法。
4.7 搜索引擎的安全
企業搜索引擎主要面向企業內部用戶使用,其中包含企業內部網的信息,有一些信息不便向外公開。此外,企業搜索引擎服務器的性能也有一定的限制。因此,對企業搜索引擎要進行安全性考慮,采取一些技術措施限制外部用戶的使用。
5 結束語
本系統提供按內容相似性和時間兩種排序方式,實現了中文分詞、PageRank等技術。文中通過對Lucene的深入研究,在Lucene的基礎上建立了一個完整的企業搜索引擎實例,其組織比較完整,查詢功能強大,檢索速度快,搜索精度較高。在今后的研究中,將在此系統的基礎上。改進Lucene中的檢索結果排序算法以提高搜索精度。
參考文獻:
[1] 李剛,宋偉.征服Ajax+Lucene構建搜索引擎[M].北京:人民郵電出版社,2006:220-245.
[2] 車東.基于Java的全文索引引擎Lucene簡介[EB/OL]. http://www.chedong.com/tech/Lucene.html.2002
[3] 劉暢,張輝.一種應用于搜索引擎的索引結構研究[J].計算機與數字工程,2005,33(9):41-44.
[4] 陳海波. 基于自動分詞的企業文檔搜索引擎設計與實現[D].西北工業大學,2007:9-23.
[5] 張華平.計算所漢語詞法分析系統ICTCLAS3.0白皮書[EB/OL].http://www.i3s.ac.cn/Manual/.2006
[6] 姜華.基于Lucene的面向商業應用的搜索引擎研究與實現[D].電子科技大學.2007.48-76.
[7] IANROGERS.TheGooglePagerankAlgorithmandHowItWorks[EB/OL]. http://www.alvit.de/vf/en/web-development-the-google-pagerank-algorithm-and-how-it-works.html
[8] 王學松.Lucene搜索引擎開發[M].北京:人民郵電出版社,2008:232-275.