没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论















如何更好的利用 Oracle 全文检索
不使用 Oracle text 功能,也有很多方法可以在 Oracle 数据库中搜索文本.可以使用标准的 INSTR
函数和 LIKE 操作符实现。
SELECT * FROM mytext WHERE INSTR (thetext, 'Oracle') > 0;
SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';
有很多时候,使用 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: ‘中’,‘中
国’,‘国人’,‘人民’,‘民站’,‘站起’,起来’,‘来了’,‘了’。可以看出,这种
分析方法,实现算法很简单,并且能实现‘一网打尽’,但效率则是差强人意。
资源评论


小小哭包
- 粉丝: 912
- 资源: 3683
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
