欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle全文检索(oracle text)记录

程序员文章站 2022-07-01 15:29:58
...
[size=large]
1.全文检索和普通检索的区别

不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作:

SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0;SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';
有很多时候,使用instr和like是很理想的, 特别是搜索仅跨越很小的表的时候。然而通过这些文本定位的方法将导致全表扫描,对资源来说消耗比较昂贵,而且实现的搜索功能也非常有限,因此对海量的文本数据进行搜索时,建议使用oralce提供的全文检索功能。

附:这里顺带记录一下INSTR和LIKE:

Oracle中,可以使用 Instr 函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:Instr(string, substring, position, occurrence)。

string:代表源字符串(写入字段则表示此字段的内容)。

substring:代表想从源字符串中查找的子串。

position:代表查找的开始位置,该参数可选的,默认为1。

occurrence:代表想从源字符中查找出第几次出现的substring,该参数也是可选的,默认为1。

position 的值为负数,那么代表从右往左进行查找。

instr和like的性能比较

其实从效率角度来看,谁能用到索引,谁的查询速度就会快。

like有时可以用到索引,例如:name like ‘李%’,而当下面的情况时索引会失效:name like ‘%李’。所以一般我们查找中文类似于‘%字符%’时,索引都会失效。与其他数据库不同的是,oracle支持函数索引。例如在name字段上建个instr索引,查询速度就比较快了,这也是为什么instr会比like效率高的原因。

注:instr(title,’手册’)>0 相当于like‘%手册%’

instr(title,’手册’)=0 相当于not like‘%手册%’

2.设置全文检索
步骤步骤一:检查和设置数据库角色

首先检查数据库中是否有CTXSYS用户和CTXAPP脚色。如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能(10G默认安装都有此用户和角色)。你必须修改数据库以安装这项功能。默认安装情况下,ctxsys用户是被锁定的,因此要先启用ctxsys的用户。
步骤二:赋权
步骤三:创建分析器(lexer)
步骤四:创建索引
步骤五:测试

[/size]

--创建oracle全文检索
--1.解锁ctxsys用户,在system用户下操作
alter user ctxsys account unlock;
--2.将ctx_ddl包的操作权限赋给用户,在system用户下操作
grant execute on ctx_ddl to tfyj;
--3.创建分析器,在tfyj用户下
exec ctx_ddl.create_preference ('tfyj_lexer', 'chinese_vgram_lexer');
--4.创建过滤词组(没用到)
exec ctx_ddl.create_stoplist('my_stoplist');
--5.自定义过滤词组(没用到)
ctx_ddl.add_stopword('my_stoplist','有限公司');
ctx_ddl.add_stopword('my_stoplist','股份有限公司');
--6.创建索引,在台风预警用户下创建
create index tfyj_facility_INDEX on f_tower(TOWER_NAME) indextype is CTXSYS.CONTEXT parameters('lexer tfyj_lexer');

--7.查询测试
select score(1),t.* from f_tower t where contains(tower_name,'110kv 濠保线 N8 ',1)>0 order by score(1) desc;


[size=large]详情http://yupengcc.iteye.com/blog/1267205[/size]
相关标签: oracle 全文检索