Oracle全文检索示例
第一种方法:
一、创建示例表
CREATE TABLE T_FULLTEXT_DEMO
(
ID NUMBER NOT NULL,
TITLE VARCHAR2(100) NULL,
REMARK VARCHAR2(200) NULL,
FILE_NAME VARCHAR2(200) NULL,
CONSTRAINT T_FULLTEXT_DEMO_PK PRIMARY KEY ( ID )
);
二、对TITLE和REMARK建立索引
BEGIN
CTXSYS.CTX_DDL.CREATE_PREFERENCE('MYMDS','MULTI_COLUMN_DATASTORE');
CTXSYS.CTX_DDL.SET_ATTRIBUTE('MYMDS', 'COLUMNS', 'TITLE, REMARK');
END;
CREATE INDEX T_FULLTEXT_DEMO_IDX ON T_FULLTEXT_DEMO(TITLE) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('DATASTORE MYMDS');
三、建立存储选项参数、语法分析器
BEGIN
--CTX_DDL.DROP_PREFERENCE('MY_LEXER');
--CTX_DDL.DROP_PREFERENCE('MY_DATASTORE_PREFS');
CTX_DDL.CREATE_PREFERENCE ('MY_LEXER', 'CHINESE_VGRAM_LEXER');
CTX_DDL.CREATE_PREFERENCE ('MY_DATASTORE_PREFS', 'FILE_DATASTORE');
CTX_DDL.SET_ATTRIBUTE ('MY_DATASTORE_PREFS', 'PATH', 'E:\Projects\My_Documents; E:\Projects\My_Documents\UML_DOC');
END;
四、对文档建立全文检索索引
CREATE INDEX T_FULLTEXT_DEMO_FILE_IDX ON T_FULLTEXT_DEMO(FILE_NAME) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('DATASTORE MY_DATASTORE_PREFS LEXER MY_LEXER');
五、插入测试数据
INSERT INTO T_FULLTEXT_DEMO(ID,TITLE,REMARK,FILE_NAME) VALUES(1,'德鲁克的《管理:任务、责任、实践》','管理类书籍','德鲁克的《管理:任务、责任、实践》.doc');
INSERT INTO T_FULLTEXT_DEMO(ID,TITLE,REMARK,FILE_NAME) VALUES(2,'PB控件的属性事件和函数','PB技术书籍','PB控件的属性事件和函数.pdf');
INSERT INTO T_FULLTEXT_DEMO(ID,TITLE,REMARK,FILE_NAME) VALUES(3,'微软产品报价','微软软件产品报价','微软产品报价.xls');
INSERT INTO T_FULLTEXT_DEMO(ID,TITLE,REMARK,FILE_NAME) VALUES(4,'JavaScript 5.5','JavaScript语言帮助文档','JavaScript 5.5.CHM');
INSERT INTO T_FULLTEXT_DEMO(ID,TITLE,REMARK,FILE_NAME) VALUES(5,'ASCII码','ASCII码的各种进制表示方式和代表的意思','ASCII码.htm');
INSERT INTO T_FULLTEXT_DEMO(ID,TITLE,REMARK,FILE_NAME) VALUES(6,'UML数据库建模','UML数据库建模的相关知识','UML数据库建模.ppt');
六、同步索引和优化索引
若此时检索,应没有数据。
select * from T_FULLTEXT_DEMO
where contains(TITLE,'管理')>0;
需要将索引同步
BEGIN
CTXSYS.CTX_DDL.SYNC_INDEX('T_FULLTEXT_DEMO_FILE_IDX');
CTXSYS.CTX_DDL.SYNC_INDEX('T_FULLTEXT_DEMO_IDX');
END;
七、测试全文索引
select * from T_FULLTEXT_DEMO
where contains(TITLE,'管理')>0;
select * from T_FULLTEXT_DEMO
where contains(FILE_NAME,'德鲁克')>0;
八、优化索引
BEGIN
CTXSYS.CTX_DDL.OPTIMIZE_INDEX('T_FULLTEXT_DEMO_FILE_IDX','FULL');
CTXSYS.CTX_DDL.OPTIMIZE_INDEX('T_FULLTEXT_DEMO_IDX','FULL');
END;
第二种方法:
一、创建示例表
CREATE TABLE T_FULLTEXT_DEMO
(
ID NUMBER NOT NULL,
TITLE VARCHAR2(100) NULL,
REMARK VARCHAR2(200) NULL,
FILE_NAME BFILE NULL,
CONSTRAINT T_FULLTEXT_DEMO_PK PRIMARY KEY ( ID )
);
二、创建虚拟目录并授权(使用SYSTEM帐号)
CREATE DIRECTORY LOCAL_DIR AS 'E:\Projects\My_Documents';
GRANT READ ON DIRECTORY LOCAL_DIR TO JK_DANGAN;
三、插入示例数据
INSERT INTO T_FULLTEXT_DEMO
VALUES (1, '微软产品报价', '微软产品报价',BFILENAME('LOCAL_DIR','微软产品报价.xls'));
INSERT INTO T_FULLTEXT_DEMO
VALUES (2, '电子商务的瓶颈之我见', '电子商务的瓶颈之我见',BFILENAME(''LOCAL_DIR','电子商务的瓶颈之我见.doc'));
四、创建索引
CREATE INDEX T_FULLTEXT_DEMO_FILE_IDX ON T_FULLTEXT_DEMO(FILE_NAME) INDEXTYPE IS CTXSYS.CONTEXT;
五、测试
select * from T_FULLTEXT_DEMO
where contains(file_name,'数据库')>0
如何使用Oracle全文检索功能?
作者:eygle | English Version 【转载时请以超链接形式标明文章出处和作者信息及本声明】
链接:http://www.eygle.com/archives/2005/06/ecieoaoracleeia.html
- 如何手工安装Oracle全文检索工具?
本文简要说明全文检索功能的使用,不做太多的具体说明。
仅供参考使用方法。
1.授权
对具体使用全文检索的用户授权.
$ sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.4.0 - Production on Sun May 15 20:00:10 2005Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.4.0 - ProductionSQL> grant ctxapp to club;Grant succeeded.SQL> connect ctxsys/password Connected. SQL> grant execute on ctx_ddl to club;Grant succeeded. |
2.使用应用用户连接
创建域索引
SQL> connect club/password Connected.SQL> begin ctx_ddl.create_preference('club_lexer','chinese_vgram_lexer'); end;2 /PL/SQL procedure successfully completed.Elapsed: 00:00:00.03SQL> create index id_cont_msg 2 on jivemessage ( SUBJECT ) indextype is ctxsys.context parameters('lexer club_lexer'); Index created.Elapsed: 00:01:22.42SQL> select count(*) from jivemessage where contains(subject,'幸福')>0;COUNT(*) ----------1847Elapsed: 00:00:00.17 SQL> select count(*) from jivemessage where subject like '%幸福%';COUNT(*) ----------1841Elapsed: 00:00:02.89 |
3.检索比较
以下是一个全文检索的示例,我们检索'abc',那么全文检索可以把包含'abc'的任何变化组合都查询出来,包括大小写、全半角,而如果用单纯的SQL实现同样的结果,则需要多次like之后union all,其性能差距是不可想象的。
全文检索在类似文本模糊查询上具有极大的优势。当然也可能存在问题,即词法分析器是否准确,会否漏掉部分内容等。
总的说来,满足需求的技术就是好的技术,是否使用一项技术应该通过实践来检验.<br>
SQL> select subject from jivemessage where contains(subject,'abc') >0;SUBJECT -------------------------------------------------------------------------------- 【游戏】 把你的名字的首字母用智能ABC打出,看能出来什么? 游戏——把你的名字首字母用智能ABC打出来 智能ABC暗藏杀机 ABC ABC ABC ABC ABC ABC 哈哇abc abcSUBJECT -------------------------------------------------------------------------------- abc ABC 振奋爱的激情方案ABC 智能ABC的错吗? ABC全选 瓜果美容ABC 经典英文歌曲ABC,不好你拿版砖砍我,好就回帖顶一下! ×××abc Re: abc Re: abc Re: abcSUBJECT -------------------------------------------------------------------------------- abc 测试发贴""abc abc25 rows selected.Elapsed: 00:00:00.04 |
3.定时优化同步域索引
创建定时任务,定期优化和同步域索引
SQL> create or replace procedure hsp_sync_index as2 begin3 ctx_ddl.sync_index('id_cont_msg');4 end;5 /Procedure created.Elapsed: 00:00:00.08 SQL> VARIABLE jobno number; SQL> BEGIN2 DBMS_JOB.SUBMIT(:jobno,'hsp_sync_index();', 3 SYSDATE, 'SYSDATE + (1/24/4)'); 4 commit; 5 END; 6 /PL/SQL procedure successfully completed.Elapsed: 00:00:00.27 SQL> create or replace procedure hsp_optimize_index as2 begin3 ctx_ddl.optimize_index('id_cont_msg','FULL');4 end;5 /SQL> VARIABLE jobno number; SQL> BEGIN2 DBMS_JOB.SUBMIT(:jobno,'hsp_optimize_index();', 3 SYSDATE, 'SYSDATE + 1'); 4 commit; 5 END;6 / Procedure created.Elapsed: 00:00:00.03PL/SQL procedure successfully completed.Elapsed: 00:00:00.02 SQL> |
转载于:https://blog.51cto.com/1311321/441620
Oracle全文检索示例相关推荐
- oracle 游标示例
oracle 游标示例 declare iCount int:=0; sPath nvarchar2(200); tdzsh nvarchar2(50); begin for x in (select ...
- Oracle递归查询示例分析
Oracle递归查询示例分析 start with connect by 层次查询(Hierarchical Queries) 从顶级向下级查询 Select a.areaid,a.name,a.p ...
- node.js查询oracle,nodejs操作oracle数据库示例
首先用SQLPLUS或其它工具在oracle数据库里创建表MY_USERS,用来此次测试: CREATE TABLE MY_USERS( ID INTEGER, FIRSTNAME NVARCHAR2 ...
- Oracle 游标示例,带异常处理
Oracle 游标示例,带异常处理 参考文章: (1)Oracle 游标示例,带异常处理 (2)https://www.cnblogs.com/jizhong/p/3997827.html 备忘一下.
- oracle 连接组件,[2021] node连接oracle数据库示例[使用oracle官方组件]
[2021] node连接oracle数据库示例[使用oracle官方组件] node 连接 oracle 示例 本示例采用的 oracledb 和 instantclient-basic-windo ...
- oracle 全文检索实践
1.oracle text 首先这里说oracle 全文检索,是针对我机器上的oracle 10g版本的.至少 10g 或以上的版本 适合这样来使用. oracle 的全文检索,操作步骤为:将表中需要 ...
- oracle全文检索
前段时间,项目组长让我看一下有没有实时检索数据的方案,并说明不是用数据库模糊查询关键字like,而是像baidu那样的搜索效果,做到最大匹配.并提示我看一下lucene. 我就熟悉了下lucene,然 ...
- oracle 全文检索
前段时间,项目组长让我看一下有没有实时检索数据的方案,并说明不是用数据库模糊查询关键字like,而是像baidu那样的搜索效果,做到最大匹配.并提示我看一下lucene. 我屁颠屁颠的熟悉了下luce ...
- 2、oracle全文检索
2019独角兽企业重金招聘Python工程师标准>>> 公司项目需要实现馆藏库的全文检索,但是只有一个查询,如果使用lucene的话不太方便,通过查找资料,发现oracle自带全文检 ...
最新文章
- 深度学习面临天花板,亟需更可信、可靠、安全的第三代AI技术|AI ProCon 2019
- CVPR'21 | Involution:超越convolution和self-attention的神经网络新算子
- 解决binwalk运行提示缺少LZMA模块
- 关于SQL Server数据库中的标识列
- 数据仓库在HDFS上存储数据的路径(持续更新中)
- mysql数据库mysqldump还原_mysqldump数据库备份与恢复
- 初学者设计数据库_面向初学者的完整数据库设计课程
- 运维工程师绩效考核表_IT运维存在问题及改进
- linux内核启动以及文件系统的加载过程
- 数据结构与算法————稀疏数组
- WIN8系统安装软件时提示“扩展属性不一致“的解决方法
- 2022-04-25 安装PostgreSQL的发现小bug
- 【Matlab学习笔记】【函数学习】cat函数
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_3_方法引用_通过类名引用静态成员...
- CFS完全公平调度类
- 超详细Java安装教程,小白速来!!!
- 微信使用OD逆向HOOK的一些心得
- 恶劣天气 3D 目标检测数据集收集
- 设计师学python有什么用_Python是个什么鬼?为什么设计大牛都在学它?!
- html 半个字符,半角字符什么意思
热门文章
- who,cut,diff,which,whereis,locate,updatedb 命令的使用
- I.MX6 Power off register hacking
- RabbitMq install on Centos
- 【转载】目前为止看到描述VSCode编写C++配置文件最清楚的一篇文章
- 动态规划 | 对输入进行hash处理的LIS 1045
- Xshell 命令后台执行
- 一次上机试题(面向对象)
- 关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究
- 解决无法将类型为“System.Web.UI.WebControls.HiddenField”的对象强制转换为类型的错误...
- 如何将Sql Server中的数据表导入到PowerDesigner中