关于Oracle Text索引

1.Oracle Text索引类型

索引类型 描述 支持的首选项与参数 查询运算符 注意事项
CONTEXT 当文本由大型,连贯的文档(例如,MS Word,HTML或纯文本)组成时,请使用此索引来构建文本检索应用程序。
可以通过多种方式自定义索引。
在对基表进行插入,更新和删除操作之后,此索引类型需要CTX_DDL.SYNC_INDEX。
支持所有CREATE INDEX首选项和参数,但INDEX SET除外。
支持的参数:索引分区子句格式,字符集和语言列
CONTAINS
CONTEXT语法支持一组丰富的操作。
将CTXCAT语法与查询模板一起使用。
支持所有文档服务和查询服务。

支持分区文本表的索引。

支持CREATE INDEX的FILTER BY和ORDER BY子句以索引结构化的列值,以更有效地处理混合查询
CTXCAT 使用此索引可以更好地混合小型文档和文本片段的查询性能。 为了提高混合查询性能,请在基表中包括其他列,例如项目名称,价格和描述。
此索引类型是事务性的。 在插入,更新或删除基表之后,它会自动更新自己。 不需要CTX_DDL.SYNC_INDEX。

INDEX SET
LEXER
STOPLIST
STORAGE
WORDLIST(仅日语数据支持prefix_index属性。)
不支持:格式,字符集和语言列
表和索引分区
CATSEARCH
CTXCAT语法支持逻辑运算,短语查询通配符。
将CONTEXT语法与查询模板一起使用。
支持主题查询
该索引比CONTEXT索引更大,构建时间也更长。
CTXCAT索引的大小与要建立索引的文本总数,索引集中的索引数以及被索引的列数有关。 在将索引添加到索引集中之前,请仔细考虑您的查询和资源。

CTXCAT索引不支持索引分区,文档服务(突出显示标记主题和要点)或查询服务(解释,查询反馈和浏览词)。
CTXRULE 使用此索引来构建文档分类或路由应用程序。 在查询表上创建此索引,查询在其中定义分类或路由条件

MATCHES

使用MATCHES运算符可以对单个文档进行分类(纯文本,HTML或XML)。 MATCHES将文档转换为一组查询,并在索引中找到匹配的行。

要使用简单分类或基于规则的分类构建文档分类应用程序,请创建CTXRULE类型的索引。 该索引使用MATCHES运算符对纯文本,HTML或XML文档进行分类。 将定义的查询集存储在索引的文本表中。
Oracle Text索引是Oracle数据库domain index。 要构建查询应用程序,可以创建混合文本和结构化数据列的CONTEXT类型的索引,并使用CONTAINS运算符进行查询
从填充的文本表中创建索引。 在查询应用程序中,表必须包含文本或指向所存储文本位置的指针。 文本通常是文档的集合,但也可以是小的文本片段。
注意:如果要构建使用XML数据的新应用程序,Oracle建议您使用XMLIndex,而不是CTXRULE。
使用标准sql将Oracle Text索引创建为Oracle数据库的一种可扩展索引。 这意味着Oracle Text索引的运行方式类似于Oracle Database索引。 它具有引用它的名称,并且可以使用标准sql语句进行操作。
创建Oracle Text索引的好处是使用CONTAINS,CATSEARCH和MATCHES运算符可以快速响应文本查询。 这些运算符分别查询CONTEXT,CTXCAT和CTXRULE索引类型。
注意:由于启用了透明数据加密的列不支持域索引,因此请勿将其与Oracle Text一起使用。 但是,可以在存储在启用了透明数据加密的表空间中的表的列上创建Oracle Text索引。

2.Oracle Text CONTEXT INDEX的结构

Oracle Text通过将所有单词转换为标记来索引文本。 Oracle Text CONTEXT索引的一般结构是一个反向索引,其中每个标记都包含包含该标记的文档(行)列表。

例如,在单个初始索引操作之后,单词DOG可能具有如下条目:

关于Oracle Text索引

这意味着DOG一词包含在存储文档一,三和五的行中。
合并词和主题索引
认情况下,Oracle Text使用英语和法语,用单词信息对主题信息进行索引。 可以使用ABOUT运算符查询主题信息。 还可以启用和禁用主题索引。

3.Oracle文本索引过程

 通过使用CREATE INDEX语句创建索引的Oracle文本索引来启动索引过程,该索引根据您的参数和首选项进行组织。

索引编制过程如图3-1所示。 此过程是由不同索引对象作用的数据流。 每个对象对应于可以在CREATE INDEX或ALTER INDEX的参数字符串中指定的索引首选项类型或节组。

关于Oracle Text索引

3.1Datastore(存储)对象
该流从数据存储区开始,因为它们根据您的数据存储区首选项将文档存储在系统中,因此会读取这些文档。 例如,如果将数据存储区定义为FILE_DATASTORE,则流将通过从操作系统读取文件开始。 还可以将文档存储在Internet上或Oracle数据库中。 无论文件实际位于何处,Oracle数据库中的文本表都必须始终指向文件
3.2Filter(过滤)对象
流通过filter。 FILTER首选项确定发生了什么。 可以通过以下方式之一对流进行操作:
  • 当指定NULL_FILTER首选项类型或格式列的值为IGnorE时,不会进行任何过滤。 纯文本,HTML或XML的文档无需过滤。
  • 当指定AUTO_FILTER首选项类型或格式列的值为BINARY时,格式化的文档(二进制)将被过滤为标记文本。
3.3Sectoner(分段)对象
过滤后,标记的文本将通过分段器,该分段器将流分为文本和分段信息。 分段信息包括分段在文本流中的开始和结束位置。 提取的分段的类型由分段组类型决定。
文本被传递到词法分析器。 节信息直接传递给索引引擎,索引引擎稍后将使用它。
3.4Lexer(词法分析器)对象
通过使用一种Oracle Text词法分析器类型来指定要建立索引的文本的语言,可以创建词法分析器首选项。 词法分析器根据您的语言将文本分为标记。 这些标记通常是单词。 要提取令牌,词法分析器使用您的词法分析器首选项中定义的参数。 这些参数包括分隔令牌的字符的定义,例如空格。 参数还包括将文本转换为全部大写还是将其保留为混合大小写。
启用主题索引后,词法分析器将分析您的文本以创建主题标记以进行索引。
3.5索引引擎
索引引擎创建反向索引,该反向索引将令牌映射到包含令牌的文档。 在此阶段,Oracle Text使用您指定的stoplist从索引中排除stopwords或stopthemes 。 Oracle Text还使用在WORDLIST首选项中定义的参数。 这些参数告诉系统如何创建前缀索引或子字符串索引(如果启用)。
4.关于索引列的更新
在Oracle Database 12c第2版(12.2)之前的版本中,如果对Oracle Text索引所基于的列进行了更新,则在索引同步之前,该文档不可用于搜索操作。 用户查询无法搜索该文档。 从Oracle Database 12c第2版(12.2)开始,可以指定更新后必须可搜索文档,而无需立即执行索引同步。 在同步索引之前,查询将使用旧索引条目来获取旧文档的内容。 索引同步后,用户查询获取更新文档的内容
索引的ASYNCHRONOUS_UPDATE选项可以在更新后保留文档的旧内容,然后使用该索引来回答用户查询
5.分区表和索引
在分区文本表上创建分区CONTEXT索引时,必须按范围对表进行分区。 不支持哈希,合成和列表分区。
可以创建一个分区的文本表,以按日期对数据进行分区。 例如,如果应用程序维护着一个大型的过时新闻文章库,则可以按月份或年份对信息进行分区。 分区简化了大型数据库的可管理性,因为查询,插入,更新,删除操作以及备份和恢复可以作用于单个分区。
在具有多个表集的本地CONTEXT索引上,Oracle Text支持Oracle数据库支持的分区数。
若要查询分区表,请在查询常规表时在SELECT语句的WHERE子句中使用CONTAINS。 可以查询整个表或单个分区。 但是,如果使用ORDER BY score子句,则Oracle建议查询单个分区,除非包含将查询限制为单个分区的范围谓词。
6.在线索引
当由于正在进行的更新而无法锁定基表以建立索引时,可以使用CREATE INDEX语句的ONLINE参数在线创建索引。 这样,具有频繁插入,更新或删除功能的应用程序不必停止更新基表以建立索引。
在索引过程的开始和结束时基表被锁定的时间很短。
7.并行索引
Oracle Text通过CREATE INDEX语句支持并行索引。
在非分区表上输入并行索引语句时,Oracle Text将基本表拆分为临时分区,生成子进程,并将子级分配给分区。然后,每个子级都为其分区中的行建立索引。将基表切片为分区的方法由Oracle确定,不受直接控制。对于实际产生的子进程的数目也是如此,这取决于机器功能,系统负载,init.ora设置和其他因素。由于这些变量,实际的并行度可能与请求的并行度不匹配。
因为索引是一项密集的I / O操作,所以当具有分布式磁盘访问权限和多个cpu时,并行索引最有效地减少了索引时间。并行索引只能通过CREATE INDEX语句才能影响初始索引的性能。它不影响使用ALTER INDEX的插入,更新和删除操作,并且对查询性能的影响最小。
由于并行索引减少了初始索引时间,因此对于以下情况很有用:
  • 产品包含Oracle Text索引时的数据暂存
  • 基于大数据收集的应用程序的快速初始启动
  • 应用程序测试,当您在开发应用程序时需要测试不同的索引参数和架构时
8.索引和视图
Oracle sql标准不支持在视图上创建索引。 如果需要索引内容在不同表中的文档,请使用USER_DATASTORE对象创建数据存储首选项。 使用此对象,您可以定义一个在索引时间从不同表合成文档的过程。

相关文章

这篇文章主要介绍“hive和mysql的区别是什么”,在日常操作中...
这篇“MySQL数据库如何改名”文章的知识点大部分人都不太理解...
这篇文章主要介绍“mysql版本查询命令是什么”的相关知识,小...
本篇内容介绍了“mysql怎么修改字段的内容”的有关知识,在实...
这篇文章主要讲解了“mysql怎么删除unique约束”,文中的讲解...
今天小编给大家分享一下mysql怎么查询不为空的字段的相关知识...