星期一, 一月 23, 2006

10g 中的全文检索

在 10g 以前,Oracle提供了一个所谓的ctx server(ctxsrv)来做这个同步和优化的工作,只需要在后台运行这个进程,它会监视数据的变化,及时进行同步。但使用ctxserver常常会碰到了一些问题,而且还要单独开个进程来做这个事情。Oracle support也建议不使用,而且 10g 中已经去掉了这个程序,您可能已经找不到 ctxsrv 这个命令了。其实我们是可以用以下的两个job来完成(该job要建在和表同一个用户下)……

假设是在 oatext 用户下建立全文索引

用system 帐号登陆SQLPLUS

解锁ctxsys用户

alter user ctxsys account unlock;

更改ctxsys用户密码为ctxsys

alter user ctxsys identified by ctxsys;

给予 oatext 用户ctxapp权限:

GRANT CONNECT, RESOURCE, ctxapp TO extext;

索引建立:

第一步:
BEGIN
ctx_ddl.create_preference ('oa_lexer', 'CHINESE_VGRAM_LEXER');
ctx_ddl.create_preference ('oa_datastore_prefs', 'FILE_DATASTORE');
END;

第二步:
CREATE INDEX OADOCS_TEXT_INDEX ON ATTACHFILE(ATTACHDIR) INDEXTYPE IS ctxsys.context PARAMETERS('datastore oa_datastore_prefs

Filter ctxsys.inso_filter Lexer OA_LEXER');


查询建立索引时的错误:

select err_index_name, err_text from ctx_user_index_errors;

用 system 用户给 oatext 用户授权(一定要做)
grant execute on ctx_ddl to oatext;

在 extext 用户下建立JOB 来同步索引(间隔5分钟)

-- sync:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'begin ctx_ddl.sync_index(''OADOCS_TEXT_INDEX''); end;',
SYSDATE, 'SYSDATE + (1/24/12)');
commit;
END;

建立JOB 来优化索引(每天做一次)

-- optimizer
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''OADOCS_TEXT_INDEX'',''FULL'');',
SYSDATE, 'SYSDATE + 1');
commit;
END;


在linux下(注意的):

给oracle用户角色文件夹的权限:755

给oracle用户角色文件的权限:最低要644以上


用SELECT查询

select * from tablename where (docs,'')>0;

tablename 表名,docs是包含字符的字段

注意:现在的同步索引是通过 oracle 的 job 来执行的,oracle 9i 和 oracle 10g 的job 功能都是打开的,可以通过 sysdba 角色查看
SQL> show parameters job

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10

如果 job_queue_processes =0 就需要用下面的命令来打开 JOB 功能

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 10 scope=BOTH;
System altered.

[回复]

需要用另外一个工具运行才不会报错。在企业管理控制台中。

Comment by suwt (12/19/2007 18:38)

执行出错。 [回复]

老大:
在Oracle9i 上执行“在 extext 用户下建立JOB 来同步索引(间隔5分钟)

”这段时,报“无效的SQL”。

是不是9i的语法和10g不一样哇?

Comment by 苏伟特 (09/13/2007 16:05)

发表评论

标题

在此添加评论

称呼

邮箱地址(可选)

个人主页(可选)