Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子

C#文件检索的例子,目录检索 文件检索的例子,文件的加载,删除,修改, 立即下载

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 包的执行权限,命令如下:

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;

 

用 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 的同步和优化。

  • 同步 sync

将新的 term 保存到 I 表。

create or replace procedure sync is
begin
execute 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 表删除。

declare
v_job number;
begin
Dbms_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 语句查看此表的内容。


【国民技术N32项目移植】基于 Windows 的 ARM GCC 开发环境 阅读详情

相关推荐

FFT去除频率分量的完整流程与数学分析

重叠与窗口:确保块间无缝过渡,避免幅度跳变;实时缓冲:处理速度需快于数据输入速度,避免断流;DAC的平滑角色:通过数模转换和滤波,将离散样点还原为连续波形。通过这种分段处理+重叠拼接的方法,即使FFT本身处理的是离散数据块,最终DAC输出仍能保持信号的时间连续性。以下是完整的数学分析过程和代码逻辑,演示如何通过FFT去除特定频率成分,并通过去窗技术恢复信号。信号加窗。

林愿留的博客 1606

oracle的全文索引

已有几个项目组开始使用oracle的全文索引。Oracle的词法分析器针对ZHS16GBK字符集的词法分析尚不够智能,只能机械地以字为单元进行匹配。对于utf8字符集的数据库有一个新的汉语分析器chinese_lexer,效率有了很大改善。现将验证并整理过的如何进行oracle全文索引设置的文档发给大家,适用于8i、9i各平台版本。 对于DB2,有一个叫做TIE(Text Information...

xiadongxilou的博客 320

博途AI助手演示,完成简单且重复的梯形图代码,并导入到博途

自写个博途AI助手,下面演示AI帮我生成完善多个模拟量输入转换的代码,

gsjkwg的博客 1523

天津大学大作业数据库原理

数据库原理 第一组: 一、 SQL 语句编写题 (一) 编写 SQL 语句 对于教学数据库的三个基本表 学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE) 课程 C(C#,CNAME,TEACHER) 试用 SQL 语句表示:检索 Liu 同学学的课程号。 (二) 编写 SQL 语句 建立一个学生关系表 Student,表中有 5 个字段:学号 Sno(字符型)、姓名 Sname(字符型)、 性别 Sex(字符型)、年龄 Age(整型)、系别 Dep..

网络教育的博客 5549

1.2 重叠因子:双重指数移动平均(Double Exponential Moving Average, DEMA)概念与Python实战

双重指数移动平均(Double Exponential Moving Average, DEMA)是一种改进的移动平均线指标,由Patrick Mulloy在1994年开发。相比传统的指数移动平均线(EMA),DEMA通过减少滞后性来提供更快的市场反应。它通过两次计算EMA并进行特殊组合来实现这一目标,可以在保持平滑性的同时减少滞后。

Kewin的博客 2166

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3774

数据库系统原理复习题(十)——期末复习题

数据库系统原理复习题(十)——期末复习题 1.在数据操作语言(DML)的基本功能中,不包括的是( ) (4分) A. 描述数据库结构 B. 对数据库中数据排序 C. 删除数据库中数据 D. 插入新数据 正确答案:A. 你当前选择:A. 2.在数据库技术中,未提交的随后又被撤消的数据称为( ) (4分) A. 冗余数据 B. 错误数据 ...

java开发指南博客 【转载】 1322

trae CN 配置ida的mcp教程

本文介绍了在TraeCN中配置IDA Pro MCP服务的完整步骤:1)准备IDA Pro 9.0+和Python 3.11+环境;2)安装MCP服务端并配置插件;3)生成MCP配置文件;4)在TraeCN中添加HTTP类型MCP服务(默认端口13337);5)测试连接。重点说明了HTTP配置方式的操作流程,包括手动启动服务、正确填写JSON配置等关键环节。

2401_87915504的博客 1953

SQL Server 2005系列教学(6) 多表操作及子查询

多表查询; 人事表:                                                               公司表: 姓名    性别    年龄 姓名    公司     地址 张三    男       25 李四    女       25 张三    新浪      北京 李四    网易      广州 ...

weixin_33857230的博客 192

Zynq7000混合启动方案:QSPI Flash引导与eMMC ext4文件系统部署实战

本文详细介绍了Zynq7000平台的混合启动方案,结合QSPI Flash引导与eMMC ext4文件系统部署,解决嵌入式Linux系统启动可靠性与大容量存储需求。通过硬件连接配置、分区规划、Petalinux工程配置及实战部署步骤,帮助开发者高效实现系统优化,提升启动速度和文件系统性能。

weixin_29190169的博客 446

从统一入口到运营中枢:全面看懂 SAP for Me 的能力边界、使用方式与项目价值

SAP for Me 是 SAP 推出的统一工作平台,旨在整合原本分散在多个系统中的关键信息与操作。它将许可证管理、系统状态、支持工单、维护合同、产品路线图等核心功能集中到一个界面,为不同角色提供定制化视图。平台包含多个功能模块:Home 作为个性化工作台展示待办事项与风险;Calendar 整合各类维护事件与关键时间节点;Reporting 提供跨域分析与趋势洞察;Finance & Legal 管理订单、发票与合规事项;Portfolio & Products 则展示产品全景与路线图。该

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 119

oracle 全文检索步骤,Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子

本文是.NET下用 C# 实现 Oracle Text(Oracle全文检索)的一个简单例子,旨在初步了解Oracle全文检索的大概步骤,你可以此基础上扩展,进行进一步的学习。Oracle全文检索的步骤如下:(1) 建表并装载文本。(2) 建立索引。如果想配置Oracle索引,可以在建立索引前进行配置,如:改变词法分析器。可以下面SQL语句查看Oracle全文检索的配置:SELECT * FROM...

weixin_33641311的博客 276

Openclaw接入大模型API,操作本地windows文件

本文介绍了在WSL2环境下配置OpenClaw使用阿里百炼API的方法。主要内容包括:1)确认WSL2安装完成;2)配置阿里百炼API(需注意Qwen3-Max-Thinking为收费模型);3)提供正确的JSON配置格式示例,强调apiKey必须填写真实值;4)说明配置错误需修改Linux配置文件;5)建议通过询问模型信息验证连接成功。后续将介绍如何切换免费API及本地文件访问功能。

qq_27246521的博客 988

oracle 文本检索,Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子

本文内容参考资料修改记录Oracle 全文检索Oracle 全文检索主要针对 CLOB 或 XMLTYPE 类型的字段,当然 varchar2 也可以,XMLTYPE 本质上也是 CLOB。本文是用 C# 实现 Oracle Text(Oracle 全文检索)的一个简单例子,旨在初步了解 Oracle 全文检索的大概步骤,你可以此基础上扩展,进行进一步的学习。Oracle 全文检索的步骤如下:(1...

weixin_29863361的博客 255

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C#+ASP.NET+Oracle时积累的备忘点滴

在asp.net中,如何回车触发指定按钮的事件?假设:  解决方法:在.aspx页面中添加:function EnterKeyClick(button) {     if (event.keyCode == 13)  {          event.keyCode=9;  event.returnValue = false;  document.all[button].click();  }} 

yanpeiling的专栏 577

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c# update Oracle带参数 写法

刚刚从MySql/MSSQL数据库转到Oracle,用C#调用时一直更新不成功 ,后来发现是传参数格式不正确的问题。 Oracle里的command 要在参数名前用冒号:标注。SqlServer和MySQL都是用@。 见http://www.codeproject.com/Questions/618582/ORA-00936-missing-expression public ...

A63236343的博客 842

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

oracle nclob改为text,C#访问Oracle数据库CLOB类型,如何新增,修改。多谢!

.net 专家,你好,我现在使用C#开发oracle 11G项目,涉及到大对象字段,可以保存,但修改的时候不行。我的代码如下:public int Edit(Doc_Model model){string sql="UPDATE TB_PX_DOC SET ID=:ID,TITLE=:TITLE,DCONTEXT=:DCONTEXT WHERE ID=:ID";OracleParameter[] ...

weixin_39559486的博客 294

c#中连接Oracle数据库的几种方式展示

https://www.cnblogs.com/gguozhenqian/p/4262813.html https://blog.youkuaiyun.com/a720561252803/article/details/99410074?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-

爱她就要努力 1729

oracle实例存放在哪,Oracle存储过程例子

Dal.csOracleCommand myCmd = new OracleCommand(); --实例化myCmd.CommandType = CommandType.StoredProcedure; ---存储过程名称myCmd.CommandText = "PK_APAR.GET_ORG_TRADING_RECORD"; ---存储过程名称myCmd.Parameters.Add("...

weixin_35060251的博客 292

C# 迁移Oracle数据库视图

本文实现oracle 数据库视图的迁移

shuaishifu的专栏 1906

C#程序运行报错Error while trying to retrieve text for error ORA-12154

首先说明一下,困扰了我好久的一个问题,终于解决了,记录一下,以备后用!顺便给遇到同样问题的同学,提供一个参考!     最近用C#写了个Winform的程序,其中要访问Oracle数据库,访问的Oracle安装版本是oracle 9i,在VS2012本地调试运行,好好的,一切正常,但是当我用Inno 5打包软件打包后,安装打包后的exe成功后,一登录就报错,错误信息如下所示: “System.

Yuer210414的博客 2689

C#读取Oracle的Long字段中的长字符串

有的人在Oracle数据库中用Long类型存储长字符串(例如转成Base64的图片), 官方已经不推荐了, 但项目中还是遇到了, 读取方法如下 C#读取Oracle的Long字段中的长字符串(大于32K) 关键代码是: command.InitialLONGFetchSize = -1; var ConnString = lblConnString.Text using (OracleConnection connection = new OracleConnection(ConnString)) {

包子大叔的笔记 1116

C# 在Oracle中写入CLOB数据

  Table Schema:   CREATE TABLE "SA"."TB_NCLOB"   ("ID" NUMBER(8,0) NOT NULL ENABLE, "NAME" VARCHAR2(20 BYTE), "TEXT" CLOB)   C# 代码    public static void InsertWithLob() { ...

weixin_30407613的博客 379
上一篇: System.Web.HttpException: 超过了最大请求长度。
下一篇: ORACLE存储过程基础知识
OilAlways
博客等级 码龄17年 57粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值