ORACLE TEXT DATASTORE PREFERENCE(四)

来源:互联网 发布:1688商品怎么上传淘宝 编辑:程序博客网 时间:2024/05/17 04:32

这篇文章继续讨论全文索引的DATASTORE属性,介绍URL_DATASTORE。


全文索引可以很方便的索引存储在INTERNET上的信息。在数据库中只需要存储需要索引的文章的URL就可以了。

由于目前讨论的是DATASTORE属性,因此这个例子只索引HTML文章,对于其他需要使用FILTER属性的文章,在以后讨论。

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

表已创建。

SQL> INSERT INTO T VALUES (1, 'http://yangtingkun.itpub.net/');

已创建 1 行。

SQL> INSERT INTO T VALUES (2, 'http://www.itpub.net/');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> CONN CTXSYS/CTXSYS@YANGTK
已连接。
SQL> BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_URL', 'URL_DATASTORE');
3 END;
4 /

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_URL');

索引已创建。

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

ID DOCS
---------- ------------------------------
2 http://www.itpub.net/
1 http://yangtingkun.itpub.net/

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

ID DOCS
---------- ------------------------------
2 http://www.itpub.net/
1 http://yangtingkun.itpub.net/

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

ID DOCS
---------- ------------------------------
1 http://yangtingkun.itpub.net/

当时看Oracle的例子感觉URL_DATASTORE很复杂,但是测试之后才发现,使用起来还是很简单的。需要注意的就是,保证数据库所在服务器可以连到INTERNET上。

如果没有连接到被索引的页面,那么Oracle并不会报错,但是,所有的查询都不会返回记录。

SQL> DROP INDEX IND_T_DOCS;

索引已丢弃。

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

索引已创建。

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

未选定行

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

未选定行

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

未选定行

如果需要代理才能连到INTERNET上,可以设置URL_DATASTORE的HTTP_PROXY等属性。URL_DATASTORE还包含很多的属性,这里就不详细的介绍了,Oracle的Text Reference文档上有比较详细的说明。

最后要说明的是,Oracle中仅仅保存被索引文档的URL地址,因此,如果文档本身发生了变化,Oracle是无法知道的,也无法去同步索引,这时必须通过修改索引列也就是URL地址列的方式来通知Oracle,被索引数据已经发生了变化。

使Oracle了解需要同步索引变化的最简单的方法类似于:UPDATE T SET DOCS = DOCS WHERE ID = 1;

原创粉丝点击