Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子

2014-11-24 18:53:26 · 作者: · 浏览: 0


Oracle 全文检索主要针对 CLOBXMLTYPE 类型的字段,当然 varchar2 也可以,XMLTYPE 本质上也是 CLOB


本文是用 C# 实现 Oracle Text(Oracle 全文检索)的一个简单例子,旨在初步了解 Oracle 全文检索的大概步骤,你可以此基础上扩展,进行进一步的学习。Oracle 全文检索的步骤如下:


(1) 授权相应 Oracle 用户具有全文检索的权限;


(2) 建表并插入数据;


(3) 建立索引。如果想配置 Oracle 全文检索的索引,可以在建立索引前进行配置,如:改变词法分析器。可以用下面 SQL 语句查看 Oracle 全文检索的配置情况:


(4) 用 SQL 语句在全文检索中进行检索;


(5) 索引维护:同步与优化。



执行全文的用户必须具有 CTXAPP角色 或 CTXSYS用户,以及 CTX_DDL包 执行权限。


(1) 用 SYS用户 授予 SCOTT 用户 CTXAPP 角色,命令如下:


(2) 用 CTXSYS 用户 给 SCOTT 用户 授权 CTX_DDL 包的执行权限,命令如下:



以下 SQL 语句和 JOB 都在 SCOTT 用户下执行。


首先,执行下面 SQL,创建 DOCS 表,并插入两条记录,提交后创建索引 doc_index




可以使用下面 SQL 语句进行检索:


其中,">0" 是有效的 Oracle SQL 必需的,因为,Oracle SQL 不支持函数布尔返回值,即 "CONTAINS(TEXT,'%FIRST%')>0"。但是在 Oracle 9i 和 10g 与 11g 下有所不同。


若用 C# 执行,则如下:



当 DOCS 表发生变化(插入,删除)后,索引也必须能反应这个变化,这就需要对索引进行同步和优化。可以使用下面的 job 来完成 Oracle ctx 的同步和优化。


将新的 term 保存到 I 表。


清除 I 表的垃圾,将已经被删除的 term 从 I 表删除。