设为首页 收藏本站
查看: 497|回复: 0

[经验分享] oracle-全文索引的学习与应用

[复制链接]

尚未签到

发表于 2016-7-27 08:42:25 | 显示全部楼层 |阅读模式
  1.sysdba用户授权
  grant ctxapp to xmaricallplat;
  grant ctx_ddl execute on xmaircallplat;
  2.选择分析器
  basic_lexer:针对英语分词器
  chinese_vgram_lexer:专门的汉语分析器(支持所有汉字字符集),搜索特点:一网打尽、效率差强人意
  chinese_lexer:新的汉语分析器(只支持utf8字符集),搜索特点:能够搜索大部分常用汉语词汇,效率较高
  3.创建全文索引
  -- 创建分析器和创建单字段的全文索引
  exec ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); 
  create index kb_index on kb_node_text(kb_text) indextype is ctxsys.context parameters('lexer my_lexer'); 
  -- 创建多字段的全文索引
  exec ctx_ddl.create_preference('ctx_idx_subject_pref','MULTI_COLUMN_DATASTORE');
  exec ctx_ddl.set_attribute('ctx_idx_subject_pref','coloumns',,'subjectname,briefintro');
  create index ctx_idx_subject_pref on pmhsubjects(subjectname)
  indextype is ctxsys.context parameters('DATASTORE ctxsys.ctx_idx_subject_pref exer my_lexer');
  --查看自定义的参考项
  select * from ctx_user_preferences;
  4.简单介绍索引类型
  context -- 复杂索引类型(支持普通和大字段类型如clob、blob)
  ctxcat  -- 简单索引类型(支持普通类型,不支持大字段类型)
  ctxrule
  ctxpath
  5.使用全文索引
  select * from kb_node_text where contains(kb_text,'老大') > 0;
  6.全文索引的维护
  对应ctxsys.context索引,会产生DR$myindex$I、DR$myindex$K、DR$myindex$R、DR$myindex$N四个表,主要是I表:
  SELECT token_text, token_count FROM dr$i_rsk1$I WHERE ROWNUM <= 20;(用来存分词记录,所谓全文索引,核心就是查询这个表),对应context类型需要进行sync(同步)和optimize(优化)
  同步(sync): 将新的term 保存到I表
  优化(optimize): 清除I表的垃圾,主要是将已经被删除的term从I表删除
  查询基本的改变,可以查询视图CTX_USER_PENDING查看相应的改动:
  select pnd_index_name, pnd_rowid,to_char (pnd_timestamp, 'dd-mon-yyyy hh24:mi:ss') timestamp from ctx_user_pending;
  注意:对于CTXCAT类型的索引来说, 当对基表进行DML操作的时候,Oracle自动维护索引。对文档的改变马上反映到索引中。CTXCAT是事务形的索引
  同步和优化方法: 可以使用Oracle提供的ctx_ddl包同步和优化索引
  手动同步:exec ctx_ddl.sync_index('kb_index');
  手动优化:exec ctx_ddl.optimize_index('kb_index','full');
  为了保持索引记录和基本的同步的,可以采用定时优化同步域索引:
  (1)创建同步存储过程
  create or replace procedure sync_kb_index as
  begin
  ctxsys.ctx_ddl.sync_index('kb_index');
  end;
  (2)创建优化存储过程
  create or replace procedure optimize_kb_index as
  begin
  ctx_ddl.optimize_index('kb_index','FULL');
  end;
  (3)创建同步定时任务
  variable jobno number;  
  begin
  dbms_job.submit(:jobno,'sync_kb_index();',  
  sysdate, 'sysdate + 1');  
  commit; 
  end;
  (4)创建优化定时任务
  variable jobno number;  
  begin
  dbms_job.submit(:jobno,'optimize_kb_index();',  
  sysdate, 'sysdate + 2');  
  commit; 
  end;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-249954-1-1.html 上篇帖子: ORACLE安装时,先决条件检查失败 下篇帖子: oracle 创建表空间,表,以及用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表