Oracle的全文檢索技術(shù)_第1頁
Oracle的全文檢索技術(shù)_第2頁
Oracle的全文檢索技術(shù)_第3頁
Oracle的全文檢索技術(shù)_第4頁
Oracle的全文檢索技術(shù)_第5頁
免費預(yù)覽已結(jié)束,剩余6頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Oracle的全文檢索技術(shù)Oracle 一直致力于全文檢索技術(shù)的研究,當(dāng)Oracle9iRlease2發(fā)布之時,Oracle數(shù)據(jù)庫的全文檢索技術(shù)已經(jīng)非常完美,OracleText使Oracle9i具備了強大的文本檢索能力和智能化的文本管理能力。OracleText是Oracle9i采用的新名稱,在Oracle8/8i中它被稱作OracleinterMediaText。使用OracleText ,可以方便而有效地利用標準的SQL工具來構(gòu)建基于文本的新的開發(fā)工具或?qū)ΜF(xiàn)有應(yīng)用程序進行擴展。應(yīng)用程序開發(fā)人員可以在任何使用文本的Oracle數(shù)據(jù)庫應(yīng)用程序中充分利用OracleText搜索,應(yīng)用范圍可以是

2、現(xiàn)有應(yīng)用程序中可搜索的注釋字段,也可是實現(xiàn)涉及多種文檔格式和復(fù)雜搜索標準的大型文檔管理系統(tǒng)。OracleText支持Oracle數(shù)據(jù)庫所支持的大多數(shù)語言的基本全文搜索功能。雖然大多數(shù)大型數(shù)據(jù)庫都支持全文檢索,但Oracle在這方面無疑是最出色的。Oracle能搜索多種格式的文檔,如Word,Execl,PowerPoi nt,Html,PDF等等。但在使用中也發(fā)現(xiàn)有遺憾的地方,OracleText無論使用何種過濾器(INSO_FILTER或NULL_FILTER )及何種 詞法分析器(BASIC_LEXER,CHINESE_VGRAM_LEXER 還是 CHINESE_LEXER )都不能檢

3、索出中文內(nèi)容的文本文檔(TXT,RTF)。1OracleText 的體系架構(gòu)下圖是OracleText的體系架構(gòu):圖1OracleText 的體系架構(gòu)OracleText 索引文檔時所使用的主要邏輯步驟如下:1)數(shù)據(jù)存儲邏輯搜索表的所有行,并讀取列中的數(shù)據(jù)。通常,這只是列數(shù)據(jù),但有些數(shù)據(jù)存儲使用列數(shù)據(jù)作為文檔數(shù)據(jù)的指針。例如,URL_DATASTORE將列數(shù)據(jù)作為URL使用如果對本地文件進行檢索, 只要指定 DATASTORE 中 FILE_DATASTORE 參數(shù)為文件的路徑即可。2)過濾器提取文檔數(shù)據(jù)并將其轉(zhuǎn)換為文本表示方式。存儲二進制文檔(如 Word 或Acrobat 文件)時需要這樣

4、做。過濾器的輸出不必是純文本格式-它可以是 XML 或 HTML 之類的文本格式。3)分段器提取過濾器的輸出信息,并將其轉(zhuǎn)換為純文本。包括XML 和 HTML 在內(nèi)的不同文本格式有不同的分段器。 轉(zhuǎn)換為純文本涉及檢測重要文檔段標記、移去不可見的信息和文本重新格式化4)詞法分析器提取分段器中的純文本,并將其拆分為不連續(xù)的標記。既存在空白字符分隔語言使用的詞法分析器,也存在分段復(fù)雜的亞洲語言使用的專門詞法分析器(5)索引引擎提取詞法分析器中的所有標記、文檔段在分段器中的偏移量以及被稱為非索引字的低信息含量字列表,并構(gòu)建反向索引。倒排索引存儲標記和含有這些標記的文檔。歸納起來如下:(1)建表并裝載文

5、本(包含帶有需要檢索的文本字段)(2)配置索引(3)建立索引(4)發(fā)出查詢(5)索引維護:同步與優(yōu)化(將在后面介紹)文本裝載要實現(xiàn)文本的全文檢索首先必須把正確的文本加載到數(shù)據(jù)庫表中,默認的建立索引 行為要求將文檔裝載在文本列中,盡管可以用其它方式(包括文件系統(tǒng)和 URL 形式 )存儲文檔 (在 數(shù)據(jù)存儲 選項進行設(shè)置 )。默認情況下,系統(tǒng)應(yīng)該將文檔裝載在文本列中。 文本列可以是 VARCHAR2 、CLOB 、BLOB、CHAR 或 BFILE 。注意, 只有在將 Oracle7 系統(tǒng)移植到 Oracle8 的情況下才支持用 LONG 和 LONGRAW 這兩個相反的列類型存 儲文本。不能為列

6、類型 NCLOB 、DATE 和 NUMBER 建立索引。關(guān)于文檔格式,因為系統(tǒng)能為包括HTML 、PDF 、MicrosoftWord和純文本在內(nèi)的大多數(shù)文檔格式建立索引,可以將其中的任何文檔類型裝載到文本列中(在 過濾器 選項中設(shè)置)。有關(guān)所支持的文檔格式的詳細信息,可以參閱 OracleTextUsersGuideandReference 中的附錄 SupportedFilterFormats 。裝載方法主要有以下幾種:(1 ) SQLINSERT 語句(2 ) ctxload 可執(zhí)行文件(3 ) SQL*Loader(4 )從 BFILE 中裝載 LOB 的 DBMS_LOB.LOAD

7、FROMFILE()PL/SQL 過程(5 ) OracleCallInterface建立索引文本裝入文本列后, 就可以創(chuàng)建 OracleText 索引。 文檔以許多不同方案、 格式和語 言存儲。因此,每個 OracleText 索引有許多需要設(shè)置的選項,以針對特定情況配置 索引。創(chuàng)建索引時, OracleText 可使用若干個默認值,但在大多數(shù)情況下要求用戶通 過指定首選項來配置索引。每個索引的許多選項組成功能組,稱為類 ,每個類集中體現(xiàn)配置的某一方面,可以認為這些類就是與文檔數(shù)據(jù)庫有關(guān)的一些問題。例如:數(shù)據(jù)存儲、過濾器、詞法分 析器、相關(guān)詞表、存儲等。每個類具有許多預(yù)定義的行為,稱之為對象

8、。每個對象是類問題可能具有的答案, 并且大多數(shù)對象都包含有屬性。通過屬性來定制對象,從而使對索引的配置更加多變 以適應(yīng)于不同的應(yīng)用。(1 )存儲( Storage )類存儲類指定構(gòu)成 OracleText 索引的數(shù)據(jù)庫表和索引的表空間參數(shù)和創(chuàng)建參數(shù)。 它僅 有一個基本對象: BASIC_STORAGE ,其屬性包括: I_Index_Clause 、I_Table_Clause 、 K_Table_Clause 、 N_Table_Clause 、 P_Table_Clause 、 R_Table_Clause 。(2 )數(shù)據(jù)存儲( Datastore )類 數(shù)據(jù)存儲:關(guān)于列中存儲文本的位置和

9、其他信息。默認情況下,文本直接存儲到列中,表中的每行都表示一個單獨的完整文檔。其他數(shù)據(jù)存儲位置包括存儲在單獨文件中或以其 URL 標識的 Web 頁上。七個基本對象包括: Default_Datastore 、 Detail_Datastore 、Direct_Datastore 、File_Datastore 、Multi_Column_Datastore URL_Datastore 、 User_Datastore ,。(3 )文檔段組( SectionGroup )類 文檔段組是用于指定一組文檔段的對象。必須先定義文檔段,然后才能使用索引通過 WITHIN 運算符在文檔段內(nèi)進行查詢。 文

10、檔段定義為文檔段組的一部分。 包含七個 基 本 對 象 : AUTO_SECTION_GROUP 、 BASIC_SECTION_GROUP 、 HTML_SECTION_GROUP 、NEWS_SECTION_GROUP 、NULL_SECTION_GROUPXML_SECTION_GROUP 、 PATH_SECTION_GROUP(4 )相關(guān)詞表( Wordlist )類 相關(guān)詞表標識用于索引的詞干和模糊匹配查詢選項的語言,只有一個基本對象BASIC_WORDLIST ,其屬性有: Fuzzy_Match 、Fuzzy_Numresults 、Fuzzy_Score 、StemmerSu

11、bstring_IndexWildcard_MaxtermsPrefix_IndexPrefix_Max_Length 、 Prefix_Min_Length 。(5 )索引集( IndexSet )索引集是一個或多個 Oracle 索引 (不是 OracleText 索引 )的集合,用于創(chuàng)建 CTXCAT 類型的 OracleText 索引,只有一個基本對象 BASIC_INDEX_SET 。6 )詞法分析器( Lexer )類詞法分析器類標識文本使用的語言,還確定在文本中如何標識標記。默認的詞法分 析器是英語或其他西歐語言,用空格、標準標點和非字母數(shù)字字符標識標記,同時禁 用大小寫。包含

12、8 個基本對象: BASIC_LEXER 、 CHINESE_LEXER CHINESE_VGRAM_LEXER 、 JAPANESE_LEXER 、 JAPANESE_VGRAM_LEXERKOREAN_LEXER 、 KOREAN_MORPH_LEXER 、 MULTI_LEXER 。(7 )過濾器( Filter )類過濾器確定如何過濾文本以建立索引??梢允褂眠^濾器對文字處理器處理的文檔、格式化的文檔、 純文本和 HTML 文檔建立索引, 包括 5 個基本對象: CHARSET_FILTER 、INSO_FILTERINSO 、NULL_FILTER 、 PROCEDURE_FILTER

13、 、USER_FILTER( 稱為非索引字 )。有兩個基本對象:)、 MULTI_STOPLIST( 包含多種語言中CONTAINS 運算符發(fā)出文本查詢。使ABOUT 查詢。(8 )非索引字表( Stoplist )類 非索引字表類是用以指定一組不編入索引的單詞BASIC_STOPLIST( 一種語言中的所有非索引字 的非索引字的多語言非索引字表)。查詢建立了索引,就可以使用 SELECT 語句中的 用 CONTAINS 可以進行兩種查詢:單詞查詢和5 1 詞查詢示例詞查詢是對輸入到 CONTAINS 運算符中單引號間的精確單詞或短語的查詢。在以 下示例中, 我們將查找文本列中包含 oracl

14、e 一詞的所有文檔。 每行的分值由使用標簽 1 的 SCORE 運算符選定:SELECTSCORE(1)titlefromnewsWHERECONTAINS(text,oracle,1)0; 在查詢表達式中,可以使用 AND 和 OR 等文本運算符來獲取不同結(jié)果。還可以將 結(jié)構(gòu)性謂詞添加到 WHERE 子句中。 可以使用 count(*) 、CTX_QUERY.COUNT_HITS 或 CTX_QUERY.EXPLAIN 來計算查詢的命中 (匹配 ) 數(shù)目。5 2ABOUT 查詢示例在所有語言中, ABOUT 查詢增加了某查詢所返回的相關(guān)文檔的數(shù)目。在英語中, ABOUT 查詢可以使用索引的主

15、題詞組件,該組件在默認情況下創(chuàng)建。這樣,運算符 將根據(jù)查詢的概念返回文檔,而不是僅依據(jù)所指定的精確單詞或短語。例如,以下查 詢將查找文本列中關(guān)于主題 politics 的所有文檔, 而不是僅包含 politics 一詞的文檔: SELECTSCORE(1)titlefromnewsWHERECONTAINS(text,about(politics),1)0 ; 索引維護索引建好后,如果表中的數(shù)據(jù)發(fā)生變化,比如增加或修改了記錄,怎么辦?由于對 表所發(fā)生的任何 DML 語句,都不會自動修改索引,因此,必須定時同步 (sync) 和優(yōu) 化 (optimize) 索引,以正確反映數(shù)據(jù)的變化。在索引建好

16、后,可以在該用戶下查到 Oracle 自動產(chǎn)生了以下幾個表: (假設(shè)索引名為myindex ):DR$myindex$I , DR$myindex$K , DR$myindex$R , DR$myindex$N其中以 I 表最重要,可以查詢一下該表: selecttoken_text,token_countfromDR$myindex$Iwhererownumcreateuserminiidentifiedbymini;SQLalteruserminidefaulttablespaceEXAMPLE;SQLgrantconnect,resourcetomini;SQLgrantctxappto

17、mini;SQLalteruserminidefaultroleall;3. 創(chuàng)建表:用 mini 用戶登錄。SQLcreatetablemytest(tidnumberprimarykey,fnamevarchar2(100),btextBLOB)4. 錄入數(shù)據(jù):用 system 用戶登錄- 創(chuàng)建目錄 ( 數(shù)據(jù)庫服務(wù)器 )SQLcreateorreplacedirectoryBLOB_FILE_DIRasd:test;SQLgrantreadondirectoryBLOB_FILE_DIRtomini;用 mini 用戶登錄- 創(chuàng)建過程CREATEORREPLACEPROCEDUREinse

18、rt_file(TIDnumber,FILENAMEVARCHAR2)ISF_LOBBFILE;B_LOBBLOB;BEGININSERTINTOMYTEST(tid,fname,btext)VALUES(TID,FILENAME,EMPTY_BLOB()RETURNbtextINTOB_LOB;F_LOB:=BFILENAME(BLOB_FILE_DIR,FILENAME);DBMS_LOB.FILEOPEN(F_LOB,DBMS_LOB.FILE_READONLY);DBMS_LOB.LOADFROMFILE(B_LOB,F_LOB,DBMS_LOB.GETLENGTH(F_LOB),1,

19、1);DBMS_LOB.FILECLOSE(F_LOB);COMMIT;END;SQLexecinsert_file(1,test.doc);5. 設(shè)置索引參考項SQLbeginctx_ddl.create_preference(cnlex, CHINESE_VGRAM_LEXER );ctx_ddl.create_preference(mywordlist,BASIC_WORDLIST);ctx_ddl.set_attribute(mywordlist,PREFIX_INDEX,TRUE);ctx_ddl.set_attribute(mywordlist,PREFIX_MIN_LENGTH,

20、1);ctx_ddl.set_attribute(mywordlist,PREFIX_MAX_LENGTH,5); ctx_ddl.set_attribute(mywordlist,SUBSTRING_INDEX,YES);end;(如果數(shù)據(jù)庫的字符集是 UTF8, 建議使用 CHINESE_LEXER 詞法分析器 )- 查看自定義的參考項SQL select *from ctx_user_preferences;6. 創(chuàng)建索引SQLcreateindexidx_mytestonmytest(btext)indextypeisctxsys.contextparameters(DATASTORECTXSYS.DIRECT_DATASTOREFILTERCTXSYS.INSO_FILTERLEXERMINI.CNLEXWORDLISTMINI.MYWORDLIST);(可以使用 ctxcat 索引類型,但好像不支持 BLOB 型)- 查看SQLselec

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論