域索引的介绍
域索引(domain index)是为特殊领域设计的索引,比如空间和图像处理。用户可以使用indextype来创建域索引。
INDEXTYPE
indextype封装了查询和检索复杂domains的方法,比如文本,空间,图像等等。
其中context就是对文本信息进行处理的indextype。
CONTEXT
使用context创建的domain index就是文本索引。文本索引有3种分析器(lexer)
basic_lexer:针对英语
chinese_vgram_lexer:字段字数越多,fulltext也就越大。
chinese_lexer:只支持utf8,效率更高
文本索引的创建
--赋予ctx_ddl权限
grant execute on ctx_ddl to public;
--生成以chinese_vgram_lexer方式分析和生成的lexer---context_lexer(我库的字符集是GBK)
exec ctx_ddl.create_preference ('context_lexer', 'chinese_vgram_lexer');
--使用lexer---context_lexer创建全文索引
CREATE INDEX "KMOA"."CTX_IDX_DI_DOCBODY" ON "KMOA"."DOCINFO" ("DOCBODY") INDEXTYPE IS "CTXSYS"."CONTEXT" PARAMETERS ('lexer context_lexer')
CREATE INDEX "KMOA"."CTX_IDX_DI_DOCREADERS" ON "KMOA"."DOCINFO" ("DOCREADERS") INDEXTYPE IS "CTXSYS"."CONTEXT" PARAMETERS ('lexer context_lexer')
全文索引的使用场景
1.需要使用indextype的情景,比如扫描这些索引
2.操作符包含contains和overlaps
contains和like的区别
like:like 操作符会使用全表扫描,like '%...%'这样的查询条件,CBO会默认可选择率5%来评估结果集的cardinaliy值
contains:可以使用全文索引来扫描full text,效率较高。创建全文索引时应该选择好lexer的类型,并及时进行维护。
比如
全文索引维护
BEGIN
ctx_ddl.sync_index('ctx_idx_di_user');
ctx_ddl.sync_index('ctx_idx_di_flsubject');
ctx_ddl.sync_index('ctx_idx_di_filetype');
ctx_ddl.sync_index('ctx_idx_di_wfname');
ctx_ddl.sync_index('ctx_idx_di_htmlbody');
ctx_ddl.sync_index('ctx_idx_di_docbody');
ctx_ddl.sync_index('ctx_idx_di_docreaders');
ctx_ddl.sync_index('ctx_idx_di_docgroups');
ctx_ddl.sync_index('ctx_idx_di_docroles');
ctx_ddl.sync_index('ctx_idx_di_WFPU');
ctx_ddl.sync_index('ctx_idx_di_WFPROCESSOR');
ctx_ddl.sync_index('ctx_idx_di_FILENUMBER');
ctx_ddl.sync_index('ctx_idx_di_FLSLEVEL');
commit;
END;
EGIN
ctx_ddl.optimize_index('ctx_idx_di_user','Full');
ctx_ddl.optimize_index('ctx_idx_di_flsubject','Full');
ctx_ddl.optimize_index('ctx_idx_di_filetype','Full');
ctx_ddl.optimize_index('ctx_idx_di_wfname','Full');
ctx_ddl.optimize_index('ctx_idx_di_htmlbody','Full');
ctx_ddl.optimize_index('ctx_idx_di_docbody','Full');
ctx_ddl.optimize_index('ctx_idx_di_docreaders','Full');
ctx_ddl.optimize_index('ctx_idx_di_docgroups','Full');
ctx_ddl.optimize_index('ctx_idx_di_docroles','Full');
ctx_ddl.optimize_index('ctx_idx_di_WFPU','Full');
ctx_ddl.optimize_index('ctx_idx_di_WFPROCESSOR','Full');
ctx_ddl.optimize_index('ctx_idx_di_FILENUMBER','Full');
ctx_ddl.optimize_index('ctx_idx_di_FLSLEVEL','Full');
commit;
END;
参考资料:
https://docs.oracle.com/cd/B19306_01/appdev.102/b14289/dcidmnidx.htm
https://www.cnblogs.com/tracy/archive/2010/10/20/1856480.html
http://blog.itpub.net/8052309/viewspace-625296/