Oracle全文索引技术-使用说明文档解析

合集下载

oracle数据库创建索引语句

oracle数据库创建索引语句

oracle数据库创建索引语句
创建索引是在Oracle数据库中优化查询性能的重要手段之一。

在Oracle中,创建索引的语句通常如下所示:
CREATE INDEX index_name.
ON table_name (column1, column2, ...);
其中,index_name是要创建的索引的名称,table_name是要在其上创建索引的表的名称,而column1, column2等则是要在其上创建索引的列的名称。

在实际使用中,我们还可以通过指定ASC(升序)或DESC(降序)关键字来定义索引的排序方式。

例如:
CREATE INDEX index_name.
ON table_name (column1 ASC, column2 DESC);
此外,还可以使用其他选项来定义索引的特性,比如唯一性约
束、压缩、并行等。

例如,要创建一个唯一索引,可以使用以下语句:
CREATE UNIQUE INDEX index_name.
ON table_name (column1, column2);
需要注意的是,创建索引会增加数据库写操作的开销,因此在创建索引之前需要仔细评估查询的使用情况,避免过度索引导致性能下降。

另外,索引还会占用额外的存储空间,因此需要权衡空间和性能之间的关系。

总之,创建索引是一个复杂的过程,需要综合考虑数据库的使用情况、性能需求和存储资源等多个方面的因素。

希望以上信息能够对你有所帮助。

使用Oracle全文索引搜索文本

使用Oracle全文索引搜索文本

使用Oracle全文索引搜索文本不使用Oracle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的INSTR 函数和LIKE操作符实现。

SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0;SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';有很多时候,使用instr和like是很理想的, 特别是搜索仅跨越很小的表的时候.然而通过这些文本定位的方法将导致全表扫描,对资源来说消耗比较昂贵,而且实现的搜索功能也非常有限,因此对海量的文本数据进行搜索时,建议使用oralce提供的全文检索功能建立全文检索的步骤步骤一检查和设置数据库角色首先检查数据库中是否有CTXSYS用户和CTXAPP脚色。

如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能。

你必须修改数据库以安装这项功能。

默认安装情况下,ctxsys用户是被锁定的,因此要先启用ctxsys 的用户。

步骤二赋权在ctxsys用户下把ctx_ddl的执行权限赋于要使用全文索引的用户,例:grant execute on ctx_ddl to pomoho;步骤三设置词法分析器(lexer)Oracle实现全文检索,其机制其实很简单。

即通过Oracle专利的词法分析器(lexer),将文章中所有的表意单元(Oracle 称为term)找出来,记录在一组以dr$开头的表中,同时记下该term 出现的位置、次数、hash 值等信息。

检索时,Oracle 从这组表中查找相应的term,并计算其出现频率,根据某个算法来计算每个文档的得分(score),即所谓的‘匹配率’。

而lexer则是该机制的核心,它决定了全文检索的效率。

Oracle 针对不同的语言提供了不同的lexer, 而我们通常能用到其中的三个:n basic_lexer: 针对英语。

oracle 联合索引原理

oracle 联合索引原理

oracle 联合索引原理Oracle是一种关系型数据库管理系统,它的联合索引是一种特殊的索引类型,可以提高查询效率和性能。

本文将介绍Oracle联合索引的原理及其优势。

一、联合索引的定义联合索引是由多个列组成的索引,这些列可以是一个表中的任意列。

与普通索引不同的是,联合索引可以通过多个列的组合进行查询,从而提高查询效率。

当查询条件中涉及到联合索引的列时,数据库可以直接利用联合索引进行快速定位,减少了查询的时间和资源消耗。

二、联合索引的原理1. 索引结构Oracle使用B树索引结构来实现联合索引。

B树是一种平衡二叉树,它可以保持索引的有序性,并且在插入、删除和查询操作中都能够保持较高的效率。

对于联合索引来说,B树的每个节点都包含了多个列的值,这样可以根据查询条件中的多个列进行快速定位。

2. 索引的创建在Oracle中,可以通过CREATE INDEX语句来创建联合索引。

语法如下:CREATE INDEX index_name ON table_name (column1,column2, ...);3. 索引的使用当查询条件中涉及到联合索引的列时,Oracle会自动选择使用联合索引进行查询。

数据库会根据联合索引的列顺序以及查询条件中的列顺序进行匹配,以找到满足条件的记录。

如果查询条件中的列顺序与联合索引的列顺序不一致,数据库可能无法使用联合索引,从而导致查询效率下降。

三、联合索引的优势1. 提高查询效率联合索引可以根据多个列的组合进行查询,从而提高查询效率。

当查询条件中涉及到联合索引的列时,数据库可以直接利用联合索引进行快速定位,减少了查询的时间和资源消耗。

2. 减少存储空间相比于多个单列索引,联合索引可以减少存储空间的占用。

联合索引将多个列的值存储在同一个索引结构中,避免了重复存储的问题。

3. 提高数据维护效率使用联合索引可以减少索引的数量,简化了数据库的维护工作。

当表的数据发生变化时,只需维护少量的联合索引,而不需要维护多个单列索引。

oracle 查询索引语句

oracle 查询索引语句

oracle 查询索引语句一、查询索引定义1. 查询Oracle数据库中所有的索引```SELECT index_name, table_name FROM all_indexes;```2. 查询指定表中的所有索引```SELECT index_name FROM all_indexes WHERE table_name = '表名';```3. 查询指定索引的定义```SELECT index_name, table_name, column_name FROM all_ind_columns WHERE index_name = '索引名';```4. 查询索引的类型```SELECT index_name, table_name, index_type FROM all_indexes;```5. 查询索引的存储方式```SELECT index_name, table_name, index_type, index_subpartition_name, index_partition_name FROM all_indexes;```二、查询索引状态与统计信息1. 查询索引的状态(有效/无效)```SELECT index_name, status FROM all_indexes;```2. 查询索引的使用情况(最后一次访问时间、读取次数等)```SELECT index_name, last_analyzed, num_rows, leaf_blocks, distinct_keys, clustering_factor FROM all_indexes;```3. 查询索引的大小```SELECT index_name, table_name, index_type, ROUND(bytes/1024/1024, 2) AS size_mb FROM dba_segments WHERE segment_type = 'INDEX';```4. 查询索引的碎片化情况```SELECT index_name, table_name, index_type, blevel, leaf_blocks, distinct_keys, clustering_factor FROM all_indexes; ```5. 查询索引的使用情况(是否被频繁访问)```SELECT index_name, table_name, user_reads, user_updates FROM all_indexes;```三、查询索引的相关约束1. 查询索引所属的表的主键约束```SELECT index_name, table_name FROM all_indexes WHERE index_type = 'NORMAL' AND uniqueness = 'UNIQUE';```2. 查询索引所属的表的外键约束```SELECT index_name, table_name FROM all_indexes WHERE index_type = 'NORMAL' AND uniqueness = 'NONUNIQUE';```3. 查询索引所属的表的唯一约束```SELECT index_name, table_name FROM all_indexes WHERE index_type = 'NORMAL' AND uniqueness = 'NONUNIQUE';```4. 查询索引所属的表的检查约束```SELECT index_name, table_name FROM all_indexes WHERE index_type = 'NORMAL' AND uniqueness = 'NONUNIQUE';```5. 查询索引所属的表的默认值约束```SELECT index_name, table_name FROM all_indexes WHERE index_type = 'NORMAL' AND uniqueness = 'NONUNIQUE';```四、查询索引的相关操作1. 查询索引的创建语句```SELECT dbms_metadata.get_ddl('INDEX', '索引名') FROM dual; ```2. 查询索引的重建语句```SELECT 'ALTER INDEX ' || index_name || ' REBUILD;' FROM all_indexes;```3. 查询索引的重命名语句```SELECT 'ALTER INDEX ' || index_name || ' RENAME TO 新索引名;' FROM all_indexes;```4. 查询索引的删除语句```SELECT 'DROP INDEX ' || index_name || ';' FROM all_indexes;```5. 查询索引的禁用语句```SELECT 'ALTER INDEX ' || index_name || ' UNUSABLE;' FROM all_indexes;```五、查询索引的相关性能优化1. 查询索引是否需要重新构建```SELECT index_name, table_name, last_analyzed FROM all_indexes WHERE last_analyzed < SYSDATE - 30;```2. 查询未使用的索引```SELECT index_name, table_name FROM all_indexes WHERE status = 'VALID' AND (user_reads = 0 OR user_updates = 0); ```3. 查询索引碎片化严重的情况```SELECT index_name, table_name, blevel, leaf_blocks, distinct_keys, clustering_factor FROM all_indexes WHERE blevel > 3;```4. 查询索引的大小是否过大```SELECT index_name, table_name, index_type, ROUND(bytes/1024/1024, 2) AS size_mb FROM dba_segments WHERE segment_type = 'INDEX' AND bytes/1024/1024 > 100;```5. 查询索引的选择性是否低```SELECT index_name, table_name, distinct_keys, num_rows, (distinct_keys/num_rows) AS selectivity FROM all_indexes WHERE selectivity < 0.1;```六、查询索引的相关性能统计1. 查询索引的读取次数与更新次数```SELECT index_name, table_name, user_reads, user_updates FROM all_indexes;```2. 查询索引的平均访问时间```SELECT index_name, table_name, blevel, leaf_blocks, distinct_keys, clustering_factor, num_rows, (leaf_blocks/clustering_factor) AS avg_access_time FROM all_indexes;```3. 查询索引的存储效率```SELECT index_name, table_name, blevel, leaf_blocks,distinct_keys, clustering_factor, (leaf_blocks/clustering_factor) AS storage_efficiency FROM all_indexes;```4. 查询索引的选择性```SELECT index_name, table_name, distinct_keys, num_rows, (distinct_keys/num_rows) AS selectivity FROM all_indexes;```5. 查询索引的碎片率```SELECT index_name, table_name, blevel, leaf_blocks, distinct_keys, clustering_factor, (leaf_blocks/clustering_factor) AS fragmentation FROM all_indexes;```以上是关于Oracle查询索引的一些常用语句,通过这些语句可以方便地查询索引的定义、状态、统计信息以及进行相关操作和性能优化。

Oracle索引详解

Oracle索引详解

一.索引介绍1.1 索引的创建语法:CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>ON <schema>.<table_name>(<column_name> | <expression> ASC | DESC,<column_name> | <expression> ASC | DESC,...)TABLESPACE <tablespace_name>STORAGE <storage_settings>LOGGING | NOLOGGINGCOMPUTE STATISTICSNOCOMPRESS | COMPRESS<nn>NOSORT | REVERSEPARTITION | GLOBAL PARTITION<partition_setting>相关说明1) UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。

2)<column_name> | <expression> ASC | DESC:可以对多列进行联合索引,当为expression 时即“基于函数的索引”3)TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)4)STORAGE:可进一步设置表空间的存储参数5)LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率)6)COMPUTE STATISTICS:创建新索引时收集统计信息7)NOCOMPRESS | COMPRESS<nn>:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)8)NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值9)PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区1.2 索引特点:第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

全文索引的原理及定义

全文索引的原理及定义

全⽂索引的原理及定义全⽂索引时将存储在数据库中的整本书或整篇⽂章中的任意内容信息查找出来的技术。

它可以根据需要获取全⽂中有关章,节,段,句,词等信息,也可以进⾏各种统计和分析。

之前的MySQL数据库中,INNODB存储引擎并不⽀持全⽂索引技术,⼤多数的⽤户转向MyISAM存储引擎,不过这可能进⾏表的拆分,并需要将进⾏全⽂索引的数据存储为MyIsam表。

这样的确能够解决逻辑业务的需求,但是却丧失了INNODB存储引擎的事务性,⽽这在⽣产环境应⽤中同样是⾮常关键的。

从INNODB1.2.x版本开始,INNODB存储引擎开始⽀持全⽂索引,其⽀持myisam的全部功能,并且还⽀持其他的⼀些特性。

倒排索引全⽂索引通常使⽤倒排索引来实现。

倒排索引同B+树索引⼀样,也是⼀种索引结构。

它在辅助表中存储了单词与单词⾃⾝在⼀个或多个⽂档中所在的位置之间的映射。

这通常利⽤关联数组实现,其拥有两种表现形式。

inverted file index, 其表现形式为{单词,单词所在⽂档的ID}full inverted index,其表现形式为{单词,(单词所在⽂档的ID,再具体⽂档中的位置)}【具体来说就是inverted file index只能根据单词找到对应的⽂档,⽽full inverted index不仅能找到对应的⽂档,还能找到单词在⽂档中的具体位置】INNODB全⽂索引INNODB存储从1.2版本开始⽀持全⽂索引的技术,其采⽤full inverted index的技术。

在INNODB存储引擎中将(documentid, position)视为⼀个“ilist”。

因此在全⽂索引的表中,有两个列,⼀个是word字段,另⼀个是ilist字段,并且在word字段上设有索引。

此外,INNODB存储引擎在ilist字段上存放了position信息,故可以进⾏proximity search(邻近查找),⽽myisam不⽀持这个。

oracle的clob类型

oracle的clob类型

Oracle的CLOB类型1. 引言Oracle数据库是一种关系型数据库管理系统,支持高效的数据存储和管理。

其中,CLOB(Character Large Object)类型是Oracle数据库中用于存储大量字符数据的一种数据类型。

本文将深入探讨Oracle的CLOB类型,包括其定义、用途、操作方法和性能优化等方面。

2. CLOB类型的定义与特点2.1 定义CLOB类型是Oracle数据库中用于存储大文本数据的一种数据类型。

它可以存储最大长度为4GB的字符数据,并且支持各种字符集。

CLOB类型通常用于存储文档、报表、XML数据等大量字符数据。

2.2 特点CLOB类型具有以下特点:•存储大容量的字符数据:CLOB类型可以存储最大长度为4GB的字符数据,适合存储大型文档、长报表等数据。

•支持各种字符集:CLOB类型支持多种字符集,可以存储不同语言的字符数据。

•高效存储与检索:Oracle数据库对CLOB类型的存储和检索做了优化,可以提供高效的操作性能。

•支持文本处理函数:CLOB类型可以使用Oracle数据库提供的文本处理函数进行字符串操作、搜索和替换等操作。

3. CLOB类型的用途CLOB类型在很多应用场景中具有广泛的用途:3.1 存储文档和报表CLOB类型可以用于存储各种文档和报表数据,例如Word文档、Excel报表、PDF文件等。

通过CLOB类型,可以将这些文档存储在数据库中,并能够在需要时进行检索和处理。

3.2 存储XML数据CLOB类型可以用于存储XML数据。

XML是一种常用的数据交换格式,通过CLOB类型,可以将XML数据存储在数据库中,并能够使用XML解析器对其进行解析和处理。

3.3 存储大型字符串CLOB类型可以用于存储大型字符串数据,例如长篇文章、博客内容等。

通过CLOB类型,可以将这些大型字符串存储在数据库中,并能够进行全文搜索、关键字提取等操作。

4. CLOB类型的操作方法4.1 创建表时使用CLOB类型使用CLOB类型创建表时,需要在表定义中指定该列的数据类型为CLOB。

Oracle数据库管理员参考手册说明书

Oracle数据库管理员参考手册说明书

7-100SQL ReferenceALTER ROLLBACK SEGMENTPurposeUse the ALTER ROLLBACK SEGMENT statement to bring a rollback segment online or offline, to change its storage characteristics, or to shrink it to an optimal or specified size.PrerequisitesYou must have ALTER ROLLBACK SEGMENT system privilege.Syntaxstorage_clause :See storage_clause on page 11-129.Keywords and Parametersrollback_segmentSpecify the name of an existing rollback segment.ONLINESpecify ONLINE to bring the rollback segment online. When you create a rollback segment, it is initially offline and not available for transactions. This clause brings the rollback segment online, making it available for transactions by your instance.See Also:CREATE ROLLBACK SEGMENT on page 9-149 forinformation on creating a rollback segment ALTER ROLLBACK SEGMENT rollback_segment ONLINEOFFLINEstorage_clauseSHRINK TOinteger KM;SQL Statements: ALTER CLUSTER to ALTER SYSTEM 7-101You can also bring a rollback segment online when you start your instance with the initialization parameter ROLLBACK_SEGMENTS .OFFLINESpecify OFFLINE to take the rollback segment offline.s If the rollback segment does not contain any information needed to roll back anactive transaction, Oracle takes it offline immediately.sIf the rollback segment does contain information for active transactions, Oracle makes the rollback segment unavailable for future transactions and takes it offline after all the active transactions are committed or rolled back.Once the rollback segment is offline, it can be brought online by any instance.To see whether a rollback segment is online or offline, query the data dictionary view DBA_ROLLBACK_SEGS . Online rollback segments have a STATUS value of IN_USE . Offline rollback segments have a STATUS value of AVAILABLE .Restriction: You cannot take the SYSTEM rollback segment offline.storage_clauseUse the storage_clause to change the rollback segment’s storage characteristics.Restriction: You cannot change the values of the INITIAL and MINEXTENTS for an existing rollback segment.SHRINKSpecify SHRINK if you want Oracle to attempt to shrink the rollback segment to an optimal or specified size. The success and amount of shrinkage depend on the available free space in the rollback segment and how active transactions are holding space in the rollback segment.The value of integer is in bytes, unless you specify K or M for kilobytes or megabytes.If you do not specify TO integer , then the size defaults to the OPTIMAL value of the storage_clause of the CREATE ROLLBACK SEGMENT statement that createdSee Also:Oracle8i Administrator’s Guide for more information on making rollback segments available and unavailableSee Also:storage_clause on page 11-129 for syntax and additional informationthe rollback segment. If OPTIMAL was not specified, then the size defaults to theMINEXTENTS value of the storage_clause of the CREATE ROLLBACK SEGMENTstatement.Regardless of whether you specify TO integer:s The value to which Oracle shrinks the rollback segment is valid for theexecution of the statement. Thereafter, the size reverts to the OPTIMAL value ofthe CREATE ROLLBACK SEGMENT statement.s The rollback segment cannot shrink to less than two extents.To determine the actual size of a rollback segment after attempting to shrink it,query the BYTES,BLOCKS, and EXTENTS columns of the DBA_SEGMENTS view.Restriction: For Oracle Parallel Server, you can shrink only rollback segments thatare online to your instance.ExamplesBringing a Rollback Segment Online Example This statement brings the rollbacksegment RSONE online:ALTER ROLLBACK SEGMENT rsone ONLINE;Changing Rollback Segment Storage Example This statement changes theSTORAGE parameters for RSONE:ALTER ROLLBACK SEGMENT rsoneSTORAGE (NEXT 1000 MAXEXTENTS 20);Resizing a Rollback Segment Example This statement attempts to resize arollback segment to 100 megabytes:ALTER ROLLBACK SEGMENT rsoneSHRINK TO 100 M;7-102SQL Reference。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[Oracle全文索引技术] 使用说明文档金联万家(北京)电子支付科技发展有限公司修改记录目录1 前言 (3)1.1 编写目的 (3)1.2 名词解释 (3)1.3 参考资料 (3)2 oracle全文索引技术 (4)3 建立全文索引的操作步骤 (4)3.1 查看用户与角色 (4)3.2 开启目标用户全文索引权限 (4)3.3 设置语法分析器Lexer (5)3.4 建立索引 (5)3.5 使用索引 (6)4 全文索引的种类 (6)5 对多字段建立索引 (6)6 Oracle全文索引之 - CONTEXT (7)6.1 函数 CONTAINS 语法 (7)6.2 全文索引的维护 (7)6.2.1 同步数据 (8)6.3 单个中文字查询问题 (9)7 建立全文索引的完整脚本 (10)8 附录 (14)1前言1.1编写目的本文档主要说明Oracle全文索引技术的使用与维护,为数据库操作使用人员提供参考维护手册。

1.2名词解释表 1.术语表1.3参考资料表 2.参考资料列表2oracle全文索引技术全文检索:是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

这个过程类似于通过字典中的检索字表查字的过程。

【Oracle Text 全文检索】Oracle一直致力于全文检索技术的研究,当Oracle9i Rlease2发布之时,Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。

Oracle Text是Oracle9i 采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8以前它的名称是Oracle ConText Cartridge。

使用Oracle9i和Oracle Text,可以方便而有效地利用标准的SQL工具来构建基于文本的新的开发工具或对现有应用程序进行扩展。

应用程序开发人员可以在任何使用文本的Oracle数据库应用程序中充分利用Oracle Text搜索,应用范围可以是现有应用程序中可搜索的注释字段,也可是实现涉及多种文档格式和复杂搜索标准的大型文档管理系统。

Oracle Text支持Oracle数据库所支持的大多数语言的基本全文搜索功能。

扩展阅读: /view/663956.htm3建立全文索引的操作步骤3.1查看用户与角色检查数据库中是否有CTXSYS 用户和CTXAPP 角色如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能。

你必须修改数据库以安装这项功能。

默认安装情况下,ctxsys用户是被锁定的,因此要先启用ctxsys的用户。

-- 锁住用户ALTER USER ctxsys ACCOUNT LOCK PASSWORD EXPIRE;-- 解锁用户ALTER USER ctxsys ACCOUNT UNLOCK IDENTIFIED BY ctxsys;如果没有该用户,则需要打开dbca工具中选择configrue database options,然后选择所有数据库组件安装即可。

3.2开启目标用户全文索引权限赋权在ctxsys用户下把ctx_ddl的执行权限赋于要使用全文索引的用户,例:GRANT EXECUTE ON ctx_ddl TO username;3.3设置语法分析器LexerOracle实现全文检索,其机制其实很简单。

即通过Oracle专利的词法分析器(lexer),将文章中所有的表意单元(Oracle 称为 term)找出来,记录在一组以dr$开头的表中,同时记下该term出现的位置、次数、hash 值等信息。

检索时,Oracle 从这组表中查找相应的term,并计算其出现频率,根据某个算法来计算每个文档的得分(score),即所谓的‘匹配率’。

而lexer则是该机制的核心,它决定了全文检索的效率。

Oracle 针对不同的语言提供了不同的 lexer, 而我们通常能用到其中的三个:basic_lexer :针对英语(默认分析器)chinese_vgram_lexer:专门针对汉语,对汉字搜索准确性较高如:‘中国人民站起来了’这句话,会被它分析成如下几个term: ‘中’,‘中国’,‘国人’,‘人民’,‘民站’,‘站起’,起来’,‘来了’,‘了’chinese_lexer:新的汉语分析器,只支持 UTF8 字符集,可以将语句分词成常见的词组,能跟有效率的分析语句,对汉字解析搜索效率较高【指定语法分析器:】1.当前用户下下建立一个preference(例:在pomoho用户下执行以下语句)EXEC ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer');2.在建立全文索引索引时,指明所用的lexer:CREATE INDEX myindex ON mytable(mycolumn) INDEXTYPE IS ctxsys.context PARAMETERS('lexer my_lexer');这样建立的全文检索索引,就会使用chinese_vgram_lexer作为分析器。

3.4建立索引通过以下语法建立全文索引3.5使用索引使用全文索引很简单,可以通过:SELECT * FROM PUBMENU WHERE CONTAINS(MENUNAME, '上传图片') > 0;4全文索引的种类建立的Oracle Text索引被称为域索引(domain index),包括4种索引类型:⏹CONTEXT用于对含有大量连续文本数据进行检索。

支持word、html、xml、text等很多数据格式。

支持中文字符集,支持分区索引,唯一支持并行创建索引(Parallel indexing)的索引类型。

对表进行DML操作后,并不会自动同步索引。

需要手工同步索引。

查询操作符:CONTAINS⏹CTXCAT当使用混合查询语句的时候可以带来很好的效率。

适合于查询较小的具有一定结构的文本段。

具有事务性,当更新主表的时候自动同步索引。

作符:CA TSEARCH⏹CTXRULE主要用于文档分类。

查询操作符:MATCHES⏹CTXXPATH快速查找XML文档NODE节点XPATH路径5对多字段建立索引很多时候需要从多个文本字段中查询满足条件的记录,这时就需要建立针对多个字段的全文索引,例如需要从作:--建议多字段索引的preference ,以ctxsys登录,并执行EXEC ctx_ddl.create_preference('ctx_idx_subject_pref','MULTI_COLUMN_DATASTORE');-- 建立 preference 对应的字段值(以ctxsys登陆)EXEC ctx_ddl.set_attribute('ctx_idx_subject_pref','columns','subjectname,briefintro'); --建立全文索引CREATE INDEX ctx_idx_subject ON pmhsubjects(subjectname) INDEXTYPE IS ctxsys.context PARAMETERS('DATASTORE ctxsys.ctx_idx_subject_pref lexer my_lexer');--使用索引SELECT * FROM pmhsubjects WHERE contains(subjectname,'李宇春');6Oracle全文索引之- CONTEXTCONTEXT:用于对含有大量连续文本数据进行检索。

支持word、html、xml、text等很多数据格式。

支持中文字符集,支持分区索引,唯一支持并行创建索引(Parallel indexing)的索引类型。

对表进行DML操作后,并不会自动同步索引。

需要手工同步索引。

查询操作符:CONTAINS6.1函数CONTAINS 语法使用contains时,主要查询语法有:contains([列名称],[查询关键字])Logical Operators:组合搜索条件,通过使用AND,OR等逻辑符号。

⏹AND(&),同时含有所有关键词,如:'cats AND dogs','cats & dogs'⏹OR(|),含有所有关键词中的任意一个,如:'cats | dogs','cats OR dogs's⏹NOT(~),不含该关键词,如:'animals ~ dogs'⏹ACCUM(,),与|类似,如:'dogs, cats, puppies'⏹EQUIV(=),如:'German shepherds=alsatians are big dogs'⏹ABOUT等【示例:】包含:“中国、安徽”关键字的“建设”或“农业”银行SELECT * FROM cn_common_data_bank_info t WHERE contains(t.ptcpt_nm,'( 建设 | 农业 ) & 安徽 & 中国')>0;6.2全文索引的维护对于CTXSYS.CONTEXT索引,当应用程序对基表进行DML操作后,对基表的索引维护是必须的。

索引维护包括索引myindex):DR$myindex$I、DR$myindex$K、DR$myindex$R、DR$myindex$N其中以I表最重要,可以查询一下该表,看看有什么内容:--IDX_CNDATABANKINFO_PKNMSELECT * FROM cn_common_data_bank_info;SELECT * FROM user_indexes;SELECT t.token_text,t.token_count FROM dr$idx_cndatabankinfo_pknm$i t;这里就不列出查询接过了。

可以看到,该表中保存的其实就是Oracle 分析你的文档后,生成的term记录在这里,包括term出现的位置、次数、hash值等。

当文档的内容改变后,可以想见这个I表的内容也应该相应改变,才能保证Oracle在做全文检索时正确检索到内容(因为所谓全文检索,其实核心就是查询这个表)。

相关文档
最新文档