不错的关于Oracle 全文索引的文章(zt)
Oracle从7.3开始支持全文检索,即用户可以使用Oracle服务器的上下文(ConText)选项完成基于文本的查询。具体可以采用通配符查找、模糊匹配、相关分类、近似查找、条件加权和词意扩充等方法。在Oracle8.0.x中称为ConText ;在Oracle8i中称为interMedia Text ; Oracle9i中称为Oracle Text。http://blog.csdn.net/fengzhu1008/archive/2009/01/15/3784853.aspx[@more@]Oracle 全文索引前言:Oracle从7.3开始支持全文检索,即用户可以使用Oracle服务器的上下文(ConText)选项完成基于文本的查询。具体可以采用通配符查找、模糊匹配、相关分
CONTEXT索引对COMMIT操作的影响 (ZT)
ORACLE的CONTEXT索引不是实时同步的,Oracle为了保证索引的碎片程度以及普通DML的执行效率,并没有在进行DML操作的同时进行索引的维护。而是选择了定期或根据需要时进行维护的方法。 但是Oracle在处理INSERT操作和处理DELETE操作上又有所差异。[@more@]今天在论坛上看到了有人遇到了这个问题:http://www.itpub.net/670998.html。这里就简单分析一下。看下面的例子:SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));表已创建。SQL> INSERT INTO T SELECT ROWNUM, OBJECT_NAME || ' ' || OBJECT_TYPE FROM USER_OBJECTS;已创
oracle全文索引之停用词的通配符功能
全文索引停用词的设置在前面的文章中已经介绍过了,这里简单说明记录一下停用词在查询时候需要注意的地方。[@more@]Oracle10g中,如果安装语言为中文,默认的LEXER为CHINESE_VGRAM_LEXER,默认的停用词语言也为中文。这篇通过对比中文环境和英文环境来说明停用词查询的一些特点。SQL> show userUSER is "MYUSER"SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));Table created.SQL> INSERT INTO T VALUES (1, 'This example test stopword.');1 row created.SQL> INSERT INTO T VALUES (2, 'Oracle9i chinese
oracle全文索引之About_INDEX_THEMES操作
Oracle的全文索引除了支持文字匹配查询,还支持对文章涵义的查询。这是通过ABOUT操作实现的。[@more@]Oracle默认情况下支持英文和法文的文章涵义支持。其他语言可以添加通过用户自定义的语言库来实现相应的功能。在这之前需要先安装Companion CD 的Oracle Database 10g Products Installation Type,其中包括了Oracle Text Supplied Knowledge Bases,否则在建立含有about的索引时会出错。Companion CD可直接在官网下载,安装也非常简单。下面看看英文环境下简单的ABOUT操作用法:SQL> conn myuser/myuserConnected.SQL> CREATE TABL
oracle全文索引之STOPLIST_ CTXCAT 索引_INDEX SET
这篇文章介绍的是ORACLE CTXCAT索引的INDEX SET,也是CTXCAT索引特有的属性。[@more@]CTXCAT 索引是CONTEXT索引的简化版,CTXCAT索引支持的PREFERENCE包括:LEXER、STOPLIST、WORDLIST和STORAGE 参数。不支持其他的参数如:DATASTORE、FILTER、SECTION GROUP。虽然支持LEXER但不支持THEME查询,而且不支持FORMAT、CHARSET和LANGUAGE列,另外不支持表和索引分区。CTXCAT 索引仅仅包含了CONTEXT索引的部分内容,但是CTXCAT索引有其自身的优点。其中最突出的优点就是支持DML同步。CONTEXT索引由于结构过于复杂,且索引的数据量一般较大,因此
oracle全文索引之STOPLIST_4_MULTI_STOPLIST
这篇文章介绍Oracle全文索引的STOPLIST属性。介绍的是MULTI_STOPLIST。[@more@]上一篇文章中已经提到了,DEFAULT_STOPLIST的语言是由DEFAULT_LEXER决定的。Oracle对于多语言的文档支持MULTI_LEXER,同时也支持MULTI_STOPLIST。在增加同义词的时候,可以为某个停用词指定语言,这个停用词就只对指定的语言生效。而默认不指定语言的情况,则对任何语言都生效。SQL> CREATE TABLE T (ID NUMBER, LANGUAGE VARCHAR2(7), DOCS VARCHAR2(1000));表已创建。SQL> INSERT INTO T VALUES (1, 'ENGLIST', 'THIS IS A MULTI_STOPLIST EXAMPLE.')
oracle全文索引之STOPLIST_3_DEFAULT_STOPLIST
这篇文章介绍Oracle全文索引的STOPLIST属性。介绍的是DEFAULT_STOPLIST。 Oracle 的DEFAULT_STOPLIST和其他属性的DEFAULT值不太一样。一般的属性的DEFAULT值都会指向一个已经存在的属性值,比如 DEFAULT_DATASTORE指向DIRECT_DATASTORE,DEFAULT_FILTER会根据DATASTORE属性和字段类型的不同 指向NULL_FILTER或INSO_FILTER。而DEFAULT_STOPLIST和上述这些属性都有一定的差别。 DEFAULT_STOPLIST指向BASIC_STOPLIST,但是DEFAULT_STOPLIST并不等于BASIC_STOPLIST,在介 绍BASIC_STOPLIST的时候已经发现,创建一个BASIC_STOPLIST后,并
oracle全文索引之STOPLIST_2_EMPTY_STOPLIST
这篇文章介绍Oracle全文索引的STOPLIST属性。介绍的是EMPTY_STOPLIST。 [@more@]如果索引的文章比较短小,或者认为文章中所有的内容都是关键性的,那么可以选择EMPTY_STOPLIST。使用EMPTY_STOPLIST表示系统中不包含任何的停用词,只要文章中出现的单词,都是可以索引到的。下面看个简单的例子,对于默认停用词‘THIS’和‘A’,使用默认的停用词无法查询到这些信息,只有使用EMPTY_STOPLIST才行。SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(100));表已创建。SQL> INSERT INTO T VALUES (1, 'This is a simple stoplist examp
oracle全文索引之STOPLIST_1_BASIC_STOPLIST
这篇文章开始介绍Oracle全文索引的STOPLIST属性。首先介绍的是BASIC_STOPLIST。[@more@]Oracle的全文索引允许用户建立停用词,来屏蔽那些包含信息量比较小且出现概率比较高的词语。比如英文中的a、this、are、the等词语,几乎每篇文章中都会包含这些常用词,因此对这些词语进行索引的意义不大。SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));表已创建。SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));Table created.SQL> INSERT INTO T VALUES (1, 'THIS IS A STOPLIST EXAMPLE.');1 row created.SQL> COMM
oracle全文索引之SECTION GROUP_6_PATH_SECTION_GROUP
这篇文章介绍Oracle全文索引的SECTION GROUP属性中的PATH_SECTION_GROUP。[@more@] PATH_SECTION_GROUP 的功能和AUTO_SECTION_GROUP十分类似,PATH_SECTION_GROUP比AUTO_SECTION_GROUP增加了 HASPATH和INPATH操作,但是PATH_SECTION_GROUP不支持ADD_STOP_SECTION属性。下面通过一个例子简单描述一下PATH_SECTION_GROUP以及HASPATH和INPATH功能。SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));表已创建。SQL> INSERT INTO T VALUES (1, '<!DOCTYPE TargetMetadata SYSTEM "../dtds/TargetMetadata.dtd">
oracle全文索引之SECTION GROUP_5_AUTO_SECTION_GROUP
这篇文章介绍Oracle全文索引的SECTION GROUP属性中的AUTO_SECTION_GROUP。 [@more@]Oracle的AUTO_SECTION_GROUP是XML_SECTION_GROUP的增强型。对于XML_SECTION_GROUP用户需要自己添加需要定义的节组,而使用AUTO_SECTION_GROUP,则Oracle会自动添加节组以及属性信息。SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(4000));表已创建。SQL> INSERT INTO T VALUES (1, '<!DOCTYPE TargetMetadata SYSTEM "../dtds/TargetMetadata.dtd"> 2 3 <TargetMetadata META_VER="1.0" TYPE="ora
oracle全文索引之SECTION GROUP_4_XML_SECTION_GROUP
这篇文章介绍Oracle全文索引的SECTION GROUP属性中的XML_SECTION_GROUP。[@more@] Oracle对HTML文档预定义了专门的HTML_SECTION_GROUP,而对XML文档,也预定义好了专门的SECTION_GROUP——XML_SECTION_GROUP。其实,Oracle除了XML_SECTION_GROUP外,AUTO_SECTION_GROUP和PATH_SECTION_GROUP也都是为XML文档预定义的,不过,这篇文档先只讨论XML_SECTION_GROUP。XML文档的格式要求比HTML文档严谨、规范,这也使得XML_SECTION_GROUP比HTML_SECTION_GROUP增加了新的功能,比如ATTRIBUTE的搜索。如果一篇结构类型下面例子中的文档,使用HTM
oracle全文索引之SECTION GROUP_3_HTML_SECTION_GROUP
这篇文章介绍Oracle全文索引的SECTION GROUP属性中的HTML_SECTION_GROUP。[@more@] 虽然BASIC_SECTION_GROUP 已经可以解决很多基本的节搜索问题,但是Oracle还是推荐对于HTML文档使用专门定义的HTML_SECTION_GROUP属性。这是由于 HTML文档具有很多不规范的表示方法,使用HTML_SECTION_GROUP能够更好的识别HTML文档的机构。另 外,BASIC_SECTION_GROUP不支持不匹配的括号、注释表示和属性等。下面通过一个简单的例子来看一下HTML_SECTION_GROUP和BASIC_SECTION_GROUP的区别。HTML_SECTION_GROUP支持META标签中的NAME/CONTENT属性对的查询
oracle全文索引之SECTION GROUP_2_BASIC_SECTION_GROUP
这篇文章介绍Oracle全文索引的SECTION GROUP属性中的BASIC_SECTION_GROUP。[@more@]NULL_SECTION_GROUP 其实并不真正支持节搜索,而在支持节搜索的SECTION_GROUP中,BASIC_SECTION_GROUP是最基础的一种属性,它只支持以<tag>开头以</tag>结尾的结构的文档。这篇文章在介绍BASIC_SECTION_GROUP的同时,简单介绍一下节搜索。SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));Table created.SQL> INSERT INTO T VALUES (1, '<HEADING>TITLE</HEADING> 2 <CONTEXT>This is the contents of the
oracle全文索引之SECTION GROUP_1_NULL_SECTION_GROUP
这篇文章介绍Oracle全文索引的SECTION GROUP属性中的NULL_SECTION_GROUP。[@more@]Oracle的全文索引的SECTION GROUP属性用来支持包含内部结构的文档,比如HTML、XML文档等。使用了SECTION GROUP属性,可以在查询文档的时候指定在文档的哪一部分进行查询。可以将查询范围限定在标题中。这篇文章首先介绍最简单的NULL_SECTION_GROUP,如果DATASTORE的属性没有设置为URL_DATASTORE且FILTER的属性没有设置为INSO_FILTER,则 NULL_SECTION_GROUP就是默认的SECTION_GROUP,否则HTML_SECTION_GROUP为默认 SECTION_GROUP。NULL_SECTION_GROUP的含义
oracle全文索引之STORAGE PREFERENCE
Oracle全文索引的STORAGE属性是为了给全文索引生成的辅助表设置存储参数的。[@more@]Oracle的全文索引会生成一张或多张辅助表,由于这些表是Oracle自动生成的,用户没有办法直接设置这些表和索引的物理参数,因此Oracle提供了STORAGE属性,专门设置这些辅助表和索引的物理参数。SQL> SELECT * FROM TAB;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------DR$IND_T_DOCS$I TABLEDR$IND_T_DOCS$K TABLEDR$IND_T_DOCS$N TABLEDR$IND_T_D
oracle全文索引之WORDLIST PREFERENCE
Oracle全文索引的WORDLIST属性用来设置模糊查询和同词根查询,另外WORDLIST属性还支持通配符查询。[@more@]Oracle的WORDLIST属性只有BASIC_WORDLIST一种,下面看一个BASIC_WORDLIST的例子:1.Stemmer attribute是用来查询用词根的数据SQL> create table stemmer_tbl(id number primary key,docs clob);Table created.SQL> insert into stemmer_tbl values(111,'We are testing the Stemmer attribute option');1 row created.SQL> insert into stemmer_tbl values(112,'The girl sang like a frog');1 row created.SQL> inser
oracle全文索引之LEXER_4_MULTI_LEXER
本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引MULTI_LEXER。 如果在Oracle中存储多种语言,那么在建立全文索引的时候就不能只是简单的指定一个LEXER,而是要通过LANGUAGE COLUMN设置MULTI_LEXER。[@more@]下面看一个简单的例子:SQL> CREATE TABLE T (ID NUMBER, LANGUAGE VARCHAR2(7), DOCS VARCHAR2(1000));表已创建。SQL> INSERT INTO T VALUES (1, 'english', 'This is a mixed language example.');已创建 1 行。SQL> INSERT INTO T VALUES (2, 'chinese', '中文信息应该使用中文语言属性CHIN
oracle全文索引之LEXER_3_DEFAULT_LEXER
本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引DEFAULT_LEXER[@more@]要是DEFAULT_LEXER其实并不复杂,但是确实最常使用的,无论是明确给出DEFAULT_LEXER属性还是不指定LEXER属性,Oracle都会使用DEFAULT_LEXER作为LEXER的默认属性。但是DEFAULT_LEXER并不是一个真正意义上的LEXER,Oracle9i的文档上描述的是,如果数据库在建立的时候指定的是中文则DEFAULT_LEXER为CHINESE_VGRAM_LEXER,如果是英文,则DEFAULT_LEXER为BASIC_LEXER。但是我在很多Oracle9i的环境下进行测试,发现无论按照时指定中文还是英文,D
oracle全文索引之LEXER_2_CHINESE_LEXER
介绍完Oracle全文索引的BASIC_LEXER属性,这篇介绍Oracle中文语法属性CHINESE_LEXER和CHINESE_VGRAM_LEXER。 Oracle全文索引的BASIC属性主要是针对西方英语语系,英语语系的单词是通过空格、标点和回车来分隔的。而中文则需要索引来自动切词。[@more@]2看下面这个例子:SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));表已创建。SQL> INSERT INTO T VALUES (1, '一个中文例子,测试BASIC_LEXER语法属性是否可以正常识别中文。');已创建 1 行。SQL> COMMIT;提交完成。SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEX