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表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
10053事件是oracle提供的用于跟踪sql语句成本计算的内部事件,
它能记载CBO模式下oracle优化器如何计算 sql成本,生成相应的执行计划。
如何设置10053事件
设置本session的10053
开启:
Alter session set events’10053 trace name context forever[,level {1/2}]’;
关闭:
Alter session set events& ......
ORACLE中字段的数据类型
字符型 char 范围 最大2000个字节 定长
char(10) '张三' 后添空格6个把10个字节补满 '张三 &nb ......
摘自《解析oracle的rownum》作者:chen_liang
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。
(1) rownum 对于等于某值的查询条件
如果希望找到学生表中第一条学生的信息 ......
root@hardy:~# cd /bin
root@hardy:/bin# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2008-04-28 19:59 /bin/sh -> dash
root@hardy:/bin# ln -sf bash /bin/sh
root@hardy:/bin# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2008-05-01 22:51 /bin/sh -> bash
# echo "Red Hat Linux release 4" > /etc/redhat- ......