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