oracle全文索引之datastore_1_DIRECT_DATASTORE

jolly10發表於2009-05-14

Oracle Text功能十分強大,開始學習,主要參考yangtingkun的blog和文件進行。

第一步先搞清楚datastore的型別。

[@more@]DATASTORE的型別如下:

DIRECT_DATASTORE
MULTI_COLUMN_DATASTORE
DETAIL_DATASTORE
FILE_DATASTORE
NESTED_DATASTORE
URL_DATASTORE
USER_DATASTORE

下面就各種型別進行測試,DIRECT_DATASTORE是最簡單的,預設是就是用這種型別

Oracle的全文索引不要求被索引的文章一定儲存在資料庫中,不過如果文章儲存在資料庫的一列中,那麼這種情

況建立索引是最簡單的。

SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(4000));

表已建立。

SQL> INSERT INTO T VALUES (1, 'This is a sample for Oracle TEXT.');

已建立 1 行。

SQL> INSERT INTO T VALUES (2, 'This is a direct database store sample');

已建立 1 行。

SQL> COMMIT;

提交完成。

對於上面提到的DIRECT DATASTORE型別,下面三種建立索引方式是等價的:

SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT;

索引已建立。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'DATABASE') > 0;

ID DOCS
---------- ----------------------------------------
2 This is a direct database store sample

SQL> DROP INDEX IND_T_DOCS;

索引已丟棄。

SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

索引已建立。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'DATABASE') > 0;

ID DOCS
---------- ----------------------------------------
2 This is a direct database store sample

SQL> DROP INDEX IND_T_DOCS;

索引已丟棄。

SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.DIRECT_DATASTORE');

索引已建立。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'DATABASE') > 0;

ID DOCS
---------- ----------------------------------------
2 This is a direct database store sample

上面給出了一個最簡單的全文索引的例子。

另外,由DR$開頭的4張表是系統為了支援全文索引而自動生成的,不過這4張表的用處就不再這裡討論了。

SQL> SELECT * FROM TAB;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DR$IND_T_DOCS$I TABLE
DR$IND_T_DOCS$K TABLE
DR$IND_T_DOCS$N TABLE
DR$IND_T_DOCS$R TABLE
T TABLE

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-1022072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章