Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子
来源:互联网 发布:如何从淘宝上买小黄书 编辑:程序博客网 时间:2024/06/10 05:15
本文是.NET下用 C# 实现 Oracle Text(Oracle全文检索)的一个简单例子,旨在初步了解Oracle全文检索的大概步骤,你可以此基础上扩展,进行进一步的学习。Oracle全文检索的步骤如下:
(1) 建表并装载文本。
(2) 建立索引。如果想配置Oracle索引,可以在建立索引前进行配置,如:改变词法分析器。可以下面SQL语句查看Oracle全文检索的配置:
SELECT * FROM CTX_PREFERENCES;(3) SQL查询。
(4) 索引维护:同步与优化。
授权
执行全文的用户必须具有 CTXAPP角色 或 CTXSYS用户,以及 CTX_DDL包 执行权限。
(1) 用 SYS用户 授予 SCOTT 用户 CTXAPP 角色,命令如下:
GRANT CTXAPP TO SCOTT;(2) 用 CTXSYS 用户 给 SCOTT 用户 授权 CTX_DDL 包的执行权限,命令如下:
GRANT EXECUTE ON CTX_DLL TO SCOTT;
创建表、添加记录和索引
以下的SQL语句和 JOB都在 SCOTT 用户下执行。首先,执行以下 SQL 语句,创建表 DOCS,并插入两条记录,提交后创建索引 doc_index。
DROP TABLE DOCS;CREATE TABLE DOCS (id NUMBER PRIMARY KEY,text VARCHAR2(80));INSERT INTO docs VALUES (1,'the first doc');INSERT INTO docs VALUES (2,'the second doc');COMMIT;CREATE INDEX doc_index ON DOCS(text) INDEXTYPE IS CTXSYS.CONTEXT;然后,执行查询,C#代码如下:
string connStr="Data Source=ora9; uid=scott; pwd=tiger; unicode=true"; string sqlStr = "SELECT ID FROM DOCS WHERE CONTAINS(TEXT,'%FIRST%')>0"; OracleDataAdapter da = new OracleDataAdapter(sqlStr, connStr); DataTable dt = new DataTable(); da.Fill(dt); Response.Write(dt.Rows[0][0].ToString());
同步和优化
当表 DOCS 发生变化(插入,删除)后,索引必须能反应这个变化,这就需要对索引进行同步和优化。Oracle提供 ctx server 完成同步和优化,也可以用以下的job来完成。
同步sync
将新的term保存到I表。
create or replace procedure sync isbeginexecute immediate 'alter index doc_index rebuild online' ||' parameters ( ''sync'' )';execute immediate 'alter index doc_index rebuild online' ||' parameters ( ''optimize full maxtime unlimited'' )';end sync;
优化
清除I表的垃圾,将已经被删除的term从I表删除。
declarev_job number;beginDbms_Job.Submit(job => v_job,what => 'sync;',next_date => sysdate, /* default */interval => 'sysdate + 1/720' /* = 1 day / ( 24 hrs * 30 min) = 2 mins */);Dbms_Job.Run ( v_job );end;
其中,I表是 dr$doc_index$i 表。用户建立索引后,Oracle会自动创建四个表,dr$doc_index$i、dr$doc_index$k、dr$doc_index$n和dr$doc_index$r。可以用SELECT语句查看此表的内容。
说明
(1) 本文是在Oracle 9i和10g环境下完全实现Oracle的全文检索,包括建立表和索引,进行同步和优化;
(2) 进行全文检索的SQL语句是"SELECT ID FROM DOCS WHERE CONTAINS(TEXT,'%FIRST%')>0";
(3) 其中,">0"是有效的Oracle SQL所必需的,因为,Oracle SQL不支持函数的布尔返回值;
(4) 其中,"CONTAINS(TEXT,'%FIRST%')>0",在Oracle 9i和10g与11g下有所不同;
(5) 最近做项目从Oracle 10g改成11g,在进行全文检索时,Oracle 10g下的代码,在11g下检索不到结果;
(6) 初步认为,Oracle 9i和10g与11g的区别是,在9i和10g下,如果不使用“%”,则是精确检索,否则是模糊检索。而在11g下,则完全不用“%”;
(7) 另外,在9i和10g下,可以使用如:CONTAINS(TEXT,'%FIRST% AND %second%')>0,进行全文检索,但在11g下,是不可以的,要分开写,如:
CONTAINS(TEXT,'%FIRST%')>0 AND CONTAINS(TEXT,'%second%')>0;
(8) 感觉11g下的全文检索更好。
- Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子
- Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子
- oracle全文检索简单例子
- Oracle Text 全文检索
- oracle text全文检索
- 转 一个全文检索完整的例子
- Lucene实现简单的全文检索
- 使用lucene实现简单的全文检索
- 帮一个网友写的全文检索的例子
- oracle Text 全文检索 功能适用范围
- 使用Oracle Text进行全文检索
- 基于全文检索引擎Lucene的一个小例子
- 全文检索的应用例子
- 全文检索技术 lucene(一) 一个简单的Demo
- MongoDB的全文检索(Text Search)功能
- Oracle的全文检索技术
- Oracle的全文检索功能
- oracle全文检索的配置
- 关于运行ADL时AIR版本报错
- flex error #2044 securityerror
- Flex参数编译
- (Flex)让Panel可拖动
- xfire+webservice(服务器配置篇)
- Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子
- Flex中的CSS手册(更新中)
- 提升用户体验
- How to chage the default opstion value when adding new products?
- How to Get All Product Images in products list page?
- 开源ECommerce战争: Magento超越OsCommerce而成为最流行开源电子商务系统的秘密
- allegro的快捷键,如何设置allegro 快捷键
- 初探magento的MVC架构(Create new module “HelloWorld” – in Magento)
- Oracle_日期型数据