以下是本人经过测试没有问题,按步骤逐步操作即可。
本人用oracle10g测试,注意nvarchar2()类型不支持索引。
/******************************************
* 全文说明:
* 1).tls4cs为应用用户
* 2).当前数据库中必须有CTXSYS用户和CTXAPP角色
******************************************/
/*1、使用具有sysdba权限的用户登录/
grant connect,resource to tls4cs;
grant ctxapp to tls4cs;
alter user tls4cs default role all;
/*2、通常ctxsys处于锁定状态,需要解锁ctxsys用户/
alter user ctxsys account unlock;
/*3、对象权限/
grant execute on ctx_ddl to tls4cs;
/*4、使用应用用户tls4cs连接,设置搜索器类型/
BEGIN
ctx_ddl.create_preference ('main_lexer','CHINESE_LEXER');
ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST');
ctx_ddl.create_preference('mymds', 'MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE'); ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',1);
ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', 5);
ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
ctx_ddl.set_attribute('mymds', 'columns', 'content,title');
END;
/
/***********************************************************
* 搜索器说明:
* 1)ctx_ddl.create_preference用于创建词法分析器名,他的名称为'main_lexer'
* 2)词法分析器有3种类型:
* 'CHINESE_VGRAM_LEXER'仅用于中文,提取标示符更大,无效标示符较多;
* 'CHINESE_LEXER' 仅用于中文,效率高一些更准确可靠一些;建议使用
* 'BASIC_LEXER'仅用于英文;
* 3)定义相关词表“BASIC_WORDLIST’;
* 4)数据存储分三种:
* 'DIRECT_DATASTORE'默认存储方式;
* 'URL_DATASTORE'用于数据源通过url的方式指定;
* 'MULTI_COLUMN_DATASTORE'用于多数据源使用同一个索引的情况;
* 5)'PREFIX_INDEX'词表禁用还是启动;
* 6)'PREFIX_MIN_LENGTH'词表的最小长度;
* 7)'PREFIX_MAX_LENGTH'词表的最大长度;
* 8)'SUBSTRING_INDEX'词组是否可以分解;
***********************************************************/
/*5、对某列建立文档CONTEXT索引,并且指定搜索器/过滤器/单词列表/
CREATE INDEX idx_aritcle_content ON TABTEST(CONTENT)
indextype is ctxsys.context parameters
('DATASTORE mymds FILTER CTXSYS.INSO_FILTER LEXER main_lexer WORDLIST mywordlist');
/*6、执行查询/
select * from TABTEST where contains(CONTENT,'检索,内容,项目')>0
//也加入一些表达式
select * from TABTEST where contains(CONTENT,'检索 or 内容 or 项目')>0
//同时可以通过准确度排序score(1),内容中1代表,两单词间距不超过10个单词的文本。
Select score(1),tb.id,tb.title,tb.content,tb.createdate from TABTEST tb where contains(CONTENT,'检索,内容',1)>0 order by score(1) desc
/*7、索引同步/
CREATE or replace procedure cont_sync_index as
BEGIN
ctx_ddl.sync_index('idx_aritcle_content');
END;
/
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'cont_sync_index();',
SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;
/
/***********************************************************
* 同步任务说明:
* 1)通过任务执行idx_aritcle_content同步索引;
* 2) SYSDATE + (1/24/4) 代表15分钟后执行
***********************************************************/
/*8、索引优化/
CREATE or replace procedure cont_optimize_index as
BEGIN
ctx_ddl.optimize_index('idx_aritcle_content','FULL');
END;
/
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'cont_optimize_index();',
SYSDATE, 'SYSDATE + 1');
commit;
END;
/
/***********************************************************
* 优化任务说明:
* 1)通过任务执行cont_optimize_index优化索引;
* 有三种优化参数以下官方解释:
* The “FAST” mode compacts fragmented rows but does not remove old data
* The “FULL” mode optimizes either the entire index or a portion of it, with old data removed
* The “TOKEN” mode perfoms a full optimization for a specific token
* 建议用full
* 2) SYSDATE + 1 代表从明天开始夜间12点执行;
***********************************************************/
/***********************************************************
* 任务时间对照表:
* 描述 INTERVAL参数值
* 每天午夜12点 'TRUNC(SYSDATE + 1)'
* 每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
* 每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
* 每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
* 每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
* 每星期六和日早上6点10分
* 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
***********************************************************/
缺优点:
1)如果建立数据量非常大,建立索引会比较慢,10条数据量用5个小时,还好是增量建索引。
如果每天上传数据量在2000条,同步大约需要索引5分钟。定期做优化,减少索引中零碎分词,能大大提高检索速度。
2)过滤器中能对特殊字符进行处理,如下#-+_@%^!!,@#¥&*()()。
3)压力全部在数据库服务器上。
4)搜索文字准确率高。
分享到:
相关推荐
以下是对Oracle全文检索实例的详细解释: 1. **用户与角色配置**: - `tls4cs` 是一个应用程序用户,用于执行全文检索操作。 - `CTXSYS` 是Oracle Text的系统用户,拥有所有Oracle Text对象的所有权,通常被锁定...
Oracle全文检索是数据库管理系统Oracle中的一个强大功能,它允许用户以自然语言的形式搜索数据库中的文本信息,而不仅仅是基于关键字的精确匹配。Oracle的全文检索功能提供了高效、灵活且可定制的搜索体验,对于处理...
Oracle全文检索技术是一种高效、强大的数据搜索功能,它允许用户通过自然语言查询在数据库中查找信息,而无需了解复杂的SQL语法。本讲解将深入探讨Oracle全文检索的核心概念、工作原理以及如何实现中文检索器技术。 ...
文档中通过实例描述了Oracle全文检索技术在民航西南空管局的应用情况。从民航业务需求出发,详细阐述了如何利用Oracle数据库中的全文检索技术,有效地在海量数据中快速定位特定内容,以满足业务处理的需要。 7. ...
Oracle Text 在 Oracle 9i 及以后的版本中成为标准版和企业版的一部分,这意味着在创建数据库实例时,全文检索功能会自动安装。Oracle Text 应用于各种场景,包括快速搜索文本数据的应用、管理多种文档格式(如 Word...
Oracle查询语句是数据库管理中不可或缺的部分,尤其在处理复杂数据检索时显得尤为重要。Oracle SQL是一种结构化查询语言,用于与Oracle数据库进行交互。在这个"oracle查询语句实例"的压缩包中,你将找到一系列实用的...
当创建数据库实例时,全文检索功能会自动安装并集成到数据库系统中,从而极大地增强了Oracle数据库的文本处理能力。 ##### 2.1 Oracle Text的应用场景 Oracle Text广泛应用于多个领域,包括但不限于: - **快速...
Oracle Text是Oracle数据库的一个重要组成部分,它提供了强大的全文检索功能,使得用户能够在海量文本数据中快速、准确地找到所需信息。Oracle Text不仅支持标准的文本搜索,还具备智能化的文本管理和分析能力,能够...
- 安装:Oracle 9i的安装分为多个步骤,包括选择安装类型(如企业版或个人版),配置数据库实例,设置监听器和网络服务名。 - 配置:Oracle配置助手(OUI)简化了数据库的配置,帮助用户设定系统全局区(SGA)大小...
最后,需要创建一个 Oracle 存储过程,用于从 Test0 表中检索数据。在这个示例中,我们创建了一个名为 Test_Procedure 的存储过程。 CREATE OR REPLACE PROCEDURE Test_Procedure ( Test_Cursor IN OUT Test_...
3. “第8章 新闻发布系统”可能包含新闻的发布、编辑、分类和搜索等功能,展示了如何利用JSP实现动态内容管理和用户友好的界面展示,同时利用Oracle数据库存储和检索大量文本信息。 4. “第4章论坛系统”是社交网络...
在这个“NHibernate连接和读取Oracle11G实例”中,我们将深入探讨如何利用NHibernate与Oracle 11G数据库进行交互。 首先,要建立NHibernate与Oracle 11G的连接,我们需要以下关键组件: 1. **Oracle驱动**:Oracle...
### Oracle SQL优化实例详解 #### 一、减少I/O操作 在Oracle数据库中,I/O操作通常是查询执行过程中最耗时的部分之一。因此,减少I/O操作可以显著提高查询性能。 **示例代码:** ```sql SELECT COUNT(CASE WHEN ...
Oracle还提供了索引机制,以加快数据检索速度。B树索引、位图索引和全文索引等不同类型的索引适用于不同的查询场景。理解何时和如何创建索引,能显著提升数据库的查询效率。 在数据库设计中,规范化是优化数据结构...
### Oracle9i全文检索知识点详解 #### 一、Oracle9i全文检索简介 **Oracle Text**,作为Oracle 9i数据库的重要组成部分,提供了强大的全文检索功能。从Oracle 7.3版本开始支持全文检索功能,随后在不同版本中分别...
本实例主要关注如何使用VC++与Oracle数据库进行交互,实现数据的存取、查询、更新和删除等操作。Oracle数据库是一个关系型数据库管理系统,提供了丰富的API和工具,如OCI(Oracle Call Interface)和ODBC(Open ...
通过查看执行计划,我们可以确定Oracle是否使用了索引来进行数据检索。如果查询执行计划中包含“INDEX”关键字,说明查询使用了索引。 7. 结合AUTOTRACE创建并验证函数索引 函数索引是在列上基于表达式创建的索引,...
这个语法允许我们按照树的结构来组织和检索数据,尤其适用于表示组织结构、目录层级或者层级关系的数据。 1. **查找顶级父节点** 使用`WHERE sjflid IS NULL`的查询可以找到树中的所有顶级节点,这些节点没有上级...
这个“JSP+Oracle数据库组建动态网站经典实例”包含了一系列实用的系统实例,如论坛系统、人事管理系统、网上订票系统、新闻发布系统和留言板系统,这些都是一般网站必备的功能模块,对于学习Oracle数据库编程以及...