首页 > 数据库 >【引用】Oracle全文检索方面的研究(全9)

【引用】Oracle全文检索方面的研究(全9)

时间:2023-09-21 11:34:08浏览次数:48  
标签:index 索引 -- text oracle 全文检索 引用 Oracle 3.10


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

 

 

标签:index,索引,--,text,oracle,全文检索,引用,Oracle,3.10
From: https://blog.51cto.com/u_16255870/7552220

相关文章

  • oracle查看实例EM端口号、SID设制与一些命令
    一、查看数据库实例的EM端口在ORACLE_HOME\install\portlist.ini文件里面。二、设制数据库实例的SIDSID的长度不能超过8个字符。实例名不能超过30个字符三、常用的一些命令启动/关闭EM:emctlstart/stopdbconsole启动/关闭监听:lsnrctlstart/stop创......
  • oracle 9i 建立oracle 10g dblink
    在oracle9i的机器的tnsnames.ora里配置10g的服务名为:ora10g=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ip)(PORT=1522)))(CONNECT_DATA=(SERVICE_NAME......
  • Oracle表空间操作详解(备份)
    建立表空间CREATETABLESPACEdata01DATAFILE'/oracle/oradata/db/DATA01.dbf'SIZE500MUNIFORMSIZE128k;#指定区尺寸为128k,如不指定,区尺寸默认为64k删除表空间DROPTABLESPACEdata01INCLUDINGCONTENTSANDDATAFILES;修改表空间大小alterdatabasedatafile'/path/NADD......
  • Oracle正则表达式函数
    1、正则表达式中的元字符元字符意思例子\说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配)\n匹配换行符\\匹配\\(匹配(\)匹配)^匹配字符串的开头位置如果A是字符串的第一个字符,^A匹配A$匹配字符串的末尾位置如果B是字符......
  • Oracle的差异增量备份和累积增量备份
    在rman增量备份中,有差异增量和累积增量的概念   1、概念    差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式    累积增量:是备份上级备份以来所有变化的块   因为累积增量是备份上级备份以来所有变化的数据块,所以累积增量需要更......
  • Java 的值传递与引用传递
     实参与形参我们都知道,在Java中定义方法的时候是可以定义参数的。比如Java中的main方法,publicstaticvoidmain(String[]args),这里面的args就是参数。参数在程序语言中分为形式参数和实际参数。形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时......
  • 知识库系统推荐,强大的全文检索与文档分类管理功能
    在我们日常企业运营管理过程中,会积累大量的文档资料,对于我们全体成员来说,这些知识文档都是巨大的财富,所以整合并搭建一套知识库系统是非常有必要的。 知识库系统推荐我们日常工作中产生大量的文档,随着存储技术的进步,使得存储文件的成本越来越低。最终,几乎所有的文档,都被积累下来。......
  • C++ 左/右值及其引用 论述
    说明:本文探讨的是C++11以来的值类别关于左值和右值,在不对其进行详细的划分时,简单的分类方法包括左值持久,右值短暂能取得地址得通常是左值,反之通常是右值(这一方法启示我们一个表达式的类型与其是左值还是右值无关,即相同类型的表达式既可以是左值也可以是右值)右......
  • oracle数据库中查看表空间下各表占用表空间的大小
    背景:在做数据库巡检时,检查大表是必不可少的操作,可以查看各表占用表空间的大小,下面直接上例子,然后表空间名字我写成实际的了selectt.owner,t.segment_name,t.tablespace_name,bytes/1024/1024/1024assizes,q.num_rows,t.segment_typefromdba_segmentstleftjoindba_tablesq......
  • 解决Oracle 11g在用EXP导出时,空表不能导出
    一、问题原因:  11G中有个新特性,当表无数据时,不分配segment,以节省空间  1、insert一行,再rollback就产生segment了。     该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。   2、设置deferred_segment_creation参数     showpa......