<b>若何更好的操纵Oracle全文检索-入门底子</b>[Oracle防范]
本文“<b>若何更好的操纵Oracle全文检索-入门底子</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
不利用Oracle text功效,也有很多办法可以在Oracle数据库中搜索文本.可以利用尺度的INSTR函数和LIKE操作符实现.
|
有很多时刻,利用instr和like是很抱负的, 分外是搜索仅超越很小的表的时刻.但是通过这些文本定位的办法将招致全表扫描,对资源来说损耗对比高贵,并且实现的搜索功效也非常有限,因此对海量的文本数据举行搜索时,倡议利用oralce供应的全文检索功效 成立全文检索的
步骤步骤一 查抄和设置数据库角色
首先查抄数据库中能否有CTXSYS用户和CTXAPP脚色.假如没有这个用户和角色,意味着你的数据库成立时未安装intermedia功效.你必须改正数据库以安装这项功效. 默许安装情形下,ctxsys用户是被锁定的,因此要先启用ctxsys的用户.
步骤二 赋权
在ctxsys用户下把ctx_ddl的履行权限赋于要利用全文索引的用户,例:
grant execute on ctx_ddl to pomoho; |
步骤三 设置词法解析器(lexer)
Oracle实现全文检索,其机制其实很简单.即通过Oracle专利的词法解析器(lexer),将文章中全部的表意单元(Oracle 称为 term)找出来,记录在一组 以dr$开首的表中,同时记下该term呈现的位置、次数、hash 值等信息.检索时,Oracle 从这组表中查找呼应的term,并计算其呈现频率,按照某个算法来计算每个文档的得分(score),即所谓的‘匹配率’.而lexer则是该机制的核心,它决意了全文检索的效率.Oracle 针对差别的语言供应了差别的 lexer, 而我们普通能用到此中的三个:
n basic_lexer: 针对英语.它能按照空格和标点来将英语单词从句子中别离,还能自动将一些呈现频率太高已经失去检索意义的单词作为‘垃圾’处理,如if , is 等,具有较高的处理效率.但该lexer利用于汉语则有很多问题,由于它只认空格和标点,而汉语的一句话中普通不会有空格,因此,它会把整句话作为一个term,事实上失去检索本领.以‘中国人民站起来了’这句话为例,basic_lexer 解析的后果只有一个term ,就是‘中国人民站起来了’.此时若检索‘中国’,将检索不到内容.
n chinese_vgram_lexer: 专门的汉语解析器,支持全部汉字字符集(ZHS16CGB231280 ZHS16GBK ZHT32EUC ZHT16BIG5 ZHT32TRIS ZHT16MSWIN950 ZHT16HKSCS UTF8 ).该解析器按字为单元来解析汉语句子.‘中国人民站起来了’这句话,会被它解析成以下几个term: ‘中’,‘中国’,‘国人’,‘人民’,‘民站’,‘站起’,起来’,‘来了’,‘了’.可以看出,这种解析办法,实现算法很简单,并且能实现‘一网打尽’,但效率则是差强人意.
n chinese_lexer: 这是一个新的汉语解析器,只支持utf8字符集.上面已经看到,chinese vgram lexer这个解析器由于不熟习常用的汉语词汇,因此解析的单元非常机械,像上面的‘民站’,‘站起’在汉语中根本不会单独呈现,因此这种term是没有意义的,反而影响效率.chinese_lexer的最大改良就是该解析器 能熟习大部份常用汉语词汇,因此能更有效率地解析句子,像以上两个笨拙的单元将不会再呈现,极大 提高了效率.但是它只支持 utf8, 假如你的数据库是zhs16gbk字符集,则只能利用笨笨的那个Chinese vgram lexer.
假如不做任何设置,Oracle 缺省利用basic_lexer这个解析器.要指定利用哪一个lexer, 可以这样操作:
第一. 当前用户下下成立一个preference(例:在pomoho用户下履行以下语句)
|
第二. 在成立全文索引索引时,指明所用的lexer:
|
这样成立的全文检索索引,就会利用chinese_vgram_lexer作为解析器.
以上是“<b>若何更好的操纵Oracle全文检索-入门底子</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |