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

[经验分享] 【引用】Oracle全文检索方面的研究(全9)

[复制链接]

尚未签到

发表于 2016-8-3 23:45:12 | 显示全部楼层 |阅读模式
3.10常用的脚本
3.10.1.删除preference:
begin
ctx_ddl.drop_preference('my_lexer');
end;
 
3.10.2.索引重建:
ALTER INDEX newsindex REBUILD PARAMETERS('replace lexer my_lexer');
 
3.10.3 同步索引
begin
ctx_ddl.sync_index('myindex', '2M');
end;
或通过后台设置同步脚本:
$ORACLE_HOME/ctx/sample/script/drjobdml.sql --后台同步脚本(9i 中有,10g 不知道放哪儿了,文档有问题)
SQL> @drjobdml myindex 360 --表示以周期360 分钟同步索引myindex
或通过创建索引加参数实现
--表示每小时同步一次,内存16m
CREATE INDEX IND_m_high ON my_high(DOCS) INDEXTYPE IS CTXSYS.CONTEXT
parameters ('sync (EVERY "TRUNC(SYSDATE)+ 1/24") memory 16m ') parallel 2 online;
(确认这个时间间隔内索引同步能完成,否则,sync job 将处于挂起状态)
--还可以是
sync (manual) --手工同步,默认
sync (on commit) --dml 后立即同步
--通过job 定义同步
declare
job number;
begin
dbms_job.submit(job,
'ctx_ddl.sync_index(''ind_m_high'');', --索引名
interval => 'SYSDATE+1/1440'); --1 分钟一次
commit;
dbms_output.put_line('job ' || job || ' has been submitted.');
end;
 
 
3.10.4.索引碎片:
刚开始建立索引后,DOG 可能是如下的条目
DOG DOC1 DOC3 DOC5
新的文档增加到表后,新行会同步到索引中去,假设新文档中Doc7 中的DOG 被同步到索引中去,DOG
可能变成如下条目
DOG DOC1 DOC3 DOC5
DOG DOC7
随后的DML 操作可能变成:
DOG DOC1 DOC3 DOC5
DOG DOC7
DOG DOC9
DOG DOC11
这就产生了碎片,需要进行索引的优化
查看索引碎片
create table output (result CLOB);
declare
x clob := null;
begin
ctx_report.index_stats('idx_auction', x);
insert into output values (x);
commit;
dbms_lob.freetemporary(x);
end;
select * from output
 
3.10.5索引优化:
快速fast 优化和全部full 优化的区别是,快速优化不会删除没用的、过期的数据,而full 会删除老的数据(deleted rows)
--快速优化
begin
ctx_ddl.optimize_index('myidx','FAST');
end;
--全部优化
begin
ctx_ddl.optimize_index('myidx','FULL');
end;
--对单个记号进行优化,默认是full 模式
begin
ctx_ddl.optimize_index('myidx','token', TOKEN=>'Oracle');
end;
 
3.10.6.Online 参数限制:
at the very beginning or very end of this process, dml might fail.
online is supported for context indexes only.
online cannot be used with parallel.
--online 索引的时候后面必须要加parameters,否则会失败
alter index IND_m_high rebuild online parameters ('sync memory 16m' )
 
3.10.7.更改索引的属性,但不进行索引重建
Replaces the existing preference class settings, including SYNC parameters, of the index with
the settings from new_preference. Only index preferences and attributes are replaced. The index is
not rebuilt.
ALTER INDEX myidx REBUILD PARAMETERS('replace metadata transactional');
alter index idx_auction_db1 rebuild PARAMETERS('REPLACE METADATA SYNC(ON COMMIT)') ;
参考文档:
http://download.oracle.com/docs/cd/B19306_01/text.102/b14218/csql.htm#CIHBFDCE
 
3.10.8.Score:
--表示得分,分值越高,表示查到的数据越精确
SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'oracle', 1) > 0;
--根据得分来排序
SELECT SCORE(1), title from news WHERE CONTAINS(text, 'oracle', 1) > 0 AND issue_date >=
('01-OCT-97')
ORDER BY SCORE(1) DESC;
 
3.10.9.分析表:
ANALYZE TABLE <table_name> COMPUTE STATISTICS;
ANALYZE TABLE <table_name> ESTIMATE STATISTICS 1000 ROWS;
ANALYZE TABLE <table_name> ESTIMATE STATISTICS 50 PERCENT;
ANALYZE TABLE <table_name> DELETE STATISTICS;
 
3.10.10.数据字典表:
查看系统默认的oracle text 参数
Select pre_name, pre_object from ctx_preferences
查询dml 操作后索引为同步
SELECT pnd_index_name, pnd_rowid, to_char(pnd_timestamp, 'dd-mon-yyyy hh24:mi:ss')
timestamp FROM ctx_user_pending;
查看错误记录表
select * from CTX_USER_INDEX_ERRORS
 
3.10.11.Php,Jsp 应用oracle text:
http://download.oracle.com/docs/cd/B19306_01/text.102/b14217/acase.htm
 
3.10.12.逻辑操作符:
          
 
-- or 操作符
Select id, text from docs where contains(text, 'city or state ') > 0;
--and 操作符
Select id, text from docs where contains(text, 'city and state ') > 0;
或是
Select id, text from docs where contains(text, 'city state ') > 0;
 
 
3.10.13.索引优化问题
--先看个例子
SQL> exec ctx_ddl.optimize_index('idx_auction_db1','FULL');
PL/SQL procedure successfully completed.
Elapsed: 00:16:16.77
索引优化相当的慢,200 万的数据建立context 索引需要不到5 分钟,而优化索引居然要16 分钟,这么慢
的优化速度对一个具有几亿表的数据是很难接受的的。刚开始我以为这是oracle 的一个bug,后来查到了
一些文档。Oracle10g 引进了rebuild 优化参数,速度还是很快的。
SQL> exec ctx_ddl.optimize_index('idx_auction_db1','rebuild') ;
PL/SQL procedure successfully completed.
 
 
3.10.14 事务查询
索引可能不是实时进行同步的,但是查询又要求实时的。
--更改索引为事务性,查询再找索引时还会dr$unindexed 表,把满足条件还未索引的记录找出来
alter index idx_auction_db1 rebuild parameters('replace metadata transactional')
例子:
select count(*) from table where contains(text, 'someword') > 0; -- 0 hits
insert into table values ('someword');
select count(*) from table where contains(text, 'someword') > 0; -- 1 hit (the one we just
entered)
rollback;
select count(*) from table where contains(text, 'someword') > 0; -- 0 hit
仅仅是对某个session 启用
exec ctx_query.disable_transactional_query := TRUE;
 
参考文档:
http://tahiti.oracle.com
http://yangtingkun.itpub.net
http://epub.itpub.net/4/1.htm
http://www.oracle.com/global/cn/oramag/oracle/04-sep/o54text.html
http://www.oracle.com/technology/products/text/x/10g_tech_overview.html
http://forums.oracle.com/forums/thread.jspa?messageID=1958708
 
 

运维网声明 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-252475-1-1.html 上篇帖子: Oracle 10G First Release的新特性简介(上) 下篇帖子: Oracle XA JTA事务报错 不支持XA事务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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