oracle全文索引之FILTER_1_NULL_FILTER

jolly10發表於2009-05-18

介紹完Oracle全文索引的DATASTORE屬性,繼續介紹Oracle的FILTER屬性。

Oracle全文索引的FILTER屬性主要是針對具有一定格式的文件,Oracle根據FILTER的設定來過濾那些不屬於文章內容的部分。

FILTER屬性包含的屬性有:CHARSET_FILTER、INSO_FILTER、NULL_FILTER、USER_FILTER、PROCEDURE_FILTER幾種。

[@more@]

這裡仍然從FILTER的最簡單屬性NULL_FILTER開始介紹:

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 null filter sample');

已建立 1 行。

SQL> COMMIT;

提交完成。

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

索引已建立。

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

ID DOCS
---------- ----------------------------------------
1 This is a sample for Oracle TEXT.

上面就是一個簡單的NULL_FILTER的例子,所謂NULL_FILTER就是不使用過濾。Oracle推薦對於文字、HTML和XML檔案不使用過濾。

Oracle的FILTER的預設值和索引列的欄位型別,以及DATASTORE的屬性有關。如果是儲存在資料庫中的列,且列的型別為VARCHAR2、CHAR、CLOB,則Oracle會使用NULL_FILTER作為FILTER的預設屬性。

其實上面這個例子和不指定FILTER是等價的。

SQL> DROP INDEX IND_T_DOCS;

索引已丟棄。

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

索引已建立。

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

ID DOCS
---------- ----------------------------------------
2 This is a null filter sample

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

相關文章