oracle全文索引

--首先检查数据库中是否有CTXSYS用户和CTXAPP脚色。

--如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能。

--你必须修改数据库以安装这项功能。

 


--用sys用户为了用户gzinfo分配权限
grant CTXAPP to gzinfo;
grant execute on ctx_ddl to gzinfo;

 

--回到gzinfo用户

 

--创建测试表,CLOBTEXT字段为需要索引的字段

create table INXTEXT (ID number(13), CLOBTEXT CLOB);


--创建分词,这里用了chinese_vgram_lexer,分词名为GZINFO_LEXER
call ctx_ddl.create_preference ('GZINFO_LEXER', 'chinese_vgram_lexer');

 

--创建索引,索引名为INX_TEST (PARAMETERS 中需要以LEXER开头,替换时用replace)

create index INX_TEST ON INXTEXT (CLOBTEXT) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER INFO_LEXER');

--创建记录表

create table JOBTEST (ID DATE, CONTENT VARCHAR2(200));

 

 

--创建同步存储过程,ctx_ddl.sync_index('INX_TEST')为同步全文索引,同步表字段中的信息

create or replace procedure PROC_SYNC_INDEX
is
begin
ctx_ddl.sync_index('INX_TEST');
insert into JOBTEST values(SYSDATE, '同步任务于'||SYSDATE||'执行');
end;

 

--创建同步优化存储过程,ctx_ddl.optimize_index('INX_TEST','FULL')为优化全文索引
create or replace procedure PROC_SYNC_OPTIMIZE
is
begin
ctx_ddl.sync_index('INX_TEST');
ctx_ddl.optimize_index('INX_TEST','FULL');
insert into JOBTEST values(SYSDATE, '同步优化任务于'||SYSDATE||'执行');
end;

 

--创建定时任务以便同步全文索引

DECLARE
       X NUMBER;
BEGIN
   SYS.DBMS_JOB.SUBMIT
   (
    job        => X
   ,what       => 'PROC_SYNC_INDEX;'
   ,next_date  => SYSDATE
   ,interval   => 'SYSDATE+2/1440'
   );
END;

 

 

--创建定时任务以便同步优化全文索引

DECLARE
       X NUMBER;
BEGIN
   SYS.DBMS_JOB.SUBMIT
   (
    job        => X
   ,what       => 'PROC_SYNC_OPTIMIZE;'
   ,next_date  => SYSDATE
   ,interval   => 'TRUNC(SYSDATE + 1) + 1/(24)'
   );
END;

 

 

你可能感兴趣的:(oracle全文索引)