Oracle全文索引设置步骤

简介:
导读: 
  已有几个项目组开始使用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天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。 









本文转自 牛海彬 51CTO博客,原文链接:http://blog.51cto.com/newhappy/76885,如需转载请自行联系原作者
目录
相关文章
|
19天前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
7月前
|
Oracle 关系型数据库 Linux
Oracle设置监听之Navicat的锅
Oracle设置监听之Navicat的锅
102 0
|
20天前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
5月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle设置 RMAN 环境:
【7月更文挑战第25天】
72 2
|
5月前
|
Oracle 关系型数据库 Unix
关系型数据库Oracle设置环境变量:
【7月更文挑战第22天】
576 4
|
6月前
|
Oracle 关系型数据库 数据库
Oracle 11G数据库安装步骤及截图操作2
Oracle 11G数据库安装步骤及截图操作
67 0
|
6月前
|
Oracle 安全 关系型数据库
Oracle 11G数据库安装步骤及截图操作1
Oracle 11G数据库安装步骤及截图操作
106 0
|
7月前
|
Oracle 关系型数据库 Java
plsql链接远程Oracle数据库步骤
实际工作中,我们往往需要使用 PLSQL Develope 工具连接远程服务器上的 ORACLE 数据库进行管理,但是由于 ORACLE 安装在本地电脑步骤繁琐,并且会耗费电脑的很大一部分资源,因此,我们寻求一种不需要在本地安装 ORACLE 数据库而能直接使用 PLSQL Develope 工具连接到远程服务器 ORACLE 的方法。
114 2
|
7月前
|
Oracle 关系型数据库 数据库
oracle 重启步骤及踩坑经验
oracle 重启步骤及踩坑经验
270 0
|
Oracle 关系型数据库 Linux
Oracle设置连接数进程数会话数
Oracle设置连接数进程数会话数
253 0

推荐镜像

更多