Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子 |
发布时间: 2012/9/4 17:58:28 |
本文内容 Oracle 全文检索
(1) 授权相应 Oracle 用户具有全文检索的权限; (2) 建表并插入数据; (3) 建立索引。如果想配置 Oracle 全文检索的索引,可以在建立索引前进行配置,如:改变词法分析器。可以用下面 SQL 语句查看 Oracle 全文检索的配置情况: SELECT * FROM CTX_PREFERENCES; (5) 索引维护:同步与优化。
授权 (1) 用 SYS用户 授予 SCOTT 用户 CTXAPP 角色,命令如下: GRANT CTXAPP TO 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;
用 SQL 语句在全文检索中进行检索 SELECT ID FROM DOCS WHERE CONTAINS(TEXT,'%FIRST%')>0 若用 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()); 最近做项目从 Oracle 10g 改成 11g,在进行全文检索时,Oracle 10g 下的代码,在 11g 下检索不到结果。初步认为,Oracle 9i 和 10g 与 11g 的区别是,在 9i 和 10g 下,如果不使用“%”,则是精确检索,否则是模糊检索。而在 11g 下,则完全不用“%”。 另外,在 9i 和 10g 下,可以使用如下 SQL,进行检索: CONTAINS(TEXT,'%FIRST% AND %second%')>0 CONTAINS(TEXT,'%FIRST%')>0 AND CONTAINS(TEXT,'%second%')>0;
同步和优化 同步 sync 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; 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;
本文出自:亿恩科技【www.enkj.com】 |