Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子
Oracle 全文检索主要针对 CLOB 或 XMLTYPE 类型的字段,当然 varchar2 也可以,XMLTYPE 本质上也是 CLOB。本文是用 C# 实现 Orac
本文内容
Oracle 全文检索
Oracle 全文检索主要针对 CLOB 或 XMLTYPE 类型的字段,当然 varchar2 也可以,XMLTYPE 本质上也是 CLOB。
本文是用 C# 实现 Oracle Text(Oracle 全文检索)的一个简单例子,旨在初步了解 Oracle 全文检索的大概步骤,你可以此基础上扩展,进行进一步的学习。Oracle 全文检索的步骤如下:
(1) 授权相应 Oracle 用户具有全文检索的权限;
(2) 建表并插入数据;
(3) 建立索引。如果想配置 Oracle 全文检索的索引,可以在建立索引前进行配置,如:改变词法分析器。可以用下面 SQL 语句查看 Oracle 全文检索的配置情况:
SELECT * FROM CTX_PREFERENCES;
(4) 用 SQL 语句在全文检索中进行检索;
(5) 索引维护:同步与优化。
授权
执行全文的用户必须具有 CTXAPP角色 或 CTXSYS用户,以及 CTX_DDL包 执行权限。
(1) 用 SYS用户 授予 SCOTT 用户 CTXAPP 角色,命令如下:
GRANT CTXAPP TO SCOTT;
(2) 用 CTXSYS 用户 给 SCOTT 用户 授权 CTX_DDL 包的执行权限,命令如下:
CTX_DLL TO SCOTT;
创建表、插入记录和创建全文检索索引
以下 SQL 语句和 JOB 都在 SCOTT 用户下执行。
首先,执行下面 SQL,创建 DOCS 表,并插入两条记录,提交后创建索引 doc_index。
DOCS (id NUMBER doc_index ON DOCS(text) INDEXTYPE IS CTXSYS.CONTEXT;
用 SQL 语句在全文检索中进行检索
可以使用下面 SQL 语句进行检索:
SELECT ID FROM DOCS WHERE CONTAINS(TEXT,'%FIRST%')>0
其中,">0" 是有效的 Oracle SQL 必需的,因为,Oracle SQL 不支持函数布尔返回值,即 "CONTAINS(TEXT,'%FIRST%')>0"。但是在 Oracle 9i 和 10g 与 11g 下有所不同。
若用 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
但在 11g 下不可以,要分开写:
CONTAINS(TEXT,'%FIRST%')>0 AND CONTAINS(TEXT,'%second%')>0;
感觉 11g 下的全文检索更好。
同步和优化
当 DOCS 表发生变化(插入,删除)后,索引也必须能反应这个变化,这就需要对索引进行同步和优化。可以使用下面的 job 来完成 Oracle ctx 的同步和优化。
将新的 term 保存到 I 表。
||;||;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 语句查看此表的内容。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。
