Oracle_C# 實(shí)現(xiàn) Oracle Text(全文檢索)的一個(gè)簡單例子 |
發(fā)布時(shí)間: 2012/9/4 17:58:28 |
本文內(nèi)容 Oracle 全文檢索
(1) 授權(quán)相應(yīng) Oracle 用戶具有全文檢索的權(quán)限; (2) 建表并插入數(shù)據(jù); (3) 建立索引。如果想配置 Oracle 全文檢索的索引,可以在建立索引前進(jìn)行配置,如:改變詞法分析器?梢杂孟旅 SQL 語句查看 Oracle 全文檢索的配置情況: SELECT * FROM CTX_PREFERENCES; (5) 索引維護(hù):同步與優(yōu)化。
授權(quán) (1) 用 SYS用戶 授予 SCOTT 用戶 CTXAPP 角色,命令如下: GRANT CTXAPP TO SCOTT;
創(chuàng)建表、插入記錄和創(chuàng)建全文檢索索引 首先,執(zhí)行下面 SQL,創(chuàng)建 DOCS 表,并插入兩條記錄,提交后創(chuàng)建索引 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 語句在全文檢索中進(jìn)行檢索 SELECT ID FROM DOCS WHERE CONTAINS(TEXT,'%FIRST%')>0 若用 C# 執(zhí)行,則如下: 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()); 最近做項(xiàng)目從 Oracle 10g 改成 11g,在進(jìn)行全文檢索時(shí),Oracle 10g 下的代碼,在 11g 下檢索不到結(jié)果。初步認(rèn)為,Oracle 9i 和 10g 與 11g 的區(qū)別是,在 9i 和 10g 下,如果不使用“%”,則是精確檢索,否則是模糊檢索。而在 11g 下,則完全不用“%”。 另外,在 9i 和 10g 下,可以使用如下 SQL,進(jìn)行檢索: CONTAINS(TEXT,'%FIRST% AND %second%')>0 CONTAINS(TEXT,'%FIRST%')>0 AND CONTAINS(TEXT,'%second%')>0;
同步和優(yōu)化 同步 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;
本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |