Oracle Text的USER_DATASTORE的问题

winterchipmunk 2004-08-26 04:12:53
我现在用oracle 9i的Oracle Text来做全文检索。现在想将一个表中的多个列(包含blob列)创建到一个索引。我用的是USER_DATASTORE的BLOB类型。但是索引能够创建成功,可是查不到任何数据,不知道是为什么?

具体实施如下:

-- 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;

...全文
125 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuxingyuan 2005-08-30
  • 打赏
  • 举报
回复
guanzhu
winterchipmunk 2004-08-26
  • 打赏
  • 举报
回复
另外,filter改成CTXSYS.NULL_FILTER也不行。
如何设计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; /

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧