<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    幫助IT團隊快速構建符合jt808協議部標的基于java技術的GPS和視頻平臺(2379423771@qq.com)

    Oracle的全文檢索技術架構分析

     

    Oracle一直致力于全文檢索技術的研究,當Oracle9i Rlease2發布之時,Oracle數據庫的全文檢索技術已經非常完美,Oracle Text使Oracle9i具備了強大的文本檢索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用的新名稱,在Oracle8/8i中它被稱作Oracle interMedia Text。使用Oracle Text,可以方便而有效地利用標準的SQL工具來構建基于文本的新的開發工具或對現有應用程序進行擴展。應用程序開發人員可以在任何使用文本的Oracle數據庫應用程序中充分利用Oracle Text搜索,應用范圍可以是現有應用程序中可搜索的注釋字段,也可是實現涉及多種文檔格式和復雜搜索標準的大型文檔管理系統。Oracle Text支持Oracle數據庫所支持的大多數語言的基本全文搜索功能。

    雖然大多數大型數據庫都支持全文檢索,但Oracle在這方面無疑是最出色的。Oracle能搜索多種格式的文檔,如Word,Execl,PowerPoint,Html,PDF等等

     

    1 Oracle Text 的體系架構

     

    下圖是 Oracle Text 的體系架構:

    www.tkk7.com/oneeyewolf


      1 Oracle Text 的體系架構

     

    Oracle Text 索引文檔時所使用的主要邏輯步驟如下:

      ( 1 )數據存儲邏輯搜索表的所有行,并讀取列中的數據。通常,這只是列數據,但有些數據存儲使用列數據作為文檔數據的指針。例如, URL_DATASTORE 將列數據作為 URL 使用。如果對本地文件進行檢索,只要指定 DATASTORE FILE_DATASTORE 參數為文件的路徑即可。

      ( 2 )過濾器提取文檔數據并將其轉換為文本表示方式。存儲二進制文檔 ( Word Acrobat 文件 ) 時需要這樣做。過濾器的輸出不必是純文本格式 -- 它可以是 XML HTML 之類的文本格式。

      ( 3 )分段器提取過濾器的輸出信息,并將其轉換為純文本。包括 XML HTML 在內的不同文本格式有不同的分段器。轉換為純文本涉及檢測重要文檔段標記、移去不可見的信息和文本重新格式化。

      ( 4 )詞法分析器提取分段器中的純文本,并將其拆分為不連續的標記。既存在空白字符分隔語言使用的詞法分析器,也存在分段復雜的亞洲語言使用的專門詞法分析器。

      ( 5 )索引引擎提取詞法分析器中的所有標記、文檔段在分段器中的偏移量以及被稱為非索引字的低信息含量字列表,并構建反向索引。倒排索引存儲標記和含有這些標記的文檔。

     

     

    歸納起來如下:

      ( 1 )建表并裝載文本(包含帶有需要檢索的文本字段)

      ( 2 )配置索引

      ( 3 )建立索引

      ( 4 )發出查詢

      ( 5 )索引維護:同步與優化(將在后面介紹)

     

    u       文本裝載

      要實現文本的全文檢索首先必須把正確的文本加載到數據庫表中,默認的建立索引行為要求將文檔裝載在文本列中,盡管可以用其它方式 ( 包括文件系統和 URL 形式 ) 存儲文檔 ( " 數據存儲 " 選項進行設置 ) 。默認情況下,系統應該將文檔裝載在文本列中。文本列可以是 VARCHAR2 CLOB BLOB CHAR BFILE 。注意,只有在將 Oracle7 系統移植到 Oracle8 的情況下才支持用 LONG LONG RAW 這兩個相反的列類型存儲文本。不能為列類型 NCLOB DATE NUMBER 建立索引。

      關于文檔格式,因為系統能為包括 HTML PDF Microsoft Word 和純文本在內的大多數文檔格式建立索引,可以將其中的任何文檔類型裝載到文本列中 ( " 過濾器 " 選項中設置 ) 。有關所支持的文檔格式的詳細信息,可以參閱 Oracle Text User's Guide and Reference 中的附錄 "Supported Filter Formats"

      裝載方法主要有以下幾種:

      ( 1 SQL INSERT 語句

      ( 2 ctxload 可執行文件

      ( 3 SQL*Loader

      ( 4 )從 BFILE 中裝載 LOB DBMS_LOB.LOADFROMFILE() PL/SQL 過程

      ( 5 Oracle Call Interface


    u       建立索引

      文本裝入文本列后,就可以創建 Oracle Text 索引。文檔以許多不同方案、格式和語言存儲。因此,每個 Oracle Text 索引有許多需要設置的選項,以針對特定情況配置索引。創建索引時, Oracle Text 可使用若干個默認值,但在大多數情況下要求用戶通過指定首選項來配置索引。

      每個索引的許多選項組成功能組,稱為 " " ,每個類集中體現配置的某一方面,可以認為這些類就是與文檔數據庫有關的一些問題。例如:數據存儲、過濾器、詞法分析器、相關詞表、存儲等。

      每個類具有許多預定義的行為,稱之為對象。每個對象是類問題可能具有的答案,并且大多數對象都包含有屬性。通過屬性來定制對象,從而使對索引的配置更加多變以適應于不同的應用。

      ( 1 )存儲( Storage )類

      存儲類指定構成 Oracle Text 索引的數據庫表和索引的表空間參數和創建參數。它僅有一個基本對象: BASIC_STORAGE ,其屬性包括: I_Index_Clause I_Table_Clause K_Table_Clause N_Table_Clause P_Table_Clause R_Table_Clause

      ( 2 )數據存儲( Datastore )類

      數據存儲:關于列中存儲文本的位置和其他信息。默認情況下,文本直接存儲到列中,表中的每行都表示一個單獨的完整文檔。其他數據存儲位置包括存儲在單獨文件中或以其 URL 標識的 Web 頁上。七個基本對象包括: Default_Datastore Detail_Datastore Direct_Datastore File_Datastore Multi_Column_Datastore URL_Datastore User_Datastore ,。

      ( 3 )文檔段組( Section Group )類

      文檔段組是用于指定一組文檔段的對象。必須先定義文檔段,然后才能使用索引通過 WITHIN 運算符在文檔段內進行查詢。文檔段定義為文檔段組的一部分。包含七個基本對象: AUTO_SECTION_GROUP BASIC_SECTION_GROUP HTML_SECTION_GROUP NEWS_SECTION_GROUP NULL_SECTION_GROUP XML_SECTION_GROUP PATH_SECTION_GROUP

      ( 4 )相關詞表( Wordlist )類

      相關詞表標識用于索引的詞干和模糊匹配查詢選項的語言,只有一個基本對象 BASIC_WORDLIST ,其屬性有: Fuzzy_Match Fuzzy_Numresults Fuzzy_Score Stemmer Substring_Index Wildcard_Maxterms Prefix_Index Prefix_Max_Length Prefix_Min_Length

      ( 5 )索引集( Index Set

      索引集是一個或多個 Oracle 索引 ( 不是 Oracle Text 索引 ) 的集合,用于創建 CTXCAT 類型的 Oracle Text 索引,只有一個基本對象 BASIC_INDEX_SET

      ( 6 )詞法分析器( Lexer )類

      詞法分析器類標識文本使用的語言,還確定在文本中如何標識標記。默認的詞法分析器是英語或其他西歐語言,用空格、標準標點和非字母數字字符標識標記,同時禁用大小寫。包含 8 個基本對象: BASIC_LEXER CHINESE_LEXER CHINESE_VGRAM_LEXER JAPANESE_LEXER JAPANESE_VGRAM_LEXER KOREAN_LEXER KOREAN__MORPH_ LEXER MULTI_LEXER

      ( 7 )過濾器( Filter )類

      過濾器確定如何過濾文本以建立索引。可以使用過濾器對文字處理器處理的文檔、格式化的文檔、純文本和 HTML 文檔建立索引,包括 5 個基本對象: CHARSET_FILTER INSO_FILTER INSO NULL_FILTER PROCEDURE_FILTER USER_FILTER

      ( 8 )非索引字表( Stoplist )類

      非索引字表類是用以指定一組不編入索引的單詞 ( 稱為非索引字 ) 。有兩個基本對象: BASIC_STOPLIST ( 一種語言中的所有非索引字 ) MULTI_STOPLIST ( 包含多種語言中的非索引字的多語言非索引字表 )


    u       查詢

      建立了索引,就可以使用 SELECT 語句中的 CONTAINS 運算符發出文本查詢。使用 CONTAINS 可以進行兩種查詢:單詞查詢和 ABOUT 查詢。

       5 1 詞查詢示例

      詞查詢是對輸入到 CONTAINS 運算符中單引號間的精確單詞或短語的查詢。在以下示例中,我們將查找文本列中包含 oracle 一詞的所有文檔。每行的分值由使用標簽 1 SCORE 運算符選定:

    SELECT SCORE(1) title from news WHERE CONTAINS(text, 'oracle', 1) > 0;

      在查詢表達式中,可以使用 AND OR 等文本運算符來獲取不同結果。還可以將結構性謂詞添加到 WHERE 子句中。可以使用 count(*) CTX_QUERY.COUNT_HITS CTX_QUERY.EXPLAIN 來計算查詢的命中 ( 匹配 ) 數目。

       5 2 ABOUT 查詢示例

      在所有語言中, ABOUT 查詢增加了某查詢所返回的相關文檔的數目。在英語中, ABOUT 查詢可以使用索引的主題詞組件,該組件在默認情況下創建。這樣,運算符將根據查詢的概念返回文檔,而不是僅依據所指定的精確單詞或短語。例如,以下查詢將查找文本列中關于主題 politics 的所有文檔,而不是僅包含 politics 一詞的文檔:

    SELECT SCORE(1) title from news WHERE CONTAINS(text, 'about(politics)', 1) > 0;

     

     

    索引維護

      索引建好后,如果表中的數據發生變化,比如增加或修改了記錄,怎么辦?由于對表所發生的任何 DML 語句,都不會自動修改索引,因此,必須定時同步 (sync) 和優化 (optimize) 索引,以正確反映數據的變化。
    在索引建好后,可以在該用戶下查到 Oracle 自動產生了以下幾個表:(假設索引名為 myindex ):
    DR$myindex$I
    DR$myindex$K DR$myindex$R DR$myindex$N

      其中以 I 表最重要,可以查詢一下該表:

    select token_text, token_count from DR$ myindex $I where rownum<=20;

      查詢結果在此省略。可以看到,該表中保存的其實就是 Oracle 分析你的文檔后,生成的 term 記錄在這里,包括 term 出現的位置、次數、 hash 值等。當文檔的內容改變后,可以想見這個 I 表的內容也應該相應改變,才能保證 Oracle 在做全文檢索時正確檢索到內容(因為所謂全文檢索,其實核心就是查詢這個表)。那么如何維護該表的內容,不能每次數據改變都重新建立索引,這就要用到 sync optimize 了。

      同步( sync ):將新的 term 保存到 I 表;

      優化( optimize ):清除 I 表的垃圾,主要是將已經被刪除的 term I 表刪除。

    posted on 2008-12-15 17:00 Speed 閱讀(4212) 評論(1)  編輯  收藏 所屬分類: 框架設計J2EE

    評論

    # re: Oracle的全文檢索技術架構分析 2008-12-16 08:46 淘聲依舊

    看來全文檢索技術很時尚  回復  更多評論   

    導航

    留言簿(15)

    隨筆分類

    值得一看的博客

    積分與排名

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲国产精品无码久久久蜜芽 | 一二三四视频在线观看中文版免费 | 亚洲av日韩av不卡在线观看 | 日本一区二区三区在线视频观看免费| 免费萌白酱国产一区二区三区| 91视频国产免费| 色久悠悠婷婷综合在线亚洲| 亚洲一区二区三区免费在线观看 | 特黄特色大片免费| 67194成手机免费观看| 婷婷亚洲天堂影院| 亚洲人成人77777网站不卡| 国产精品福利片免费看| 丁香花免费完整高清观看| 亚洲人成在线播放网站| 国产成人精品日本亚洲11| 国内永久免费crm系统z在线| 精品免费久久久久久成人影院| 婷婷精品国产亚洲AV麻豆不片| 看免费毛片天天看| 很黄很黄的网站免费的| 亚洲日韩小电影在线观看| 亚洲av永久无码精品秋霞电影秋| 污污网站免费观看| 亚洲精品第一国产综合境外资源| 亚洲AV成人噜噜无码网站| 日本黄色动图免费在线观看| 免费一级e一片在线播放| www.亚洲日本| 99热这里只有精品6免费| 亚洲精品无码专区久久同性男| 涩涩色中文综合亚洲| 最近2019免费中文字幕6| 久久久久亚洲AV成人网人人网站| 亚洲欧美日韩中文字幕一区二区三区| 日韩午夜理论免费TV影院| 亚洲中文字幕无码爆乳av中文| 亚洲国产精品久久久久秋霞小 | 日本亚洲成高清一区二区三区 | h视频在线免费观看| 国产女高清在线看免费观看|