这篇文章继续介绍全文索引的FILTER属性,介绍Oracle的INSO_FILTER属性。
Oracle的全文索引除了可以支持文本文件外,还可以支持多种文档格式,对于这些文档格式,在建立索引的时候需要指定INSO_FILTER参数,使用这个过滤参数,Oracle的全文索引可以识别绝大部分的常见文档,比如:word、pdf等。
下面看一个索引文档的例子:
SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));
表已创建。
SQL> INSERT INTO T VALUES (1, 'Oracle920 Text Application Developer''s Guide.pdf');
已创建 1 行。
SQL> INSERT INTO T VALUES (2, '35697_bommarito.doc');
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> CONN CTXSYS/CTXSYS@YANGTK
已连接。
SQL> BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_FILE', 'FILE_DATASTORE');
3 CTX_DDL.SET_ATTRIBUTE('TEST_FILE', 'PATH', 'D:databaseoracleoracle docoracle 9i;D:databaseoracleoracle doc');
4 END;
5 /
PL/SQL 过程已成功完成。
SQL> CONN YANGTK/YANGTK@YANGTK
已连接。
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.TEST_FILE FILTER CTXSYS.INSO_FILTER');
索引已创建。
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID DOCS
---------- ------------------------------------------------------------
2 35697_bommarito.doc
1 Oracle920 Text Application Developer's Guide.pdf
FILTER的默认值并不是一成不变的,这个默认值会受索引字段类型和DATASTORE的类型的影响。在上一篇文章中的测试中,对于存储在数据库中的VARCHAR2、CHAR和CLOB字段中的数据,Oracle自动选择了NULL_FILLER。在这里DATASTORE的属性为FILE_DATASTORE,则Oracle会默认选择INSO_FILTER作为默认值。
下面看具体的例子:
SQL> DROP INDEX IND_T_DOCS;
索引已丢弃。
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.TEST_FILE FILTER CTXSYS.NULL_FILTER');
索引已创建。
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
未选定行
SQL> DROP INDEX IND_T_DOCS;
索引已丢弃。
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.TEST_FILE');
索引已创建。
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID DOCS
---------- ------------------------------------------------------------
2 35697_bommarito.doc
1 Oracle920 Text Application Developer's Guide.pdf