Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103760556
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-12 14:14:39

    来源:中国IT实验室    作者:buzhi

Oracle全文索引的查询模板功能可以对在CONTEXT索引上使用CATSEARCH语法,或者在CTXCAT索引上使用CONTAINS语法。

通过一个例子说明查询模板的使用:







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

表已创建。

SQL> INSERT INTO T VALUES (1, 'IT IS A EXAMPLE FOR QUERY TEMPLETE.');

已创建 1 行。

SQL> INSERT INTO T VALUES (2, 'USING THE TEMPLETE CONTAIN OPERATION CAN BE PERFORM ON CTXCAT INDEX.');

已创建 1 行。

SQL> INSERT INTO T VALUES (3, 'AND THE CATSEARCH OPERATION CAN BE PERFORM ON CONTENT INDEX.');

已创建 1 行。

SQL> COMMIT;

提交完成。

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

索引已创建。

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'TEMPLETE', 1) > 0;
ID 
---------- 
2 
1
SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, ' 
2 
3 TEMPLETE 
4 
5 
6 ', 1) > 0;
ID 
---------- 
2 
1

上面这个给出了对于CONTEXT索引使用CATSEARCH语法的例子,不过这种用途的实际意义不大,不过下面的例子的实际意义就比较大了:

SQL> DROP INDEX IND_T_DOCS;

索引已丢弃。

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

索引已创建。

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, '$USE', NULL) > 0;

未选定行

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, ' 
2 
3 $USE 
4 
5 
6 ', NULL) > 0;
ID 
---------- 
2
SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, ';((EXAMPLE, TEMPLETE), 3)', NULL) > 0;

未选定行

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, ';((EXAMPLE, TEMPLETE), 3)', NULL) > 0;

未选定行

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, ' 
2 
3 ;((EXAMPLE, TEMPLETE), 3) 
4 
5 ', NULL) > 0;
ID 
---------- 
1

CATSEARCH语法本身不支持ABOUT、STEM、FUZZY、NEAR等操作,但是使用了查询模板,这些本来CONTAINS语法才支持的操作都可以在CTXCAT索引上使用了。

阅读(217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~