時(shí)貴英 (大慶石油學(xué)院計(jì)算機(jī)與信息技術(shù)學(xué)院,黑龍江大慶163318)
呂洪濤 (大慶市郵政局,黑龍江大慶163000)
隨著社會(huì)的發(fā)展和時(shí)間的推移,企業(yè)的信息量呈現(xiàn)爆炸式的擴(kuò)展,要在如此浩瀚的信息海洋里快速、準(zhǔn)確、高效地查找信息,傳統(tǒng)的數(shù)據(jù)庫查詢和對(duì)于數(shù)據(jù)字段的模糊匹配搜索查詢已遠(yuǎn)遠(yuǎn)不能滿足人們的需求,擁有一個(gè)高效的搜索引擎成為當(dāng)前每個(gè)企業(yè)追求的目標(biāo)。經(jīng)調(diào)查發(fā)現(xiàn),大量有價(jià)值的業(yè)務(wù)數(shù)據(jù)經(jīng)常存儲(chǔ)于各種異構(gòu)數(shù)據(jù)庫中,而數(shù)據(jù)庫的存儲(chǔ)方式對(duì)訪問權(quán)限的限制、結(jié)構(gòu)化SQL查詢和數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)異構(gòu)性特點(diǎn)為搜索引擎的實(shí)現(xiàn)帶來了限制和困難[1]。
目前國內(nèi)還沒有專門針對(duì)異構(gòu)數(shù)據(jù)庫的引擎,比較好的像 “天網(wǎng)”、“網(wǎng)絡(luò)指南針”、“木棉”等搜索引擎的索引結(jié)構(gòu)都不是基于Lucene實(shí)現(xiàn)的,它們?cè)趯?shí)現(xiàn)結(jié)果排序時(shí)主要采用的索引相關(guān)度算法都不是針對(duì)數(shù)據(jù)庫的,沒有考慮到專業(yè)領(lǐng)域數(shù)據(jù)的特殊性[2]。為此,筆者設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)可擴(kuò)展異構(gòu)數(shù)據(jù)庫搜索引擎。
元數(shù)據(jù)是對(duì)業(yè)務(wù)數(shù)據(jù)本身及其運(yùn)行環(huán)境的描述與定義的數(shù)據(jù),它是一種結(jié)構(gòu)化的信息,用于對(duì)某項(xiàng)信息資源進(jìn)行描述、解釋、定位,使其易于提取和使用。使用元數(shù)據(jù)對(duì)異構(gòu)數(shù)據(jù)進(jìn)行抽象和概括,將有利于數(shù)據(jù)資源的整合與傳播。已有的關(guān)于元數(shù)據(jù)的研究大多集中于特定領(lǐng)域內(nèi)的信息管理或基于語義的檢索方法,并未將元數(shù)據(jù)應(yīng)用于不同系統(tǒng)間數(shù)據(jù)資源的整合與集成[3]。將元數(shù)據(jù)與搜索引擎結(jié)合起來,通過元數(shù)據(jù)對(duì)異構(gòu)數(shù)據(jù)源進(jìn)行描述,可以將數(shù)據(jù)源有效地管理起來,從而有效地解決搜索引擎不能夠?qū)Ξ悩?gòu)數(shù)據(jù)進(jìn)行檢索的問題。
Lucene是用Java寫的全文索引引擎工具包,支持多種操作系統(tǒng),它提供了多個(gè)API函數(shù)和靈活的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。Lucene的API接口設(shè)計(jì)類似于數(shù)據(jù)庫的表、記錄、字段,實(shí)現(xiàn)了傳統(tǒng)數(shù)據(jù)庫不擅長的全文索引機(jī)制,絕大部分的數(shù)據(jù)庫檢索都可以方便地映射到Lucene的存儲(chǔ)結(jié)構(gòu)接口中。Lucene的優(yōu)點(diǎn)可以總結(jié)為以下幾點(diǎn):
1)可以靈活地對(duì)數(shù)據(jù)進(jìn)行批量索引和增量索引 在首次建立索引時(shí),Lucene采取批量索引方式創(chuàng)建索引文件。當(dāng)索引需要更新時(shí),Lucene采取的辦法是不斷創(chuàng)建新的索引文件,然后定期地把這些新的小索引文件合并到原先的大索引中 (針對(duì)不同的更新策略,批次的大小可以調(diào)整),這樣在不影響檢索效率的前提下,提高了索引的效率。
2)具有極其靈活的數(shù)據(jù)源 Lucene沒有定義具體的數(shù)據(jù)源,而只提供一個(gè)通用的結(jié)構(gòu) (Document對(duì)象)來接受索引的輸入,輸入的數(shù)據(jù)源可以是數(shù)據(jù)庫、W ord文檔、PDF文檔和HTM L文檔等。只要前端有合適的轉(zhuǎn)換器把數(shù)據(jù)源轉(zhuǎn)換成相應(yīng)結(jié)構(gòu)就可以進(jìn)行數(shù)據(jù)索引了。
3)支持中文檢索 對(duì)于中文用戶來說,最關(guān)心的問題是其是否支持中文的全文檢索。Lucene良好的架構(gòu)設(shè)計(jì),只需對(duì)其語言詞法分析接口進(jìn)行擴(kuò)展就能實(shí)現(xiàn)對(duì)中文的檢索。
可擴(kuò)展異構(gòu)數(shù)據(jù)庫搜索引擎的主要組成部分包括元數(shù)據(jù)提取轉(zhuǎn)換工具、模式轉(zhuǎn)換工具、數(shù)據(jù)采集工具、元數(shù)據(jù)庫、索引數(shù)據(jù)庫,以及檢索器和查詢器等,如圖1所示。
1)元數(shù)據(jù)提取和轉(zhuǎn)換 元數(shù)據(jù)提取和轉(zhuǎn)換工具采用中央輻射式元數(shù)據(jù)抽取和轉(zhuǎn)換方法[4],即通過使用CWM(Common Warehouse Metamodel)中間元數(shù)據(jù)存儲(chǔ)作為全局可用的公共元模型,每個(gè)集成的數(shù)據(jù)源必須實(shí)現(xiàn)自己的元數(shù)據(jù)到CWM公共元數(shù)據(jù)的轉(zhuǎn)換,從而消除元數(shù)據(jù)異構(gòu),最后通過一個(gè)統(tǒng)一的、通用的元數(shù)據(jù)自動(dòng)導(dǎo)入模塊將其存儲(chǔ)到元數(shù)據(jù)庫中。元數(shù)據(jù)提取和轉(zhuǎn)換工具不僅使元數(shù)據(jù)的自動(dòng)提取、轉(zhuǎn)換和導(dǎo)入過程標(biāo)準(zhǔn)化,降低了系統(tǒng)復(fù)雜性和代碼維護(hù)的復(fù)雜性,而且充分利用了導(dǎo)入過程的可重用性,最大限度的消除了各提取、轉(zhuǎn)換與導(dǎo)入的差異,增加了系統(tǒng)的可重用性、可靠性和可擴(kuò)展性。當(dāng)需要有新的數(shù)據(jù)源加入的時(shí)候,只要實(shí)現(xiàn)相應(yīng)的元數(shù)據(jù)提取和轉(zhuǎn)換就可以了,其他各部分之間的設(shè)計(jì)與修改并不影響。
圖1 數(shù)據(jù)庫搜索引擎的總體結(jié)構(gòu)
2)數(shù)據(jù)采集 數(shù)據(jù)采集工具在元數(shù)據(jù)的支持和幫助下,綜合了模型層數(shù)據(jù)集成和信息層數(shù)據(jù)集成的特點(diǎn),屏蔽了數(shù)據(jù)源的分布性和異構(gòu)性,為索引和查詢提供了統(tǒng)一的數(shù)據(jù)接口,實(shí)現(xiàn)過程簡單,提高了系統(tǒng)擴(kuò)展性。數(shù)據(jù)采集工具在將各數(shù)據(jù)源的數(shù)據(jù)抽取后通過模式轉(zhuǎn)化工具轉(zhuǎn)換為統(tǒng)一索引文檔格式,存儲(chǔ)至索引文檔庫,為索引和查詢提供數(shù)據(jù)接口。
3)檢索 檢索器采用與分析索引文檔相識(shí)的方法來處理用戶查詢請(qǐng)求,根據(jù)用戶的查詢?cè)谒饕臋n庫中快速檢索文件,從索引中找出與用戶查詢請(qǐng)求相關(guān)的文檔,進(jìn)行相關(guān)度匹配,對(duì)檢索到的結(jié)果進(jìn)行排序,返回相應(yīng)的結(jié)果給用戶。
4)查詢 查詢器是最終和用戶打交道的用戶搜索界面,用來接納用戶查詢,顯示查詢結(jié)果,提供個(gè)性化查詢界面。查詢器通過Web頁接受用戶輸入的搜索參數(shù)并切分用戶輸入的字串,訪問索引文件檢索出所有符合檢索條件的文檔,并對(duì)其進(jìn)行并集運(yùn)算和排序運(yùn)算,最后得到最終的結(jié)果文檔。
1)基于詞典的中文分詞技術(shù) 中文分詞是信息檢索、文本校對(duì)、機(jī)器翻譯、語音識(shí)別、文本挖掘等研究的前提和基礎(chǔ),中文文字的處理與西文相比,一個(gè)明顯的不同就是漢語的詞與詞之間沒有明顯的分隔標(biāo)記,因此中文信息處理的首要問題就是要將句子中的詞一個(gè)個(gè)給分離出來,這就是中文分詞問題。目前,已經(jīng)有很多比較成熟的漢語分詞技術(shù)。筆者采用的是基于詞典的中文分詞技術(shù)[5],可以高效準(zhǔn)確地實(shí)現(xiàn)中文文檔的主題詞條抽取和詞頻統(tǒng)計(jì)。Lucene要實(shí)現(xiàn)中文分詞功能,只需要在抽象類Analyzer來擴(kuò)展自己的分詞方法即可[6]。
2)中文文本分類技術(shù) 由于本搜索引擎是針對(duì)數(shù)據(jù)庫進(jìn)行的,因此,在建立索引前需要對(duì)數(shù)據(jù)庫進(jìn)行轉(zhuǎn)換并對(duì)數(shù)據(jù)資源進(jìn)行分類。首先,對(duì)數(shù)據(jù)庫進(jìn)行轉(zhuǎn)換。在每個(gè)數(shù)據(jù)節(jié)點(diǎn)上瀏覽數(shù)據(jù)庫,將每張表格讀成xm l文件,如果表中含大字段內(nèi)容,通過流方式讀成doc文件。其中xm l文件的命名規(guī)則為數(shù)據(jù)庫名+表名;doc文件的命名規(guī)則為數(shù)據(jù)庫名+表名+字段名+主鍵值。然后,對(duì)各檢索節(jié)點(diǎn)上的數(shù)據(jù)資源進(jìn)行分類。通過將據(jù)表讀成文本文件后,對(duì)文件進(jìn)行分詞和去掉停用詞等操作提取特征項(xiàng),計(jì)算特征項(xiàng)的權(quán)重,一個(gè)文本就變成了用特征項(xiàng) (詞)的權(quán)重所表示的一個(gè)向量。有了這種表示后,就可通過交叉覆蓋算法[7]對(duì)文本進(jìn)行學(xué)習(xí)和分類。
3)索引文件的建立 Lucene的索引通過Field字段記錄,Field字段包括Keyword和Tex t 2部分內(nèi)容。其中,Field.Keyword記錄了數(shù)據(jù)庫名稱、數(shù)據(jù)庫訪問路徑、表名和主鍵名、文件名和文件路徑等信息,用戶可以根據(jù)信息描述快速地定位到數(shù)據(jù)庫數(shù)據(jù)的位置;Field.Tex t則記錄分詞后索引字段的集合內(nèi)容,主要包括文章號(hào)、出現(xiàn)頻率和出現(xiàn)分詞的位置。
4)索引文件的優(yōu)化 Lucene索引使用的是倒排索引的索引方式,這種索引方式是從特定的關(guān)鍵字可以列出所有包含它的文檔,與通常方式的由文檔列出所有關(guān)鍵字正好是反過來的。倒排索引源于實(shí)際應(yīng)用中需要根據(jù)屬性的值來查找記錄,這種索引表中的每一項(xiàng)都包括一個(gè)屬性值和具有該屬性值的各記錄的地址,由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引。
索引文件采用就是倒排索引的方式,把倒排項(xiàng)中的文檔號(hào)和出現(xiàn)位置都按遞增排列;另外考慮到檢索效率,在設(shè)計(jì)索引時(shí)按照原始數(shù)據(jù)源中表格的分類分別建立索引,屬于同一個(gè)類別的表建成一個(gè)索引文件,控制其大小能在內(nèi)存中保存,這樣使得用戶的查詢有針對(duì)性。
[1]耿亞瑋,熊桂喜.一種用于數(shù)據(jù)庫搜索引擎的數(shù)據(jù)采集模型[J].微計(jì)算機(jī)信息,2007,23(11):136~138.
[2]蔣維,郝文寧,楊曉恝,靳大尉.分布式數(shù)據(jù)庫搜索引擎的索引建立和優(yōu)化 [J].計(jì)算機(jī)工程,2008,9,34(18):36~38.
[3]張宇,蔣東興,劉啟新.基于元數(shù)據(jù)的異構(gòu)數(shù)據(jù)集整合方案 [J].清華大學(xué)學(xué)報(bào) (自然科學(xué)版),2009,49(7):1022~1024.
[4]林 毅,寧洪,王挺,劉文杰.基于元數(shù)據(jù)的數(shù)據(jù)整合平臺(tái)[J].計(jì)算機(jī)應(yīng)用,2008,12(28):209~212.
[5]周程遠(yuǎn),朱敏,楊云.基于詞典的中文分詞算法研究[J].計(jì)算機(jī)與數(shù)字工程,2009,(3):68~71.
[6]姜華.基于Lucene面向主題搜索引擎的研究與設(shè)計(jì)[D].上海:華東師范大學(xué),2007.
[7]劉政怡,龔建成,吳建國.基于交叉覆蓋算法的中文文本分類[J].計(jì)算機(jī)工程,2006,10,32(19):183~184.