当前位置:七道奇文章资讯数据防范Oracle防范
日期:2011-01-25 22:55:00  来源:本站整理

<b>若何更好的操纵Oracle全文检索-入门底子</b>[Oracle防范]

赞助商链接



  本文“<b>若何更好的操纵Oracle全文检索-入门底子</b>[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: ‘中’,‘中国’,‘国人’,‘人民’,‘民站’,‘站起’,起来’,‘来了’,‘了’.可以看出,这种解析办法,实现算法很简单,并且能实现‘一网打尽’,但效率则是差强人意.

    n  chinese_lexer: 这是一个新的汉语解析器,只支持utf8字符集.上面已经看到,chinese vgram lexer这个解析器由于不熟习常用的汉语词汇,因此解析的单元非常机械,像上面的‘民站’,‘站起’在汉语中根本不会单独呈现,因此这种term是没有意义的,反而影响效率.chinese_lexer的最大改良就是该解析器 能熟习大部份常用汉语词汇,因此能更有效率地解析句子,像以上两个笨拙的单元将不会再呈现,极大 提高了效率.但是它只支持 utf8, 假如你的数据库是zhs16gbk字符集,则只能利用笨笨的那个Chinese vgram lexer.
假如不做任何设置,Oracle 缺省利用basic_lexer这个解析器.要指定利用哪一个lexer, 可以这样操作:

    第一. 当前用户下下成立一个preference(例:在pomoho用户下履行以下语句)

exec ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');

    第二.   在成立全文索引索引时,指明所用的lexer:

CREATE INDEX myindex ON mytable(mycolumn) indextype is ctxsys.context

parameters('lexer my_lexer');

    这样成立的全文检索索引,就会利用chinese_vgram_lexer作为解析器.


  以上是“<b>若何更好的操纵Oracle全文检索-入门底子</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .