2015-11-04 61 views
0

與其他Oracle產品相比,Oracle Text的功能有什麼區別? Oracle數據庫具有良好的索引功能,所以爲什麼我需要使用Oracle Text來執行索引和檢索文本?oracle文本與其他oracle軟件產品功能的區別

+0

也許我的英文不夠好,但我認爲你的問題並不清楚:Oracle Text是Oracle數據庫的集成組件。在尋求幫助之前,您應該閱讀文檔(http://docs.oracle.com/cd/E11882_01/text.112/e24436/toc.htm) – Cyryl1972

回答

1

考慮此表及其數據:

create table t23 
    (id number, 
    txt varchar2(4000) 
    ) 
/
insert into t23 
select 1, 'Please read the Oracle documentation' from dual union all 
select 2, 'This is some sample text' from dual union all 
select 3, 'We all love Oracle database' from dual union all 
select 4, 'It has so many features' from dual union all 
select 5, 'What is full text search anyway?' from dual 
/

的任務是發現所有在txt列包含單詞「甲骨文」的記錄。有幾種使用標準操作符的選項。例如

select * from t23 
where txt like '%Oracle%' 
/

select * from t23 
where instr(txt,'Oracle') > 0 
/

但這些查詢將執行全表掃描。這樣的玩具桌不是問題,而是現實生活中的一大痛苦。在txt上構建B樹索引將無濟於事。因爲整個字符串都是索引的,所以索引可能只在搜索字符串的前導部分時有用,即where text like 'Oracle%'(甚至可能不是)。

相比之下,文本索引將字符串拆分爲令牌和每次出現的令牌的索引。

CREATE INDEX t23_txt_idx ON t23(txt) INDEXTYPE IS CTXSYS.CONTEXT; 

因此,與文字,我們可以寫這樣的查詢:

select * from t23 
where contains(txt,'Oracle') > 0 
/

將在表演方式執行:

SQL> select * from table(dbms_xplan.display); 

    PLAN_TABLE_OUTPUT 
    ------------------------------------------------------------------------------------------------------------------------------------------------------ 
    Plan hash value: 4178983470 

    ------------------------------------------------------------------------------------------- 
    | Id | Operation     | Name  | Rows | Bytes | Cost (%CPU)| Time  | 
    ------------------------------------------------------------------------------------------- 
    | 0 | SELECT STATEMENT   |    |  1 | 2027 |  4 (0)| 00:00:01 | 
    | 1 | TABLE ACCESS BY INDEX ROWID| T23   |  1 | 2027 |  4 (0)| 00:00:01 | 
    |* 2 | DOMAIN INDEX    | T23_TXT_IDX |  |  |  4 (0)| 00:00:01 | 
    ------------------------------------------------------------------------------------------- 

    Predicate Information (identified by operation id): 
    --------------------------------------------------- 

     2 - access("CTXSYS"."CONTAINS"("TXT",'Oracle')>0) 

    Note 
    ----- 
     - dynamic sampling used for this statement (level=2) 

    18 rows selected. 

    SQL> 

索引的這種形式適合於大量的自由文本,包括文檔。

文本索引的成本是它們的維護,它非常高,可能不是事務性的(並且取決於索引類型)。因此,當我們確實需要定期搜索字符串的內容時,合理使用文本索引非常重要。 Find out more

現在Oracle Text是常規數據庫的一部分。不過,我看到你已經標記了你的問題[Oracle9i]。文字是Standard Edition in 9iR2的一部分,不知道R1。