oracle數據庫的全文檢索?
Oracle全文檢索配置方法:
1.檢查數據庫是否具有全文檢索功能(這是針對已經建成使用的數據庫)
查看用戶中是否存在ctxsys用戶,查詢角色里是否存在ctxapp角色。以上兩個中的1個不滿足(不存在),則說明沒有裝過全文檢索功能。
使用contains函數的時候,若沒有全文檢索則會報錯的。
2.若沒有,則需要手動建立,先建立全文檢索要使用的空間
sqlplus / as sysdba --進入控制臺
create tablespace Idx_ctxsys datafile '/oradata/sg186fx/ctxsys01.dbf size 10240M autoextend on next 32M maxsize 20480M;--創建全文檢索使用的表空間
3.創建全文檢索使用的用戶和角色及相應的包,則需要執行oracle自帶的一個腳本:cd $ORACLE_HOME/ctx/admin/catctx.sql
還是在sqlplus中執行:
@?/ctx/admin/catctx.sql ctxsys Idx_ctxsys temp nolock
在執行這個腳本的時候,輸入了幾個參數,第一個參數ctxsys為ctxsys用戶的密碼
第二個參數Idx_ctxsys為ctxsys用戶要使用的表空間
第三個參數temp為ctxsys用戶使用的臨時表空間
第四個參數nolock為ctxsys用戶處于解鎖狀態。
4.創建完成后,要登錄ctxsys用戶
connect ctxsys/ctxsys
執行以下腳本:@?/ctx/admin/defaults/drdefus.sql(這是個很重要的腳本,后面創建索引會使用該腳本創建的信息)
5.創建全文索引語法分析器
先要明確使用全文索引的用戶,我要使用全文索引的是sgpm用戶
因此
grant execute on ctxsys.ctx_ddl to sgpm with grant option;
connect sgpm/sgpm
設置語法分析器:
exec ctx_ddl.drop_preference('chinalexer');exec ctx_ddl.create_preference('chinalexer','chinese_lexer');
設置詞法屬性:
exec ctx_ddl.drop_preference('idx_c_store');
beginctx_ddl.create_preference('idx_c_store','BASIC_STORAGE');ctx_ddl.set_attribut('idx_c_store','I_TABLE_CLAUSE','tablespaces Idx_ctxsy');ctx_ddl.set_attribute('idx_c_store','I_INDEX_CLAUSE','tablespace Idx_ctxsy compress 2');end;/
6.創建索引
create index sgpm.idx_c_cons_name on sgpm.c_cons(cons_name) indextype is ctxsys.context parameters('lexer chinalexer storage idx_c_store');
7.同步索引
variable jobno number;begindbms_job.submit(:jobno,'pkg_sp_tools.p_cont_sys_index();',sysdate,'trunc(sysdate)+19/24+1'); --執行的是個性化方法。end;/
普通的就是用:
exec ctx_ddl.sync_index('idx_c_cons_name');
到此,全文檢索創建成功,contains函數就可以正常使用了。
注意:創建的過程中會出現ORA-29879:cannot create multiple domain index on a column listusing same indextype ,這說明在其他用戶下已經建立了該索引。