時貴英 (大慶石油學院計算機與信息技術學院,黑龍江大慶163318)
呂洪濤 (大慶市郵政局,黑龍江大慶163000)
隨著社會的發展和時間的推移,企業的信息量呈現爆炸式的擴展,要在如此浩瀚的信息海洋里快速、準確、高效地查找信息,傳統的數據庫查詢和對于數據字段的模糊匹配搜索查詢已遠遠不能滿足人們的需求,擁有一個高效的搜索引擎成為當前每個企業追求的目標。經調查發現,大量有價值的業務數據經常存儲于各種異構數據庫中,而數據庫的存儲方式對訪問權限的限制、結構化SQL查詢和數據存儲結構異構性特點為搜索引擎的實現帶來了限制和困難[1]。
目前國內還沒有專門針對異構數據庫的引擎,比較好的像 “天網”、“網絡指南針”、“木棉”等搜索引擎的索引結構都不是基于Lucene實現的,它們在實現結果排序時主要采用的索引相關度算法都不是針對數據庫的,沒有考慮到專業領域數據的特殊性[2]。為此,筆者設計并實現了一個可擴展異構數據庫搜索引擎。
元數據是對業務數據本身及其運行環境的描述與定義的數據,它是一種結構化的信息,用于對某項信息資源進行描述、解釋、定位,使其易于提取和使用。使用元數據對異構數據進行抽象和概括,將有利于數據資源的整合與傳播。已有的關于元數據的研究大多集中于特定領域內的信息管理或基于語義的檢索方法,并未將元數據應用于不同系統間數據資源的整合與集成[3]。將元數據與搜索引擎結合起來,通過元數據對異構數據源進行描述,可以將數據源有效地管理起來,從而有效地解決搜索引擎不能夠對異構數據進行檢索的問題。
Lucene是用Java寫的全文索引引擎工具包,支持多種操作系統,它提供了多個API函數和靈活的數據存儲結構。Lucene的API接口設計類似于數據庫的表、記錄、字段,實現了傳統數據庫不擅長的全文索引機制,絕大部分的數據庫檢索都可以方便地映射到Lucene的存儲結構接口中。Lucene的優點可以總結為以下幾點:
1)可以靈活地對數據進行批量索引和增量索引 在首次建立索引時,Lucene采取批量索引方式創建索引文件。當索引需要更新時,Lucene采取的辦法是不斷創建新的索引文件,然后定期地把這些新的小索引文件合并到原先的大索引中 (針對不同的更新策略,批次的大小可以調整),這樣在不影響檢索效率的前提下,提高了索引的效率。
2)具有極其靈活的數據源 Lucene沒有定義具體的數據源,而只提供一個通用的結構 (Document對象)來接受索引的輸入,輸入的數據源可以是數據庫、W ord文檔、PDF文檔和HTM L文檔等。只要前端有合適的轉換器把數據源轉換成相應結構就可以進行數據索引了。
3)支持中文檢索 對于中文用戶來說,最關心的問題是其是否支持中文的全文檢索。Lucene良好的架構設計,只需對其語言詞法分析接口進行擴展就能實現對中文的檢索。
可擴展異構數據庫搜索引擎的主要組成部分包括元數據提取轉換工具、模式轉換工具、數據采集工具、元數據庫、索引數據庫,以及檢索器和查詢器等,如圖1所示。
1)元數據提取和轉換 元數據提取和轉換工具采用中央輻射式元數據抽取和轉換方法[4],即通過使用CWM(Common Warehouse Metamodel)中間元數據存儲作為全局可用的公共元模型,每個集成的數據源必須實現自己的元數據到CWM公共元數據的轉換,從而消除元數據異構,最后通過一個統一的、通用的元數據自動導入模塊將其存儲到元數據庫中。元數據提取和轉換工具不僅使元數據的自動提取、轉換和導入過程標準化,降低了系統復雜性和代碼維護的復雜性,而且充分利用了導入過程的可重用性,最大限度的消除了各提取、轉換與導入的差異,增加了系統的可重用性、可靠性和可擴展性。當需要有新的數據源加入的時候,只要實現相應的元數據提取和轉換就可以了,其他各部分之間的設計與修改并不影響。

圖1 數據庫搜索引擎的總體結構
2)數據采集 數據采集工具在元數據的支持和幫助下,綜合了模型層數據集成和信息層數據集成的特點,屏蔽了數據源的分布性和異構性,為索引和查詢提供了統一的數據接口,實現過程簡單,提高了系統擴展性。數據采集工具在將各數據源的數據抽取后通過模式轉化工具轉換為統一索引文檔格式,存儲至索引文檔庫,為索引和查詢提供數據接口。
3)檢索 檢索器采用與分析索引文檔相識的方法來處理用戶查詢請求,根據用戶的查詢在索引文檔庫中快速檢索文件,從索引中找出與用戶查詢請求相關的文檔,進行相關度匹配,對檢索到的結果進行排序,返回相應的結果給用戶。
4)查詢 查詢器是最終和用戶打交道的用戶搜索界面,用來接納用戶查詢,顯示查詢結果,提供個性化查詢界面。查詢器通過Web頁接受用戶輸入的搜索參數并切分用戶輸入的字串,訪問索引文件檢索出所有符合檢索條件的文檔,并對其進行并集運算和排序運算,最后得到最終的結果文檔。
1)基于詞典的中文分詞技術 中文分詞是信息檢索、文本校對、機器翻譯、語音識別、文本挖掘等研究的前提和基礎,中文文字的處理與西文相比,一個明顯的不同就是漢語的詞與詞之間沒有明顯的分隔標記,因此中文信息處理的首要問題就是要將句子中的詞一個個給分離出來,這就是中文分詞問題。目前,已經有很多比較成熟的漢語分詞技術。筆者采用的是基于詞典的中文分詞技術[5],可以高效準確地實現中文文檔的主題詞條抽取和詞頻統計。Lucene要實現中文分詞功能,只需要在抽象類Analyzer來擴展自己的分詞方法即可[6]。
2)中文文本分類技術 由于本搜索引擎是針對數據庫進行的,因此,在建立索引前需要對數據庫進行轉換并對數據資源進行分類。首先,對數據庫進行轉換。在每個數據節點上瀏覽數據庫,將每張表格讀成xm l文件,如果表中含大字段內容,通過流方式讀成doc文件。其中xm l文件的命名規則為數據庫名+表名;doc文件的命名規則為數據庫名+表名+字段名+主鍵值。然后,對各檢索節點上的數據資源進行分類。通過將據表讀成文本文件后,對文件進行分詞和去掉停用詞等操作提取特征項,計算特征項的權重,一個文本就變成了用特征項 (詞)的權重所表示的一個向量。有了這種表示后,就可通過交叉覆蓋算法[7]對文本進行學習和分類。
3)索引文件的建立 Lucene的索引通過Field字段記錄,Field字段包括Keyword和Tex t 2部分內容。其中,Field.Keyword記錄了數據庫名稱、數據庫訪問路徑、表名和主鍵名、文件名和文件路徑等信息,用戶可以根據信息描述快速地定位到數據庫數據的位置;Field.Tex t則記錄分詞后索引字段的集合內容,主要包括文章號、出現頻率和出現分詞的位置。
4)索引文件的優化 Lucene索引使用的是倒排索引的索引方式,這種索引方式是從特定的關鍵字可以列出所有包含它的文檔,與通常方式的由文檔列出所有關鍵字正好是反過來的。倒排索引源于實際應用中需要根據屬性的值來查找記錄,這種索引表中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址,由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引。
索引文件采用就是倒排索引的方式,把倒排項中的文檔號和出現位置都按遞增排列;另外考慮到檢索效率,在設計索引時按照原始數據源中表格的分類分別建立索引,屬于同一個類別的表建成一個索引文件,控制其大小能在內存中保存,這樣使得用戶的查詢有針對性。
[1]耿亞瑋,熊桂喜.一種用于數據庫搜索引擎的數據采集模型[J].微計算機信息,2007,23(11):136~138.
[2]蔣維,郝文寧,楊曉恝,靳大尉.分布式數據庫搜索引擎的索引建立和優化 [J].計算機工程,2008,9,34(18):36~38.
[3]張宇,蔣東興,劉啟新.基于元數據的異構數據集整合方案 [J].清華大學學報 (自然科學版),2009,49(7):1022~1024.
[4]林 毅,寧洪,王挺,劉文杰.基于元數據的數據整合平臺[J].計算機應用,2008,12(28):209~212.
[5]周程遠,朱敏,楊云.基于詞典的中文分詞算法研究[J].計算機與數字工程,2009,(3):68~71.
[6]姜華.基于Lucene面向主題搜索引擎的研究與設計[D].上海:華東師范大學,2007.
[7]劉政怡,龔建成,吳建國.基于交叉覆蓋算法的中文文本分類[J].計算機工程,2006,10,32(19):183~184.