关闭

ORACLE TEXT DATASTORE PREFERENCE(四)

标签: oraclesqlurlparametersinternetinsert
583人阅读 评论(0) 收藏 举报
分类:

这篇文章继续讨论全文索引的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;

0
0
查看评论

ORACLE TEXT DATASTORE PREFERENCE(六)

这篇文章继续讨论全文索引的DATASTORE属性,介绍NESTED_DATASTORE。 全文索引支持将数据存储在多个列中或存储在主子表中,全文索引还支持将数据存储在嵌套表中。嵌套表的例子和主子表比较类似: 首先创建嵌套表对象,并建立嵌套表: SQL> C...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:36
  • 551

ORACLE TEXT DATASTORE PREFERENCE(二)

这篇文章继续讨论全文索引的DATASTORE属性,介绍MULTI_COLUMN_DATASTORE。 如果被索引的文章是保存在数据库中,但是内容分布在多个列中,那么可以通过建立一个MULTI_COLUMN_DATASTORE来索引完整的文章: SQL> CREATE T...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:25
  • 1060

ORACLE TEXT DATASTORE PREFERENCE(一)

Oracle Text功能十分强大,可是文档上给出的例子总是过于简单,而且可能是为了减少篇幅,不少例子只给出了其中关键的几步,但是对于初学者而言,阅读这样的例子很难对全文索引的创建有一个清晰的了解,而更多的时候可能会使初学者更加迷茫。 打算通过一系列的文章对Oracle全文索引做一个比较详细的...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:20
  • 667

ORACLE TEXT DATASTORE PREFERENCE(七)

这篇文章讨论全文索引DATASTORE的最后一种属性,介绍USER_DATASTORE。 Oracle功能的强大体现在很多方面,除了很多Oracle预定义好的接口以外,Oracle还提供了强大的自定义功能。USER_DATASTORE就是一个例子。如果上面几篇文章介绍的DATAST...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:36
  • 611

ORACLE TEXT DATASTORE PREFERENCE(三)

这篇文章继续讨论全文索引的DATASTORE属性,介绍FILE_DATASTORE。 全文索引的对象一般是篇幅较大的文章,除了保存在数据库中的情况,另外一种常见的情况是以文件的形式保存在操作系统中。 Oracle的FILE_DATASTORE属性就可以索引这种类型的文...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:26
  • 674

ORACLE TEXT DATASTORE PREFERENCE(五)

这篇文章继续讨论全文索引的DATASTORE属性,介绍DETAIL_DATASTORE。 全文索引运行将被索引的数据存储在子表的多条记录中,下面看一个简单的例子: SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, A...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:32
  • 582

ORACLE TEXT FILTER PREFERENCE(四)

这篇文章继续介绍全文索引的FILTER属性,介绍全文索引的PROCEDURE_FILTER属性。 对于一些复杂的需求,Oracle自定义的FILTER可能并不合适,Oracle支持用户自己编写用于FILTER的程序。Oracle提供两种方式,一种是USER_FILT...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:59
  • 513

ORACLE TEXT LEXER PREFERENCE(四)

本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引DEFAULT_LEXER。 其实这篇文章应该放在LEXER属性的开头部分,不过我的测试一直和Oracle文档上的描述不符,所以一直没有写这篇文章,今天找了个环境又测试了一下,基本上可以...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 15:05
  • 794

oracle全文索引之datastore

 Oracle Text功能十分强大,开始学习,主要参考yangtingkun的blog和文档进行。第一步先搞清楚datastore的类型。DATASTORE的类型如下:DIRECT_DATASTOREMULTI_COLUMN_DATASTOREDETAIL_DATASTOREFILE_D...
  • leminsky
  • leminsky
  • 2010-01-08 14:30
  • 700

ORACLE TEXT LEXER PREFERENCE(二)

介绍完Oracle全文索引的BASIC_LEXER属性,这篇介绍Oracle中文语法属性CHINESE_LEXER和CHINESE_VGRAM_LEXER。 Oracle全文索引的BASIC属性主要是针对西方英语语系,英语语系的单词是通过空格、标点和回车来分隔的。而中文则需要索引来...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 15:03
  • 714
    个人资料
    • 访问:2421172次
    • 积分:22100
    • 等级:
    • 排名:第392名
    • 原创:158篇
    • 转载:639篇
    • 译文:1篇
    • 评论:52条
    最新评论