介绍完Oracle全文索引的DATASTORE属性,继续介绍Oracle的FILTER属性。
Oracle全文索引的FILTER属性主要是针对具有一定格式的文档,Oracle根据FILTER的设定来过滤那些不属于文章内容的部分。
FILTER属性包含的属性有:CHARSET_FILTER、INSO_FILTER、NULL_FILTER、USER_FILTER、PROCEDURE_FILTER几种。
这里仍然从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