資源描述:
《Oracle的全文檢索技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、歡迎交流:wsf111@sina.com或seer@vip.163.comOracle的全文檢索技術(shù)Oracle一直致力于全文檢索技術(shù)的研究,當(dāng)Oracle9iRlease2發(fā)布之時(shí),Oracle數(shù)據(jù)庫的全文檢索技術(shù)已經(jīng)非常完美,OracleText使Oracle9i具備了強(qiáng)大的文本檢索能力和智能化的文本管理能力。OracleText是Oracle9i采用的新名稱,在Oracle8/8i中它被稱作OracleinterMediaText。使用OracleText,可以方便而有效地利用標(biāo)準(zhǔn)的SQL工
2、具來構(gòu)建基于文本的新的開發(fā)工具或?qū)ΜF(xiàn)有應(yīng)用程序進(jìn)行擴(kuò)展。應(yīng)用程序開發(fā)人員可以在任何使用文本的Oracle數(shù)據(jù)庫應(yīng)用程序中充分利用OracleText搜索,應(yīng)用范圍可以是現(xiàn)有應(yīng)用程序中可搜索的注釋字段,也可是實(shí)現(xiàn)涉及多種文檔格式和復(fù)雜搜索標(biāo)準(zhǔn)的大型文檔管理系統(tǒng)。OracleText支持Oracle數(shù)據(jù)庫所支持的大多數(shù)語言的基本全文搜索功能。雖然大多數(shù)大型數(shù)據(jù)庫都支持全文檢索,但Oracle在這方面無疑是最出色的。Oracle能搜索多種格式的文檔,如Word,Execl,PowerPoint,Html
3、,PDF等等。但在使用中也發(fā)現(xiàn)有遺憾的地方,OracleText無論使用何種過濾器(INSO_FILTER或NULL_FILTER)及何種詞法分析器(BASIC_LEXER,CHINESE_VGRAM_LEXER還是CHINESE_LEXER)都不能檢索出中文內(nèi)容的文本文檔(TXT,RTF)。1OracleText的體系架構(gòu)下圖是OracleText的體系架構(gòu):圖1OracleText的體系架構(gòu)OracleText索引文檔時(shí)所使用的主要邏輯步驟如下: ?。?)數(shù)據(jù)存儲(chǔ)邏輯搜索表的所有行,并讀取列中
4、的數(shù)據(jù)。通常,這只是列數(shù)據(jù),但有些數(shù)據(jù)存儲(chǔ)使用列數(shù)據(jù)作為文檔數(shù)據(jù)的指針。例如,URL_DATASTORE將列數(shù)據(jù)作為URL使用。如果對(duì)本地文件進(jìn)行檢索,只要指定DATASTORE中FILE_DATASTORE參數(shù)為文件的路徑即可。歡迎交流:wsf111@sina.com或seer@vip.163.com (2)過濾器提取文檔數(shù)據(jù)并將其轉(zhuǎn)換為文本表示方式。存儲(chǔ)二進(jìn)制文檔(如Word或Acrobat文件)時(shí)需要這樣做。過濾器的輸出不必是純文本格式--它可以是XML或HTML之類的文本格式?! 。?)
5、分段器提取過濾器的輸出信息,并將其轉(zhuǎn)換為純文本。包括XML和HTML在內(nèi)的不同文本格式有不同的分段器。轉(zhuǎn)換為純文本涉及檢測(cè)重要文檔段標(biāo)記、移去不可見的信息和文本重新格式化?! 。?)詞法分析器提取分段器中的純文本,并將其拆分為不連續(xù)的標(biāo)記。既存在空白字符分隔語言使用的詞法分析器,也存在分段復(fù)雜的亞洲語言使用的專門詞法分析器?! 。?)索引引擎提取詞法分析器中的所有標(biāo)記、文檔段在分段器中的偏移量以及被稱為非索引字的低信息含量字列表,并構(gòu)建反向索引。倒排索引存儲(chǔ)標(biāo)記和含有這些標(biāo)記的文檔。歸納起來如下:
6、 (1)建表并裝載文本(包含帶有需要檢索的文本字段) ?。?)配置索引 ?。?)建立索引 (4)發(fā)出查詢 ?。?)索引維護(hù):同步與優(yōu)化(將在后面介紹)u文本裝載 要實(shí)現(xiàn)文本的全文檢索首先必須把正確的文本加載到數(shù)據(jù)庫表中,默認(rèn)的建立索引行為要求將文檔裝載在文本列中,盡管可以用其它方式(包括文件系統(tǒng)和URL形式)存儲(chǔ)文檔(在"數(shù)據(jù)存儲(chǔ)"選項(xiàng)進(jìn)行設(shè)置)。默認(rèn)情況下,系統(tǒng)應(yīng)該將文檔裝載在文本列中。文本列可以是VARCHAR2、CLOB、BLOB、CHAR或BFILE。注意,只有在將Oracle7系統(tǒng)
7、移植到Oracle8的情況下才支持用LONG和LONGRAW這兩個(gè)相反的列類型存儲(chǔ)文本。不能為列類型NCLOB、DATE和NUMBER建立索引。 關(guān)于文檔格式,因?yàn)橄到y(tǒng)能為包括HTML、PDF、MicrosoftWord和純文本在內(nèi)的大多數(shù)文檔格式建立索引,可以將其中的任何文檔類型裝載到文本列中(在"過濾器"選項(xiàng)中設(shè)置)。有關(guān)所支持的文檔格式的詳細(xì)信息,可以參閱OracleTextUser'sGuideandReference中的附錄"SupportedFilterFormats"?! ⊙b載方法
8、主要有以下幾種:歡迎交流:wsf111@sina.com或seer@vip.163.com ?。?)SQLINSERT語句 (2)ctxload可執(zhí)行文件 ?。?)SQL*Loader ?。?)從BFILE中裝載LOB的DBMS_LOB.LOADFROMFILE()PL/SQL過程 (5)OracleCallInterfaceu建立索引 文本裝入文本列后,就可以創(chuàng)建OracleText索引。文檔以許多不同方案、格式和語言存儲(chǔ)。因此,每個(gè)OracleText索引有許多需要設(shè)置的