oracle全文索引之LEXER_1_BASIC_LEXER
介绍完Oracle全文索引的FILTER属性,继续介绍Oracle的LEXER属性。 Oracle全文索引的LEXER属性用于处理各种不同的语言。最基本的英文使用BASE_FILTER,而如果需要使用中文则可以使用CHINESE_VGRAM_LEXER或CHINESE_LEXER。[@more@]这篇文章简单说明BASIC_LEXER属性。BASIC_LEXER属性支持多种语言,比如英语、德语、荷兰语、挪威语、瑞典语等等。BASIC_LEXER除了支持多种语言,还可以设置多种属性。比如这个例子中介绍的索引的大小写设置:SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));表已创建。SQL> INSERT INTO T VALUE
oracle全文索引之FILTER_4_PROCEDURE_FILTER
这篇文章继续介绍全文索引的FILTER属性,介绍全文索引的PROCEDURE_FILTER属性。 对于一些复杂的需求,Oracle 自定义的FILTER可能并不合适,Oracle支持用户自己编写用于FILTER的程序。Oracle提供两种方式,一种是USER_FILTER一种 是PROCEDURE_FILTER。USER_FILTER是用户编译好的命令行程序,而PROCEDURE_FILTER是调用用户编写的存储过程。[@more@]下面举一个PROCEDURE_FILTER的例子,在例子中被索引的文档为纯文本格式,要求是不索引文档中注释部分的内容。这种要求是预定义FILTER无法达到的,只能通过PROCEDURE_FILTER的方式来解
oracle全文索引之FILTER_3_FORMAT_COLUMN
这篇文章继续介绍全文索引的FILTER属性,介绍对不同类型的数据采用不同类型的FILTER属性的方法。如果Oracle索引的文档包括多种类型,比如doc文件、html文件、pdf文件、纯文本文件等等。由于Oracle不建议对HTML、XML和纯文本文件使用INSO_FILTER,因此没有一个统一适用的FILTER属性适合所有的文档。[@more@]Oracle提供了一种FORMAT列的方法,通过设置FORMAT列的内容可以通知Oracle建立何种FILTER甚至是不建立索引。下面看一个简单的例子:[oracle@rhel140 ~]$ sqlplus myuser/myuserSQL*Plus: Release 10.2.0.1.0 - Production on Sun May
oracle全文索引之FILTER_2_INSO_FILTER
这篇文章继续介绍全文索引的FILTER属性,介绍Oracle的INSO_FILTER属性。[@more@]Oracle的全文索引除了可以支持文本文件外,还可以支持多种文档格式,对于这些文档格式,在建立索引的时候需要指定INSO_FILTER参数,使用这个过滤参数,Oracle的全文索引可以识别绝大部分的常见文档,比如:word、pdf等。下面看一个索引文档的例子:SQL> conn myuser/myuserConnected.SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));Table created.SQL> INSERT INTO T VALUES (1, 'pdf.pdf');1 row created.SQL> INSERT INTO T VALUES (
oracle全文索引之FILTER_1_NULL_FILTER
介绍完Oracle全文索引的DATASTORE属性,继续介绍Oracle的FILTER属性。Oracle全文索引的FILTER属性主要是针对具有一定格式的文档,Oracle根据FILTER的设定来过滤那些不属于文章内容的部分。 FILTER属性包含的属性有:CHARSET_FILTER、INSO_FILTER、NULL_FILTER、USER_FILTER、PROCEDURE_FILTER几种。[@more@]这里仍然从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 I
oracle全文索引之datastore_6_NESTED_DATASTORE
这篇文章继续讨论全文索引的DATASTORE属性,介绍NESTED_DATASTORE。[@more@]全文索引支持将数据存储在多个列中或存储在主子表中,全文索引还支持将数据存储在嵌套表中。嵌套表的例子和主子表比较类似:首先创建嵌套表对象,并建立嵌套表:SQL> CREATE TYPE T_NESTED_REC AS OBJECT2 (3 LINE_NO NUMBER,4 TEXT VARCHAR2(100)5 );6 /类型已创建。SQL> CREATE TYPE T_NESTED_TAB AS TABLE OF T_NESTED_REC;2 /类型已创建。SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, DOCS T_NESTED_TAB, OTHER VARCHAR2(1))2 NESTED TABLE DOCS S
oracle全文索引之datastore_5_detail_datastore
这篇文章继续讨论全文索引的DATASTORE属性,介绍DETAIL_DATASTORE。 [@more@] 全文索引运行将被索引的数据存储在子表的多条记录中,下面看一个简单的例子: SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, AUTHER VARCHAR2(30), TITLE VARCHAR2(30));Table created.SQL> CREATE TABLE T1 (ID NUMBER PRIMARY KEY, FID NUMBER, SEQ NUMBER, DOCS VARCHAR2(1000), 2 CONSTRAINT FK_T1_FID FOREIGN KEY (FID) REFERENCES T(ID)) 3 ;Table created.SQL> INSERT INTO T VALUES (1, 'YTK', 'DETAIL DATASTORE');1 row created.SQ
oracle全文索引之datastore_4_URL_DATASTORE
全文索引可以很方便的索引存储在INTERNET上的信息。在数据库中只需要存储需要索引的文章的URL就可以了。 由于目前讨论的是DATASTORE属性,因此这个例子只索引HTML文章,对于其他需要使用FILTER属性的文章,在以后讨论。[@more@]SQL> show user;USER is "MYUSER"SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));Table created.SQL> INSERT INTO T VALUES (1, 'http://yangtingkun.itpub.net/');1 row created.SQL> INSERT INTO T VALUES (2, 'http://www.itpub.net/');1 row created.SQL> COMMIT;Commi
oracle全文索引之datastore_3_FILE_DATASTORE
DATASTORE是FILE_DATASTORE的测试[@more@][oracle@rhel140 ~]$ cat OUTPUT.TXTORACLEoracle[oracle@rhel140 LOG]$ cat EMPXT_000_2012_2680.LOGSOURCEABCSQL> conn myuser/myuserConnected.SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));Table created.SQL> INSERT INTO T VALUES (1, 'OUTPUT.TXT');1 row created.SQL> commit;Commit complete.SQL> BEGIN2 CTX_DDL.CREATE_PREFERENCE('TEST_FILE', 'FILE_DATASTORE');3 CTX_DDL.SET_ATTRIBUTE('TEST_FILE', 'PATH', '/home/oracle');4 END; 5 /PL/SQL procedur
oracle全文索引之datastore_2_MULTI_COLUMN_DATASTORE
继续讨论全文索引的DATASTORE属性,介绍MULTI_COLUMN_DATASTORE。[@more@]如果被索引的文章是保存在数据库中,但是内容分布在多个列中,那么可以通过建立一个MULTI_COLUMN_DATASTORE来索引完整的文章:SQL> CREATE TABLE T (ID NUMBER, DOC1 VARCHAR2(4000), DOC2 VARCHAR2(4000), DOC3 VARCHAR2(4000));表已创建。SQL> INSERT INTO T VALUES (1, 2 'The first paragraph of article in doc1.', 3 'The second partments is the doc2.', 4 'The last content is in the doc3.');已创建 1 行。SQL> INSERT INTO T VAL
oracle全文索引之datastore_1_DIRECT_DATASTORE
Oracle Text功能十分强大,开始学习,主要参考yangtingkun的blog和文档进行。第一步先搞清楚datastore的类型。[@more@]DATASTORE的类型如下:DIRECT_DATASTOREMULTI_COLUMN_DATASTOREDETAIL_DATASTOREFILE_DATASTORENESTED_DATASTOREURL_DATASTOREUSER_DATASTORE下面就各种类型进行测试,DIRECT_DATASTORE是最简单的,默认是就是用这种类型Oracle的全文索引不要求被索引的文章一定存储在数据库中,不过如果文章存储在数据库的一列中,那么这种情况建立索引是最简单的。SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(4000));表已创建。