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.laynepeng.cn】 |