第一种方法:

一、创建示例表

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


站内相关文章|Related Articles
  • 如何手工安装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全文检索示例相关推荐

  1. oracle 游标示例

    oracle 游标示例 declare iCount int:=0; sPath nvarchar2(200); tdzsh nvarchar2(50); begin for x in (select ...

  2. Oracle递归查询示例分析

    Oracle递归查询示例分析 start with connect by 层次查询(Hierarchical Queries) 从顶级向下级查询 Select  a.areaid,a.name,a.p ...

  3. node.js查询oracle,nodejs操作oracle数据库示例

    首先用SQLPLUS或其它工具在oracle数据库里创建表MY_USERS,用来此次测试: CREATE TABLE MY_USERS( ID INTEGER, FIRSTNAME NVARCHAR2 ...

  4. Oracle 游标示例,带异常处理

    Oracle 游标示例,带异常处理 参考文章: (1)Oracle 游标示例,带异常处理 (2)https://www.cnblogs.com/jizhong/p/3997827.html 备忘一下.

  5. oracle 连接组件,[2021] node连接oracle数据库示例[使用oracle官方组件]

    [2021] node连接oracle数据库示例[使用oracle官方组件] node 连接 oracle 示例 本示例采用的 oracledb 和 instantclient-basic-windo ...

  6. oracle 全文检索实践

    1.oracle text 首先这里说oracle 全文检索,是针对我机器上的oracle 10g版本的.至少 10g 或以上的版本 适合这样来使用. oracle 的全文检索,操作步骤为:将表中需要 ...

  7. oracle全文检索

    前段时间,项目组长让我看一下有没有实时检索数据的方案,并说明不是用数据库模糊查询关键字like,而是像baidu那样的搜索效果,做到最大匹配.并提示我看一下lucene. 我就熟悉了下lucene,然 ...

  8. oracle 全文检索

    前段时间,项目组长让我看一下有没有实时检索数据的方案,并说明不是用数据库模糊查询关键字like,而是像baidu那样的搜索效果,做到最大匹配.并提示我看一下lucene. 我屁颠屁颠的熟悉了下luce ...

  9. 2、oracle全文检索

    2019独角兽企业重金招聘Python工程师标准>>> 公司项目需要实现馆藏库的全文检索,但是只有一个查询,如果使用lucene的话不太方便,通过查找资料,发现oracle自带全文检 ...

最新文章

  1. 深度学习面临天花板,亟需更可信、可靠、安全的第三代AI技术|AI ProCon 2019
  2. CVPR'21 | Involution:超越convolution和self-attention的神经网络新算子
  3. 解决binwalk运行提示缺少LZMA模块
  4. 关于SQL Server数据库中的标识列
  5. 数据仓库在HDFS上存储数据的路径(持续更新中)
  6. mysql数据库mysqldump还原_mysqldump数据库备份与恢复
  7. 初学者设计数据库_面向初学者的完整数据库设计课程
  8. 运维工程师绩效考核表_IT运维存在问题及改进
  9. linux内核启动以及文件系统的加载过程
  10. 数据结构与算法————稀疏数组
  11. WIN8系统安装软件时提示“扩展属性不一致“的解决方法
  12. 2022-04-25 安装PostgreSQL的发现小bug
  13. 【Matlab学习笔记】【函数学习】cat函数
  14. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_3_方法引用_通过类名引用静态成员...
  15. CFS完全公平调度类
  16. 超详细Java安装教程,小白速来!!!
  17. 微信使用OD逆向HOOK的一些心得
  18. 恶劣天气 3D 目标检测数据集收集
  19. 设计师学python有什么用_Python是个什么鬼?为什么设计大牛都在学它?!
  20. html 半个字符,半角字符什么意思

热门文章

  1. who,cut,diff,which,whereis,locate,updatedb 命令的使用
  2. I.MX6 Power off register hacking
  3. RabbitMq install on Centos
  4. 【转载】目前为止看到描述VSCode编写C++配置文件最清楚的一篇文章
  5. 动态规划 | 对输入进行hash处理的LIS 1045
  6. Xshell 命令后台执行
  7. 一次上机试题(面向对象)
  8. 关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究
  9. 解决无法将类型为“System.Web.UI.WebControls.HiddenField”的对象强制转换为类型的错误...
  10. 如何将Sql Server中的数据表导入到PowerDesigner中