已有几个项目组开始使用oracle的全文索引。Oracle的词法分析器针对ZHS16GBK字符集的词法分析尚不够智能,只能机械地以字为单元进行匹配。对于utf8字符集的数据库有一个新的汉语分析器chinese_lexer,效率有了很大改善。现将验证并整理过的如何进行oracle全文索引设置的文档发给大家,适用于8i、9i各平台版本。
对于DB2,有一个叫做TIE(Text Information Extend)的插件可以实现全文索引,不过据说它的语法分析也很原始。据介绍使用CM(Content Manager)能做到比较好的全文检索,不过需要装一大堆的软件,不适于简单的应用。
一.创建数据库
1、使用dbassist创建数据库时要选择jserver和intermedia两个选项。
2、检查你的数据库是否安装了intermedia,可以通过检查是否有ctxsys用户和ctxapp角色(role).
3、如果没有这个用户和角色,意味着数据库创建时未安装intermedia功能。必须修改数据库以安装这项功能。修改过程:
运行 $ORACLE_HOME/bin/dbassist, 选择'modify database', 然后在选择数据库功能时将jserver 和 intermedia 都选上(安装intermedia必须同时安装jserver).

二.设置extproc
Oracle 通过 ‘外部调用功能’(external procedure)来实现intermedia的,因此正确地设置extproc是关键一步。 一般数据库安装完jserver和intermedia后在listener.ora 和tnsnames.ora中已经设置了extproc。

1、测试extproc是否正常
重新启动listener,然后,使用tnsping 来测试一下是否配置正确,
命令行下运行
tnsping extproc_connection_data 或者
tnsping extproc_connection_data.world

如果配置正确,会显示:
Attempting to contact (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)) OK(140毫秒)

如果正确,可以跳过2、3步骤。否则请按照步骤2、3设置listener.ora 和tnsnames.ora文件,修改后一定要重新启动listener,但并不需要重新启动数据库。

2、设置listerner.ora
如果tnsping失败,需要配置listener 使它能监听intermedia 调用的请求。可以通过运行$ORACLE_HOME/bin/netassit 来进行配置,也可以手工修改配置文件:$ORACLE_HOME/network/admin/listener.ora ,然后重新启动listener。

下面以一个例子来讲述如何手工修改配置文件:
打开listener.ora文件,在修改前,通常有如下内容(假定使用缺省listener):
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYDATABASE)(PORT = 1521))
)

SID_LIST_LISTENER =
(SID_DESC =
(GLOBAL_DBNAME = mydatabase.world)
(ORACLE_HOME = /u01/app/oracle/product/8.1.6)
(SID_NAME = mydatabase)
)

这个listener还没有配置extproc, 因此,需要为它增加对extproc的监听,办法就是分别增加description 和 sid_desc. 修改后的listner.ora 如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYDATABASE)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = mydatabase.world)
(ORACLE_HOME = /u01/app/oracle/product/8.1.6)
(SID_NAME = mydatabase)
)
(SID_DESC =
(PROGRAM = extproc)
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/8.1.6)
)
)

注意上面的host, global_dbname,sid_name,oracle_home应填写你的数据库的实际值,但program一项必须填写extproc.

3、设置tnsnames.ora
其次,要配置服务器端的tnsnames.ora文件。该文件的位置在$ORACLE_HOME/network/admin下面。同样可以通过运行netasst来进行配置。
在tnsnames.ora文件中需要增加如下一项:
EXTPROC_CONNECTION_DATA,EXTPROC_CONNECTION_DATA.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
)
)
注意其中,KEY 和SID必须与listener.ora中的key 和sid_name对应相同。

三.设置词法分析器(lexer)
Oracle 缺省使用basic_lexer这个分析器。basic_lexer针对英语。要指定使用中文分析器, 操作步骤:
1. 用ctxsys用户登陆intermedia text manager,口令ctxsys:

2.选择首选项——〉语言指示器——〉创建,输入指示器的名字如chinese_lexer,选择lexer下的chinese_vgrnm_lexer 。

3.建立intermedia索引,指定索引名,选择方案和表下的字段,例如system方案下的DOM_1_DOCLIB中的CURRENTTEXT字段,首选项中选择chinese_lexer 。
这样建立的全文检索索引,就会使用chinese_vgram_lexer作为分析器。

4.在索引建好后,在该用户下查到Oracle自动产生了以下几个表,可以使用dba studio查看:(假设索引名为myindex):
DR$myindex$I,DR$myindex$K,DR$myindex$R,DR$myindex$N
其中以I表最重要,查询该表:
select token_text, token_count from DR$I_RSK1$I where rownum<=20;
可以看到该表中保存的是Oracle分析你的文档后,生成的term记录,包括term出现的位置、次数、hash值等。

四.使用job定时同步和优化
在intermedia索引建好后,如果表中的数据发生变化,增加或修改了记录,由于对表所发生的任何dml语句,都不会自动修改索引,因此,必须定时同步(sync)和优化(optimize)索引,以正确反映数据的变化。

同步(sync):将新的term 保存到I表;
优化(optimize):清除I表的垃圾,主要是将已经被删除的term从I表删除。

Oracle提供了一个ctx server来做这个同步和优化的工作,只需要在后台运行这个进程,它会监视数据的变化,及时进行同步。但存在许多问题。可以用下的两个job来完成(该job要建在和表同一个用户下):
-- sync:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''myindex'');',
SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;

-- optimizer
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');',
SYSDATE, 'SYSDATE + 1');
commit;
END;
其中,第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。

oracle的全文索引相关推荐

  1. Oracle建立全文索引详解

    Oracle建立全文索引详解 1.全文检索和普通检索的区别 不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作: SELECT *F ...

  2. oracle 加全文索引,oracle全文索引的创建和使用

    一.设置词法分析器 Oracle实现全文检索,其机制其实很简单.即通过Oracle专利的词法分析器(lexer),将文章中所有的表意单元(Oracle称为term)找出来,记录在一组以dr$开头的表中 ...

  3. Oracle Text 全文索引 几种典型应用场景

    一.普通查询 这是OracleText比较普遍且常用的应用场景.创建OracleText中Context类型的索引,生成大量的关键词,用于加快类似于普通的like '%xx%'操作速度,或者查询一些比 ...

  4. 用oracle建立索引步骤,Oracle建立全文索引的步骤

    Oracle全文索引相信大家都有一定的了解,下面就教您如何建立oracle全文索引,如果您对oracle全文索引方面感兴趣的话,不妨一看. 步骤一 检查和设置数据库角色 首先检查数据库中是否有CTXS ...

  5. oracle 加全文索引,Oracle创建全文索引

    1.创建表空间,有必要将物理文件设置大一些 2.创建基于这个表空间的用户 3.创建需要建立全文索引的表 4.用管理员帐户为使用这用户开发ctx_ddl权限 grant  execute on ctx_ ...

  6. Oracle 全文索引

    缘由 我们经常需要对表的内容进行模糊查询,在数据量不算很大的情况下,使用起来还是没什么问题,因为不会出现明显的慢查询问题.但是当某些时候,单表数据量很大的时候,查询速度就会有明显的变慢问题.此时,我们 ...

  7. oracle全文索引之FILTER_2_INSO_FILTER

    这篇文章继续介绍全文索引的FILTER属性,介绍Oracle的INSO_FILTER属性.[@more@] Oracle的全文索引除了可以支持文本文件外,还可以支持多种文档格式,对于这些文档格式,在建 ...

  8. oracle如何安装全文索引,Oracle全文索引设置步骤

    已有几个项目组开始使用oracle的全文索引.Oracle的词法分析器针对ZHS16GBK字符集的词法分析尚不够智能,只能机械地以字为单元 进行匹配.对于utf8字符集的数据库有一个新的汉语分析器ch ...

  9. Oracle索引知识学习笔记

    目录 一.Oracle索引简介 1.1 索引分类 1.2 索引数据结构 1.3 索引特性 1.4 索引使用注意要点 1.5.索引的缺点 1.6.索引失效 二.索引分类介绍 2.1.位图索引 1.2.函 ...

最新文章

  1. 也谈TDD,以及三层架构、设计模式、ORM……没有免费的午餐,选择了,必付出代价...
  2. 离散数学序关系与相容关系
  3. ssm项目快速搭建(注解)-依赖
  4. 1584 - Circular Sequence
  5. 大型网站性能优化途径
  6. 181027每日一句
  7. react native基础-(一)react和react native基础
  8. 按键精灵修改计算机名,最新按键精灵脚本代码大全 按键精灵命令运行方法
  9. 《手语图像识别系统设计--人体动作识别》设计与实现
  10. python爬腾讯视频地址_腾讯视频爬虫
  11. 用scratch编写游戏-数字华容道(不移动块法)
  12. 如何简单理解光圈大小对手机摄影的影响?
  13. 手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器
  14. 网络摄像机·监控摄像机用 镜头驱动芯片MS41909 功能对标BU24036MW
  15. xcode 配置wechat_Xcode 真机调试微信支付 提示 mainfest.json配置APPID和订单的appid 不一致...
  16. LibGDX_4.1: LibGDX 游戏开发框架
  17. 凯撒密码C语言去掉空格字符,凯撒密码C语言实现
  18. 美国往事 - 追忆我的房东Dick - 搞笑回忆
  19. 远程控制安卓终端步骤笔记
  20. 简单5步,从0开始搭建你的第一款小程序

热门文章

  1. linux 内核编译错误 gcc: error: elf_i386: No such file or directory
  2. linux Centos6.5使用yum安装mysql
  3. linux下访问windows的共享
  4. Android开发--Http操作介绍(二)
  5. 在CMD窗口连接到Mysql
  6. swiper 定义放多少张图片,小程序swiper轮播图,自定义样式,两种方法:原生方法和bindchange方法;将点点改为数字(当前第几张 /总共几张);点击点点跳转当前图片...
  7. C++ - 实现strcmp函数
  8. mysql pom依赖关系_常用的POM依赖
  9. leetcode84 巨魔卡柱子
  10. 共轭梯度下降法matlab,用matlab实现最速下降法,牛顿法和共轭梯度法求解实例