李瑞麗,錢 皓,黃以凱
隨著現(xiàn)代信息科技的不斷發(fā)展,如何較快較好的實(shí)現(xiàn)全文檢索已成為比較熱門的話題。全文檢索是指將文件中所有的文本與檢索的關(guān)鍵字進(jìn)行匹配的一個資料檢索方法。全文檢索技術(shù)是指通過關(guān)鍵字將存儲在信息系統(tǒng)數(shù)據(jù)庫中,包括該關(guān)鍵字的所有記錄查找出來的檢索技術(shù),可以獲得信息文本中的所有相關(guān)章、段、節(jié)、句、詞等信息,同時(shí)也可以對信息進(jìn)行各種統(tǒng)計(jì)和分析。
本文將介紹如何使用 Oracle的全文檢索技術(shù)提供一個優(yōu)秀快速的解決方案。在已有的信息系統(tǒng)中,利用Oracle text和Ultra Search實(shí)現(xiàn)對不同格式數(shù)據(jù)源,尤其是以LOB類型(word、excel、pdf等二進(jìn)制格式的文件)保存的數(shù)據(jù)的全文檢索,并且解決了因系統(tǒng)中間件和Ultra Search中間件不同帶來的權(quán)限控制問題。
外事一體化綜合管理系統(tǒng)(課題編號:09511503500,以下簡稱外事系統(tǒng))是由上海市護(hù)照簽證受理中心、萬達(dá)信息股份有限公司共同承擔(dān)的研發(fā)課題。外事系統(tǒng)設(shè)計(jì)開發(fā)了諸如來華簽證、領(lǐng)事認(rèn)證、辦公審批等20多個子系統(tǒng)。各個子系統(tǒng)既有獨(dú)立性,也有關(guān)聯(lián)性,業(yè)務(wù)數(shù)據(jù)表近200張,有些數(shù)據(jù)表的數(shù)據(jù)達(dá)到數(shù)十萬級,且各種格式的附件存儲在LOB字段中,要求系統(tǒng)能夠提供準(zhǔn)確而快捷的全文檢索功能。因此如何實(shí)現(xiàn)基于大數(shù)據(jù)量的全文檢索是外事系統(tǒng)的一大技術(shù)難題。
Oracle text是Oracle10g的組件,基于后臺數(shù)據(jù)庫,是一種強(qiáng)大的檢索工具,搜索范圍可以是多種文本格式的數(shù)據(jù)來源,可對Oracle數(shù)據(jù)支持的多種語言實(shí)現(xiàn)全文檢索功能。
Oracle Text實(shí)現(xiàn)全文檢索的邏輯步驟主要包括如下:
(1)搜索檢索目標(biāo)數(shù)據(jù)庫中的所有表源,并讀取所有表源列中的數(shù)據(jù)。
(2)通過過濾器過濾文檔數(shù)據(jù)并將文檔數(shù)據(jù)轉(zhuǎn)換為文本表示方式。
(3)通過分段器提取過濾器的輸出的文檔信息,并將該文檔信息轉(zhuǎn)換為純文本。
(4)通過詞法分析器提取分段器中輸出的純文本信息,并將該純文本信息拆分為不連續(xù)的標(biāo)記。
(5)通過索引引擎提取詞法分析器中的輸出的所有不連續(xù)的標(biāo)記,并構(gòu)建索引。
Oracle Text為系統(tǒng)管理員分配CTXSYS角色,為應(yīng)用程序開發(fā)人員分配CTXAPP角色。CTXSYS角色的用戶可啟動Oracle Text服務(wù)器,并執(zhí)行CTXAPP角色下的所有任務(wù)。CTXAPP角色的用戶可創(chuàng)建索引,管理 Oracle Text 數(shù)據(jù)字典,執(zhí)行Oracle Text 查詢,使用 Oracle Text PL/SQL程序包。
Oracle Text的使用步驟歸納起來如下:
(1)建表并裝載文本。如:
(2)配置索引。
(3)建立索引。如:
(4)發(fā)出查詢。如:
(5)索引維護(hù):同步與優(yōu)化
Oracle Text可為不同格式存儲方式的文本文檔配置索引,這些索引的選項(xiàng)組成功能組,被稱為“類”。Oracle Text的主要類包括存儲(Storage)類、數(shù)據(jù)存儲(Datastore)類 、文檔段組(Section Group)類、相關(guān)詞表(Wordlist)類、索引集(Index Set)、詞法分析器(Lexer)類、過濾器(Filter)類等。
Ultra Search是Oracle的附加功能模塊,與其它搜索引擎工具的技術(shù)構(gòu)架類似。Ultra Search提供了六種搜索數(shù)據(jù)源,常見的為:
(1)Web源:指由網(wǎng)站發(fā)布更新的內(nèi)容,包括圖片、音頻、視頻等資源。
(2)文件源:指可訪問的機(jī)器上所有文檔集,包括word、excel、pdf等各種類型在內(nèi)的多種常見格式的文件。
(3)電子郵件源:指發(fā)送到特定郵件地址的郵件信息。
(4)表源:指來源于數(shù)據(jù)庫表信息的數(shù)據(jù)源,可建立多個任意新表源。
Ultra Search是為用戶提供友好界面的搜索工具,與Oracle Text有相同的公共接口,在聚集信息的索引、轉(zhuǎn)換查詢上增加了專門技術(shù),因此相對于Oracle Text來說,Ultra Search查詢性能質(zhì)量更高,可擴(kuò)展性更優(yōu)化。Oracle Text與Oracle數(shù)據(jù)庫的高度集成,實(shí)現(xiàn)了Ultra Search與動態(tài)數(shù)據(jù)的自由交互。
Ultra Search由3個組件組成:
(1)服務(wù)器組件 :包括Ultra Search資料庫、Oracle Text和遠(yuǎn)程Crawler。
(2)Crawler :收集信息,并對這些信息建立索引的過程。
(3)中間層組件 :包括Java查詢應(yīng)用程序接口、JSP查詢應(yīng)用程序、Java電子郵件應(yīng)用程序接口和管理工具。
Ultra Search與Oracle Text的高度集成能夠快速便捷的實(shí)現(xiàn)全文檢索功能,但是當(dāng)與應(yīng)用系統(tǒng)相結(jié)合時(shí)中則存在一些不足之處:(1)由于Ultra Search本身是一個應(yīng)用系統(tǒng),基于oracle的中間件oc4j,而一般的應(yīng)用系統(tǒng)則基于一些其他的中間件,如Weblogic等;(2)如何能使Ultra Search與應(yīng)用系統(tǒng)更好的實(shí)現(xiàn)兼容,并實(shí)現(xiàn)權(quán)限控制,是本文討論的重點(diǎn)。本文基于外事系統(tǒng)上對如何實(shí)現(xiàn) Ultra Search和Oracle Text的全文檢索功能進(jìn)行討論與設(shè)計(jì)。
本文在Oracle組件Ultra Search和Oracle Text的基礎(chǔ)上進(jìn)行改進(jìn),給出了基于大數(shù)據(jù)的外事系統(tǒng)全文檢索的一個簡單快速的實(shí)現(xiàn)方式。系統(tǒng)結(jié)構(gòu)設(shè)計(jì),如圖1所示:
圖1 系統(tǒng)結(jié)構(gòu)圖
外事系統(tǒng)與實(shí)現(xiàn)全文檢索功能的Ultra Search和Oracle Text是相對獨(dú)立的系統(tǒng),使用不同的中間件 Weblogic和Oracle 的 OC4J。Ultra Search是基于 Oracle Text和 OC4J的一個客戶端程序。在系統(tǒng)中,我們用Oracle Text創(chuàng)建外事系統(tǒng)檢索所需的表源(Table Source)和查詢組(Source Group),每一個業(yè)務(wù)數(shù)據(jù)表對應(yīng)一個 Table Source,同一個模塊功能的Table Source組成一個Source Group,此時(shí)生成的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表進(jìn)行維護(hù)。在建立Table Source時(shí),需要區(qū)分不同格式類型數(shù)據(jù)的索引存儲方式,如VARCHAR2、CLOB數(shù)據(jù)對應(yīng)的索引類型Plain Text,BLOB數(shù)據(jù)對應(yīng)的索引類型為Binary等。
由于應(yīng)用系統(tǒng)中需要檢索的業(yè)務(wù)表與字段數(shù)量可能會比較多,手工建立這些table source與group會占用開發(fā)人員比較多的時(shí)間,為了提高開發(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é)果顯示的標(biāo)題字段。當(dāng)腳本準(zhǔn)備完全后,通過執(zhí)行wd_create_datasource來創(chuàng)建所有的table source。
(2)同一模塊作為一個查詢組,例如:
(3)制定檢索方案:當(dāng)Table Source與Source Group創(chuàng)建后,制定檢索方案,由于應(yīng)用系統(tǒng)用戶比較多,如在辦公時(shí)間創(chuàng)建索引,可能會導(dǎo)致數(shù)據(jù)庫性能下降,因此創(chuàng)建索引并不是同步的,在第一次創(chuàng)建索引之后,我們選擇在每天19:00點(diǎn)之后開始增量索引。當(dāng)索引創(chuàng)建完就可以在查詢頁面對系統(tǒng)進(jìn)行檢索了。
索引創(chuàng)建完成后,可在Ultra Search的檢索頁面對系統(tǒng)進(jìn)行檢索,但此時(shí)的檢索結(jié)果沒有任何權(quán)限的判斷,針對外事系統(tǒng)的業(yè)務(wù)需求,每個處室只可查詢自己處室的數(shù)據(jù),各處室有權(quán)限的模塊也不同,具有特殊角色的人員除外(如系統(tǒng)管理員)。如何實(shí)現(xiàn)對檢索結(jié)果的權(quán)限、模塊、角色控制以及,查看檢索結(jié)果的詳情也是本文的一個難點(diǎn)。
本文給出了一個解決方式,如圖2所示:
圖2 檢索流程圖
用戶在外事系統(tǒng)門戶中的檢索流程如上圖所示,主要的涉及的業(yè)務(wù)表如下:
(1)創(chuàng)建模塊與查詢組對應(yīng)關(guān)系表,如下:
檢索結(jié)果中只能顯示查詢用戶所擁有模塊的數(shù)據(jù)。當(dāng)用戶從應(yīng)用系統(tǒng)門戶中進(jìn)行檢索時(shí),首先在后臺代碼中拿到該用戶的所有模塊MODULE_ID,將其組裝成一個結(jié)果集傳遞到Ultra Search的系統(tǒng)中,通過MODULE_ID集合找到所對應(yīng)的所有的 GROUP_ID,針對這些查詢組進(jìn)行檢索,從而實(shí)現(xiàn)了用戶的模塊權(quán)限的控制。
(2)創(chuàng)建url模板與目標(biāo)action對應(yīng)關(guān)系表,如下:
用戶所擁有模塊的數(shù)據(jù)不一定都有查看權(quán)限,如何屏蔽掉那些沒有查看權(quán)限的數(shù)據(jù),是該系統(tǒng)的一個最大難點(diǎn)。在建立Table Source時(shí),參數(shù)pv_value記錄的是檢索結(jié)果中用于顯示的 Url鏈接,通過此鏈接可打開數(shù)據(jù)詳情頁面。url中記錄的數(shù)據(jù)主鍵id、標(biāo)題字段、類型字段等其他信息,通過ULTRA_URL_MAP_ACTION表,在點(diǎn)擊檢索結(jié)果的標(biāo)題時(shí),首先跳轉(zhuǎn)到應(yīng)用系統(tǒng)中,獲取url 的鏈接,從中拆分出 action 作 為 ORIGINAL_ACTION, 通 過ORIGINAL_ACTION 找 到 PERM_ACTION, 在PERM_ACTION中,將核對用戶是否有該數(shù)據(jù)的查看權(quán)限,如果有則通過ORIGINAL_ACTION查看,否則顯示“無權(quán)限查看!”。系統(tǒng)中會存在不同類型的業(yè)務(wù)數(shù)據(jù)放在同一個業(yè)務(wù)表中,需要根據(jù) URL_TYPE找到不同的TARGET_ACTION。
由于Ultra Search檢索中的標(biāo)題字段拿不到,把業(yè)務(wù)表中的標(biāo)題字段放在檢索結(jié)果的url中,在檢索結(jié)果頁面將其拆分出來作為標(biāo)題字段即可達(dá)到理想的效果。檢索結(jié)果頁面中信息來源顯示的都是英文的查詢組名稱,用戶體驗(yàn)性不是太好,因此我們通過GROUP_ID 在ultra_module_map_group表中找到對應(yīng)的 MODULE_NAME作為來源顯示在檢索結(jié)果頁面中。
檢索頁面的使用方式與搜索引擎網(wǎng)站的檢索操作方式習(xí)慣相似。檢索結(jié)果中暫時(shí)排除格式為圖片或者掃描版的數(shù)據(jù)信息。多個檢索關(guān)鍵字可由“+”、“-”、空格、雙引號等特殊符號組合?!?”、“-”號必須為英文輸入法?!?”代表必須包含;“-”代表不包含;空格代表“或”等。如果查詢的詞語中間包含空格,查詢時(shí)需要加引號。
本文以外事系統(tǒng)為例,介紹了基于Ultra Search與Oracle Text實(shí)現(xiàn)全文檢索的一種快速、高效的解決方案。在不用改變原有應(yīng)用系統(tǒng)的基礎(chǔ)上,獨(dú)立實(shí)現(xiàn)全文檢索,大大減少了應(yīng)用系統(tǒng)風(fēng)險(xiǎn)。解決了因不同的中間件帶來了用戶權(quán)限與模塊控制的難題,同時(shí)也提高了系統(tǒng)集成的靈活性和可擴(kuò)展性,實(shí)現(xiàn)了更好的業(yè)務(wù)過程控制,提高了用戶檢索的效率和速度,滿足了客戶的業(yè)務(wù)需求。
[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)資料庫全文檢索技術(shù), [J]《通信與計(jì)算技術(shù)》,2006年第2期
[6]蒙輝;陳燕 Orade Text技術(shù)在復(fù)雜結(jié)構(gòu)數(shù)據(jù)庫中的應(yīng)用 [期刊論文]-[J]計(jì)算機(jī)技術(shù)與發(fā)展2007(04)
[7]熊志輝.王德鑫.王煒.張茂軍 基于Oracle的多權(quán)限多格式文檔組織與檢索系統(tǒng) [期刊論文]-[J]計(jì)算機(jī)應(yīng)用2008(9)
[8]李尚初.Oracle的全文檢索技術(shù), [J]哈爾濱師范大學(xué)自然科學(xué)學(xué)報(bào),2009年第4期
[9]羅玉梅.Oracle全文檢索技術(shù)的應(yīng)用, [J]電子商務(wù),2010年第8期