熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle9i的全文檢索技術

2013-11-13 22:11:46  來源: Oracle 

  Oracle一直致力於全文檢索技術的研究當Oraclei Rlease發布之時Oracle數據庫的全文檢索技術已經非常完美Oracle Text使Oraclei具備了強大的文本檢索能力和智能化的文本管理能力Oracle Text是Oraclei采用的新名稱在Oracle/i中它被稱作Oracle interMedia Text在Oracle以前它的名稱是Oracle ConText Cartridge使用Oraclei和Oracle Text可以方便而有效地利用標准的SQL工具來構建基於文本的新的開發工具或對現有應用程序進行擴展應用程序開發人員可以在任何使用文本的Oracle數據庫應用程序中充分利用Oracle Text搜索應用范圍可以是現有應用程序中可搜索的注釋字段也可是實現涉及多種文檔格式和復雜搜索標准的大型文檔管理系統Oracle Text支持Oracle數據庫所支持的大多數語言的基本全文搜索功能本文將介紹如何使用Oraclei的全文檢索技術來為自己的應用提供一個優秀的解決方案
  
   Oracle Text的體系架構
  下圖是Oracle Text的體系架構
  

  
Oracle Text的體系架構

  
  以上面的體系架構圖為基礎Oracle Text 索引文檔時所使用的主要邏輯步驟如下
  
  ()數據存儲邏輯搜索表的所有行並讀取列中的數據通常這只是列數據但有些數據存儲使用列數據作為文檔數據的指針例如URL_DATASTORE 將列數據作為 URL 使用
  
  ()過濾器提取文檔數據並將其轉換為文本表示方式存儲二進制文檔 (如 Word 或 Acrobat 文件) 時需要這樣做過濾器的輸出不必是純文本格式 它可以是 XML 或 HTML 之類的文本格式
  
  ()分段器提取過濾器的輸出信息並將其轉換為純文本包括 XML 和 HTML 在內的不同文本格式有不同的分段器轉換為純文本涉及檢測重要文檔段標記移去不可見的信息和文本重新格式化
  
  ()詞法分析器提取分段器中的純文本並將其拆分為不連續的標記既存在空白字符分隔語言使用的詞法分析器也存在分段復雜的亞洲語言使用的專門詞法分析器
  
  ()索引引擎提取詞法分析器中的所有標記文檔段在分段器中的偏移量以及被稱為非索引字的低信息含量字列表並構建反向索引倒排索引存儲標記和含有這些標記的文檔
   簡單的示例
  這裡先給出一個簡單示例說利用Oracle Text實現全文檢索的方法與步驟在後面在進行具體的說明Orcalei提供了Oracle Text Manager可以簡化許多工作所有在Oracle Text Manager中完成的工作都可以在通過PL/SQL來實現要使用Oracle Text必須具有CTXAPP角色或者是CTXSYS用戶Oracle Text為系統管理員提供CTXSYS用戶為應用程序開發人員提供CTXAPP角色
  
  CTXSYS用戶可執行以下任務啟動Oracle Text服務器執行CTXAPP角色的所有任務
  具有CTXAPP角色的用戶可執行以下任務 創建索引管理 Oracle Text 數據字典包括創建和刪除首選項進行Oracle Text 查詢使用 Oracle Text PL/SQL程序包
  
  使用Oracle Text的步驟
  
  ()創建表來保存某些文檔該示例使用一個主關鍵字列來標識每個文檔使用一個小的VARCHAR列來保存每個文檔
  
  CREATE TABLE docs (id NUMBER PRIMARY KEY text VACHAR());
  
  ()將兩個示例文檔置入該表
  
  INSERT INTO docs VALUES (the first doc)
  INSERT INTO docs VALUES (the second doc)
  COMMIT
  
  ()使用Oracle Text Manager來創建和修改首選項首選項將與索引相關聯
  
  ()使用Oracle Text Manager創建文本索引另外可以輸入以下使用默認首選項的 SQL 語句
  
  CREATE INDEX doc_index ON docs(text) INDEXTYPE IS CTXSYSCONTEXT;
  
  ()使用 CONTAINS 函數發出基於內容的文檔查詢例如
  
  SELECT id FROM docs WHERE CONTAINS (text first) > ;
  
  這將在文本列包含單詞 first (即文檔) 的 docs 中查找所有行語句中的>部分是有效的Oracle SQL所必需的Oracle SQL不支持函數的布爾返回值
  
  以上只是一個簡單的示例旨在給出使用Oracle Text建立全文索引的完整步驟歸納起來如下
  
  ()建表並裝載文本(包含帶有需要檢索的文本字段)
  
  ()配置索引
  
  ()建立索引
  
  ()發出查詢
  
  ()索引維護同步與優化(將在後面介紹)
  
   文本裝載
  要實現文本的全文檢索首先必須把正確的文本加載到數據庫表中默認的建立索引行為要求將文檔裝載在文本列中盡管可以用其它方式 (包括文件系統和 URL 形式)存儲文檔 (在數據存儲選項進行設置)默認情況下系統應該將文檔裝載在文本列中文本列可以是VARCHARCLOBBLOBCHAR或BFILE注意只有在將Oracle系統移植到Oracle的情況下才支持用LONG和LONG RAW 這兩個相反的列類型存儲文本不能為列類型NCLOBDATE和NUMBER建立索引
  
  關於文檔格式因為系統能為包括HTMLPDFMicrosoft Word和純文本在內的大多數文檔格式建立索引可以將其中的任何文檔類型裝載到文本列中(在過濾器選項中設置)有關所支持的文檔格式的詳細信息可以參閱Oracle Text Users Guide and Reference 中的附錄Supported Filter Formats
  
  裝載方法主要有以下幾種
  
  ()SQL INSERT 語句
  
  ()ctxload 可執行文件
  
  ()SQL*Loader
  
  ()從 BFILE 中裝載 LOB 的 DBMS_LOBLOADFROMFILE() PL/SQL 過程
  
  ()Oracle Call Interface
  
   為文本建立索引
  文本裝入文本列後就可以創建Oracle Text索引文檔以許多不同方案格式和語言存儲因此每個 Oracle Text 索引有許多需要設置的選項以針對特定情況配置索引創建索引時Oracle Text可使用若干個默認值但在大多數情況下要求用戶通過指定首選項來配置索引
  
  每個索引的許多選項組成功能組稱為每個類集中體現配置的某一方面可以認為這些類就是與文檔數據庫有關的一些問題例如數據存儲過濾器詞法分析器相關詞表存儲等
  
  每個類具有許多預定義的行為稱之為對象每個對象是類問題可能具有的答案並且大多數對象都包含有屬性通過屬性來定制對象從而使對索引的配置更加多變以適應於不同的應用
  
  ()存儲(Storage)類
  
  存儲類指定構成Oracle Text索引的數據庫表和索引的表空間參數和創建參數它僅有一個基本對象BASIC_STORAGE其屬性包括I_Index_ClauseI_Table_ClauseK_Table_ClauseN_Table_ClauseP_Table_ClauseR_Table_Clause
  
  ()數據存儲(Datastore)類
  
  數據存儲關於列中存儲文本的位置和其他信息默認情況下文本直接存儲到列中表中的每行都表示一個單獨的完整文檔其他數據存儲位置包括存儲在單獨文件中或以其 URL 標識的 Web 頁上七個基本對象包括Default_DatastoreDetail_DatastoreDirect_DatastoreFile_DatastoreMulti_Column_Datastore URL_DatastoreUser_Datastore
  
  ()文檔段組(Section Group)類
  
  文檔段組是用於指定一組文檔段的對象必須先定義文檔段然後才能使用索引通過 WITHIN 運算符在文檔段內進行查詢文檔段定義為文檔段組的一部分包含七個基本對象AUTO_SECTION_GROUPBASIC_SECTION_GROUPHTML_SECTION_GROUPNEWS_SECTION_GROUPNULL_SECTION_GROUPXML_SECTION_GROUPPATH_SECTION_GROUP
  
  ()相關詞表(Wordlist)類
  
  相關詞表標識用於索引的詞干和模糊匹配查詢選項的語言只有一個基本對象BASIC_WORDLIST其屬性有Fuzzy_MatchFuzzy_NumresultsFuzzy_ScoreStemmerSubstring_IndexWildcard_MaxtermsPrefix_IndexPrefix_Max_LengthPrefix_Min_Length
  
  ()索引集(Index Set)
  
  索引集是一個或多個Oracle 索引 (不是Oracle Text索引) 的集合用於創建 CTXCAT類型的Oracle Text索引只有一個基本對象BASIC_INDEX_SET
  
  ()詞法分析器(Lexer)類
  
  詞法分析器類標識文本使用的語言還確定在文本中如何標識標記默認的詞法分析器是英語或其他西歐語言用空格標准標點和非字母數字字符標識標記同時禁用大小寫包含個基本對象BASIC_LEXERCHINESE_LEXERCHINESE_VGRAM_LEXERJAPANESE_LEXERJAPANESE_VGRAM_LEXERKOREAN_LEXERKOREAN__MORPH_ LEXERMULTI_LEXER
  
  ()過濾器(Filter)類
  
  過濾器確定如何過濾文本以建立索引可以使用過濾器對文字處理器處理的文檔格式化的文檔純文本和 HTML 文檔建立索引包括個基本對象CHARSET_FILTERINSO_FILTER INSONULL_FILTERPROCEDURE_FILTERUSER_FILTER
  
  ()非索引字表(Stoplist)類
  
  非索引字表類是用以指定一組不編入索引的單詞 (稱為非索引字)有兩個基本對象BASIC_STOPLIST (一種語言中的所有非索引字) MULTI_STOPLIST (包含多種語言中的非索引字的多語言非索引字表)
  
   查詢
  建立了索引就可以使用 SELECT 語句中的 CONTAINS 運算符發出文本查詢使用 CONTAINS 可以進
From:http://tw.wingwit.com/Article/program/Oracle/201311/18440.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.