李瑞麗,錢 皓,黃以凱
隨著現(xiàn)代信息科技的不斷發(fā)展,如何較快較好的實現(xiàn)全文檢索已成為比較熱門的話題。全文檢索是指將文件中所有的文本與檢索的關鍵字進行匹配的一個資料檢索方法。全文檢索技術是指通過關鍵字將存儲在信息系統(tǒng)數(shù)據(jù)庫中,包括該關鍵字的所有記錄查找出來的檢索技術,可以獲得信息文本中的所有相關章、段、節(jié)、句、詞等信息,同時也可以對信息進行各種統(tǒng)計和分析。
本文將介紹如何使用 Oracle的全文檢索技術提供一個優(yōu)秀快速的解決方案。在已有的信息系統(tǒng)中,利用Oracle text和Ultra Search實現(xiàn)對不同格式數(shù)據(jù)源,尤其是以LOB類型(word、excel、pdf等二進制格式的文件)保存的數(shù)據(jù)的全文檢索,并且解決了因系統(tǒng)中間件和Ultra Search中間件不同帶來的權限控制問題。
外事一體化綜合管理系統(tǒng)(課題編號:09511503500,以下簡稱外事系統(tǒng))是由上海市護照簽證受理中心、萬達信息股份有限公司共同承擔的研發(fā)課題。外事系統(tǒng)設計開發(fā)了諸如來華簽證、領事認證、辦公審批等20多個子系統(tǒng)。各個子系統(tǒng)既有獨立性,也有關聯(lián)性,業(yè)務數(shù)據(jù)表近200張,有些數(shù)據(jù)表的數(shù)據(jù)達到數(shù)十萬級,且各種格式的附件存儲在LOB字段中,要求系統(tǒng)能夠提供準確而快捷的全文檢索功能。因此如何實現(xiàn)基于大數(shù)據(jù)量的全文檢索是外事系統(tǒng)的一大技術難題。
Oracle text是Oracle10g的組件,基于后臺數(shù)據(jù)庫,是一種強大的檢索工具,搜索范圍可以是多種文本格式的數(shù)據(jù)來源,可對Oracle數(shù)據(jù)支持的多種語言實現(xiàn)全文檢索功能。
Oracle Text實現(xiàn)全文檢索的邏輯步驟主要包括如下:
(1)搜索檢索目標數(shù)據(jù)庫中的所有表源,并讀取所有表源列中的數(shù)據(jù)。
(2)通過過濾器過濾文檔數(shù)據(jù)并將文檔數(shù)據(jù)轉(zhuǎn)換為文本表示方式。
(3)通過分段器提取過濾器的輸出的文檔信息,并將該文檔信息轉(zhuǎn)換為純文本。
(4)通過詞法分析器提取分段器中輸出的純文本信息,并將該純文本信息拆分為不連續(xù)的標記。
(5)通過索引引擎提取詞法分析器中的輸出的所有不連續(xù)的標記,并構建索引。
Oracle Text為系統(tǒng)管理員分配CTXSYS角色,為應用程序開發(fā)人員分配CTXAPP角色。CTXSYS角色的用戶可啟動Oracle Text服務器,并執(zhí)行CTXAPP角色下的所有任務。CTXAPP角色的用戶可創(chuàng)建索引,管理 Oracle Text 數(shù)據(jù)字典,執(zhí)行Oracle Text 查詢,使用 Oracle Text PL/SQL程序包。
Oracle Text的使用步驟歸納起來如下:
(1)建表并裝載文本。如:

(2)配置索引。
(3)建立索引。如:

(4)發(fā)出查詢。如:

(5)索引維護:同步與優(yōu)化
Oracle Text可為不同格式存儲方式的文本文檔配置索引,這些索引的選項組成功能組,被稱為“類”。Oracle Text的主要類包括存儲(Storage)類、數(shù)據(jù)存儲(Datastore)類 、文檔段組(Section Group)類、相關詞表(Wordlist)類、索引集(Index Set)、詞法分析器(Lexer)類、過濾器(Filter)類等。
Ultra Search是Oracle的附加功能模塊,與其它搜索引擎工具的技術構架類似。Ultra Search提供了六種搜索數(shù)據(jù)源,常見的為:
(1)Web源:指由網(wǎng)站發(fā)布更新的內(nèi)容,包括圖片、音頻、視頻等資源。
(2)文件源:指可訪問的機器上所有文檔集,包括word、excel、pdf等各種類型在內(nèi)的多種常見格式的文件。
(3)電子郵件源:指發(fā)送到特定郵件地址的郵件信息。
(4)表源:指來源于數(shù)據(jù)庫表信息的數(shù)據(jù)源,可建立多個任意新表源。
Ultra Search是為用戶提供友好界面的搜索工具,與Oracle Text有相同的公共接口,在聚集信息的索引、轉(zhuǎn)換查詢上增加了專門技術,因此相對于Oracle Text來說,Ultra Search查詢性能質(zhì)量更高,可擴展性更優(yōu)化。Oracle Text與Oracle數(shù)據(jù)庫的高度集成,實現(xiàn)了Ultra Search與動態(tài)數(shù)據(jù)的自由交互。
Ultra Search由3個組件組成:
(1)服務器組件 :包括Ultra Search資料庫、Oracle Text和遠程Crawler。
(2)Crawler :收集信息,并對這些信息建立索引的過程。
(3)中間層組件 :包括Java查詢應用程序接口、JSP查詢應用程序、Java電子郵件應用程序接口和管理工具。
Ultra Search與Oracle Text的高度集成能夠快速便捷的實現(xiàn)全文檢索功能,但是當與應用系統(tǒng)相結(jié)合時中則存在一些不足之處:(1)由于Ultra Search本身是一個應用系統(tǒng),基于oracle的中間件oc4j,而一般的應用系統(tǒng)則基于一些其他的中間件,如Weblogic等;(2)如何能使Ultra Search與應用系統(tǒng)更好的實現(xiàn)兼容,并實現(xiàn)權限控制,是本文討論的重點。本文基于外事系統(tǒng)上對如何實現(xiàn) Ultra Search和Oracle Text的全文檢索功能進行討論與設計。
本文在Oracle組件Ultra Search和Oracle Text的基礎上進行改進,給出了基于大數(shù)據(jù)的外事系統(tǒng)全文檢索的一個簡單快速的實現(xiàn)方式。系統(tǒng)結(jié)構設計,如圖1所示:

圖1 系統(tǒng)結(jié)構圖
外事系統(tǒng)與實現(xiàn)全文檢索功能的Ultra Search和Oracle Text是相對獨立的系統(tǒng),使用不同的中間件 Weblogic和Oracle 的 OC4J。Ultra Search是基于 Oracle Text和 OC4J的一個客戶端程序。在系統(tǒng)中,我們用Oracle Text創(chuàng)建外事系統(tǒng)檢索所需的表源(Table Source)和查詢組(Source Group),每一個業(yè)務數(shù)據(jù)表對應一個 Table Source,同一個模塊功能的Table Source組成一個Source Group,此時生成的Table Source和Source Group保存在Oracle數(shù)據(jù)庫中的wksys.wk$_data_source和wksys.wk$_source_group表中。
在 Ultra Search客戶端程序中可對 wksys.wk$_data_source和wksys.wk$_source_group表進行維護。在建立Table Source時,需要區(qū)分不同格式類型數(shù)據(jù)的索引存儲方式,如VARCHAR2、CLOB數(shù)據(jù)對應的索引類型Plain Text,BLOB數(shù)據(jù)對應的索引類型為Binary等。
由于應用系統(tǒng)中需要檢索的業(yè)務表與字段數(shù)量可能會比較多,手工建立這些table source與group會占用開發(fā)人員比較多的時間,為了提高開發(fā)效率,本文用sql腳本建立table source與table group。


(1)系統(tǒng)中針對每個字段建立索引,例如:'zh','BINARY',''為創(chuàng)建 Table Source的所有參數(shù),CASE_ATTACH_BL_ATTACH_CONTENT為Table Source名稱,oa為對其創(chuàng)建索引的表空間名稱,CASE_ATTACH為創(chuàng)建索引的表源,BL_ATTACH_CONTENT為創(chuàng)建索引的字段,NM_ATTACH_ID 為主鍵名稱,ST_ATTACH_NAME為檢索結(jié)果顯示的標題字段。當腳本準備完全后,通過執(zhí)行wd_create_datasource來創(chuàng)建所有的table source。
(2)同一模塊作為一個查詢組,例如:

(3)制定檢索方案:當Table Source與Source Group創(chuàng)建后,制定檢索方案,由于應用系統(tǒng)用戶比較多,如在辦公時間創(chuàng)建索引,可能會導致數(shù)據(jù)庫性能下降,因此創(chuàng)建索引并不是同步的,在第一次創(chuàng)建索引之后,我們選擇在每天19:00點之后開始增量索引。當索引創(chuàng)建完就可以在查詢頁面對系統(tǒng)進行檢索了。
索引創(chuàng)建完成后,可在Ultra Search的檢索頁面對系統(tǒng)進行檢索,但此時的檢索結(jié)果沒有任何權限的判斷,針對外事系統(tǒng)的業(yè)務需求,每個處室只可查詢自己處室的數(shù)據(jù),各處室有權限的模塊也不同,具有特殊角色的人員除外(如系統(tǒng)管理員)。如何實現(xiàn)對檢索結(jié)果的權限、模塊、角色控制以及,查看檢索結(jié)果的詳情也是本文的一個難點。
本文給出了一個解決方式,如圖2所示:

圖2 檢索流程圖
用戶在外事系統(tǒng)門戶中的檢索流程如上圖所示,主要的涉及的業(yè)務表如下:
(1)創(chuàng)建模塊與查詢組對應關系表,如下:

檢索結(jié)果中只能顯示查詢用戶所擁有模塊的數(shù)據(jù)。當用戶從應用系統(tǒng)門戶中進行檢索時,首先在后臺代碼中拿到該用戶的所有模塊MODULE_ID,將其組裝成一個結(jié)果集傳遞到Ultra Search的系統(tǒng)中,通過MODULE_ID集合找到所對應的所有的 GROUP_ID,針對這些查詢組進行檢索,從而實現(xiàn)了用戶的模塊權限的控制。
(2)創(chuàng)建url模板與目標action對應關系表,如下:

用戶所擁有模塊的數(shù)據(jù)不一定都有查看權限,如何屏蔽掉那些沒有查看權限的數(shù)據(jù),是該系統(tǒng)的一個最大難點。在建立Table Source時,參數(shù)pv_value記錄的是檢索結(jié)果中用于顯示的 Url鏈接,通過此鏈接可打開數(shù)據(jù)詳情頁面。url中記錄的數(shù)據(jù)主鍵id、標題字段、類型字段等其他信息,通過ULTRA_URL_MAP_ACTION表,在點擊檢索結(jié)果的標題時,首先跳轉(zhuǎn)到應用系統(tǒng)中,獲取url 的鏈接,從中拆分出 action 作 為 ORIGINAL_ACTION, 通 過ORIGINAL_ACTION 找 到 PERM_ACTION, 在PERM_ACTION中,將核對用戶是否有該數(shù)據(jù)的查看權限,如果有則通過ORIGINAL_ACTION查看,否則顯示“無權限查看!”。系統(tǒng)中會存在不同類型的業(yè)務數(shù)據(jù)放在同一個業(yè)務表中,需要根據(jù) URL_TYPE找到不同的TARGET_ACTION。
由于Ultra Search檢索中的標題字段拿不到,把業(yè)務表中的標題字段放在檢索結(jié)果的url中,在檢索結(jié)果頁面將其拆分出來作為標題字段即可達到理想的效果。檢索結(jié)果頁面中信息來源顯示的都是英文的查詢組名稱,用戶體驗性不是太好,因此我們通過GROUP_ID 在ultra_module_map_group表中找到對應的 MODULE_NAME作為來源顯示在檢索結(jié)果頁面中。
檢索頁面的使用方式與搜索引擎網(wǎng)站的檢索操作方式習慣相似。檢索結(jié)果中暫時排除格式為圖片或者掃描版的數(shù)據(jù)信息。多個檢索關鍵字可由“+”、“-”、空格、雙引號等特殊符號組合。“+”、“-”號必須為英文輸入法。“+”代表必須包含;“-”代表不包含;空格代表“或”等。如果查詢的詞語中間包含空格,查詢時需要加引號。
本文以外事系統(tǒng)為例,介紹了基于Ultra Search與Oracle Text實現(xiàn)全文檢索的一種快速、高效的解決方案。在不用改變原有應用系統(tǒng)的基礎上,獨立實現(xiàn)全文檢索,大大減少了應用系統(tǒng)風險。解決了因不同的中間件帶來了用戶權限與模塊控制的難題,同時也提高了系統(tǒng)集成的靈活性和可擴展性,實現(xiàn)了更好的業(yè)務過程控制,提高了用戶檢索的效率和速度,滿足了客戶的業(yè)務需求。
[1]Oracle(R) Text Application Developer's Guide 10g Release 1 (10.1)[C][Part Number B10729-01].
[2]Oracle Text-An Oracle Technical [M]White Pater 2001.
[3]Oracle Text Reference Book 2001.
[4]Jie Lu;Jamie Callan User Modeling for Full-Text Federated Search in Peer-to-peer [M]Networks 2006
[5]范鵬.基于Oracle Text的信息系統(tǒng)資料庫全文檢索技術, [J]《通信與計算技術》,2006年第2期
[6]蒙輝;陳燕 Orade Text技術在復雜結(jié)構數(shù)據(jù)庫中的應用 [期刊論文]-[J]計算機技術與發(fā)展2007(04)
[7]熊志輝.王德鑫.王煒.張茂軍 基于Oracle的多權限多格式文檔組織與檢索系統(tǒng) [期刊論文]-[J]計算機應用2008(9)
[8]李尚初.Oracle的全文檢索技術, [J]哈爾濱師范大學自然科學學報,2009年第4期
[9]羅玉梅.Oracle全文檢索技術的應用, [J]電子商務,2010年第8期