Oracle Text的USER_DATASTORE的问题
具体实施如下:
-- KBUSER创建存储过程
create or replace procedure KBUser.P_BKXX_ORATEXT(ID in rowid, B_TMP in out blob) is
begin
for recTmp in (select C_MC, C_JS, B_GXTB from T_BBS_BKXX where rowid = ID)
loop
dbms_lob.writeappend(B_TMP, length(recTmp.C_MC), recTmp.C_MC);
dbms_lob.writeappend(B_TMP, length(recTmp.C_JS), recTmp.C_JS);
dbms_lob.writeappend(B_TMP, dbms_lob.getlength(recTmp.B_GXTB), recTmp.B_GXTB);
end loop;
end;
/
-- CTXSYS创建执行存储过程
create or replace procedure CTXSYS.s_P_BKXX_ORATEXT(ID in rowid, B_TMP in out blob) is
begin
KBUser.P_BKXX_ORATEXT(ID, B_TMP);
end;
/
-- CTXSYS赋权给KBUser
grant execute on s_P_BKXX_ORATEXT to KBUser;
-- KBUser创建Preference
begin
ctx_ddl.drop_preference('UD_BKXX_GXTB');
ctx_ddl.create_preference('UD_BKXX_GXTB', 'user_datastore');
ctx_ddl.set_attribute('UD_BKXX_GXTB', 'procedure', 's_P_BKXX_ORATEXT');
ctx_ddl.set_attribute('UD_BKXX_GXTB', 'output_type', 'BLOB');
end;
/
-- 创建索引
drop index I_BBS_BKXX_ORATEXT force;
create index I_BBS_BKXX_ORATEXT on T_BBS_BKXX(B_GXTB) indextype is ctxsys.context parameters('datastore UD_BKXX_GXTB lexer TAXLEX filter CTXSYS.INSO_FILTER');
-- 刷新索引
begin
ctx_ddl.sync_index('I_BBS_BKXX_ORATEXT', '2M');
end;
/
-- 查询SQL
select C_MC from T_BBS_BKXX where contains(B_GXTB, 'doc') > 0;
-- 相关表结构
create table KBUser.T_BBS_BKXX
(
N_BH number(15) default 1, --编号
C_MC varchar2(32) null, --名称
C_JS varchar2(4000) null, --介绍
B_GXTB blob null, --个性图标
C_GXTBFMT varchar2(20) default 'binary', --文件格式(binary, text)
primary key(N_BH)
) tablespace TBSForum;
相关推荐
ORACLE全文检索
ORACLE对系统文件的全文检索,支持doc、pdf、文档 目前不支持docx office 07以上版本 有研究 出来的 也分享下
oracle 全文检索
oracle 全文检索 create
oracle全文检索.pdf
Oracle Text 使Oracle9i 具备了强大的文本检索能力和智能化的文本管理能力,Oracle Text 是Oracle9i 采用的新名称,在oracle8/8i 中被称为oracle intermedia text,oracle8 以前是 oracle context cartridge。Oracle Text 的索引和查找功能并不局限于存储在数据库中的数据。 它可以对存储于文件系统中的文档进行检索和查找,并可检索超过150 种文档类型,包括 Microsoft Word、PDF 和XML。Oracle Text 查找功能包括模糊查找、词干查找(搜索mice 和查找mouse)、通配符、相近性等查找方式,以及结果分级和关键词突出显示等。你甚至 可以增加一个词典,以查找搭配词,并找出包含该搭配词的文档。
如何设计oracle10g全文检索
如何设计oracle10g全文检索 /****************************************** * 前提及说明: * 1).portal为应用用户 * 2).当前数据库中必须有CTXSYS用户和CTXAPP角色 * 2008/10/17 yanjianzhong ******************************************/ /*1、使用具有sysdba权限的用户登录/ grant connect,resource to portal; grant ctxapp to portal; alter user portal default role all; /*2、通常ctxsys处于锁定状态,需要解锁ctxsys用户/ alter user ctxsys account unlock; /*3、对象权限/ grant execute on ctx_ddl to portal; /*4、使用应用用户portal连接,设置搜索器类型/ BEGIN ctx_ddl.create_preference ('main_lexer','CHINESE_VGRAM_LEXER'); ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST'); ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE'); ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',1); ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', 5); ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES'); END; / /*5、对clob列建立文档CONTEXT索引,并且指定搜索器/过滤器/单词列表/ CREATE INDEX idx_aritcle_content ON YAKCMS_ARTICLE_INFO(CONTENT) indextype is ctxsys.context parameters ('DATASTORE CTXSYS.DIRECT_DATASTORE FILTER CTXSYS.INSO_FILTER LEXER main_lexer WORDLIST mywordlist'); /*6、执行查询/ select * from YAKCMS_ARTICLE_INFO where contains(CONTENT,'任务')>0 /*7、索引同步/ CREATE or replace procedure cont_sync_index as BEGIN ctx_ddl.sync_index('cms_article_index'); END; / VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'cont_sync_index();', SYSDATE, 'SYSDATE + (1/24/4)'); commit; END; / /*8、索引优化/ CREATE or replace procedure cont_optimize_index as BEGIN ctx_ddl.optimize_index('cms_article_index','FULL'); END; / VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'cont_optimize_index();', SYSDATE, 'SYSDATE + 1'); commit; END; /
Oracle10g实现全文检索
Oracle10g实现全文检索


