Oracle Text遭遇战[2009 12 31 16:15]
手头正在进行一个项目,需要全文检索,经过同事仔细搜索发现:oracle提供oracle text的全文检索功能。
oracle text的简单应用经同事测试结果正常,按照项目要求(项目预定方案word文档存入数据库(blob类型))使用oracle text查询结果确是为空,同事研究到此中断。
BOSS见我对oracle兴趣浓厚,让我接手,于是我临时抱佛脚开始学习oracle text,琢磨出一些大概头绪,步骤如下:1)授权ctxsys角色;2)建表;3)设置索引参数、创建索引;4)查询。头绪归头绪,但是卡住同事的问题同样卡住我,我开始怀疑string型无法与blob型匹配查询,后又发现许多人都是直接将字符串插入blob型列,至此陷入迷茫,最终决定在CSDN发帖求助,经一位热心人(在此感谢CSDN的Denonly )提示word文档转化为二进制后得到的可能不全是文本内容,终大悟!
后让同事把一个TXT文本转化后存入数据库,使用老方法查询,查询结果正确!大喜!查询过程可行,问题肯定在blob!
不过途中又走了一些弯路,oracle中存储外部OS文件路径,oracle text直接对这些文件检索,可惜没能证明可行还是不可行,留下一个悬念。
经过百度的乱七八糟搜索发现一个帖子,上面阐述了在创建索引前设定不同filetr选项的效果,其中CTXSYS.INSO_FILTER可以对一些二进制文件的文本部分和非文本部分过滤分离,百度得到一些优化检索的设置,在创建索引时加入FILTER选项的设置,再次尝试检索,终于OK.......内牛满面
贴出脚本:
--优化检索条件
begin
ctx_ddl.create_preference('mylex','BASIC_LEXER');
ctx_ddl.set_attribute('mylex','printjoins','_-');
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;
/
begin
ctx_ddl.create_preference('cnlex','CHINESE_LEXER');
end;
/
--设置索引参数,创建索引
drop index t_fileinfo_idx force;
create index t_fileinfo_idx on fileinfo(text)
indextype is ctxsys.context
parameters ('DATASTORE CTXSYS.DIRECT_DATASTORE FILTER C
相关文档:
--如何在oracle中导入dmp数据库文件?
2006/2/16 zhanghua first create
数据导入导出imp/exp就相当于ora ......
select f.tablespace_name,a.total,u.used,f.free,round((u.used/a.total)*100) "% used", round((f.free/a.total)*100) "% Free"
from
(select tablespace_name, sum(bytes/(1024*1024)) total
from dba_data_files group by tablespace_name) a,
(select tabl ......
ORACLE中字段的数据类型
字符型 char 范围 最大2000个字节 定长
char(10) '张三' 后添空格6个把10个字节补满 '张三 &nb ......