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文档进行分类。 将定义的查询集存储在索引的文本表中。 |
从填充的文本表中创建索引。 在查询应用程序中,表必须包含文本或指向所存储文本位置的指针。 文本通常是文档的集合,但也可以是小的文本片段。
注意:如果要构建使用XML数据的新应用程序,Oracle建议您使用XMLIndex,而不是CTXRULE。
使用标准sql将Oracle Text索引创建为Oracle数据库的一种可扩展索引。 这意味着Oracle Text索引的运行方式类似于Oracle Database索引。 它具有引用它的名称,并且可以使用标准sql语句进行操作。
注意:由于启用了透明数据加密的列不支持域索引,因此请勿将其与Oracle Text一起使用。 但是,可以在存储在启用了透明数据加密的表空间中的表的列上创建Oracle Text索引。
2.Oracle Text CONTEXT INDEX的结构
例如,在单个初始索引操作之后,单词DOG可能具有如下条目:
这意味着DOG一词包含在存储文档一,三和五的行中。
合并词和主题索引
3.Oracle文本索引过程
通过使用CREATE INDEX语句创建索引的Oracle文本索引来启动索引过程,该索引根据您的参数和首选项进行组织。
索引编制过程如图3-1所示。 此过程是由不同索引对象作用的数据流。 每个对象对应于可以在CREATE INDEX或ALTER INDEX的参数字符串中指定的索引首选项类型或节组。
3.1Datastore(存储)对象
该流从数据存储区开始,因为它们根据您的数据存储区首选项将文档存储在系统中,因此会读取这些文档。 例如,如果将数据存储区定义为FILE_DATASTORE,则流将通过从操作系统读取文件开始。 还可以将文档存储在Internet上或Oracle数据库中。 无论文件实际位于何处,Oracle数据库中的文本表都必须始终指向文件。
3.2Filter(过滤)对象
流通过filter。 FILTER首选项确定发生了什么。 可以通过以下方式之一对流进行操作:
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)开始,可以指定更新后必须可搜索文档,而无需立即执行索引同步。 在同步索引之前,查询将使用旧索引条目来获取旧文档的内容。 索引同步后,用户查询将获取更新文档的内容。
5.分区表和索引
在分区文本表上创建分区CONTEXT索引时,必须按范围对表进行分区。 不支持哈希,合成和列表分区。
可以创建一个分区的文本表,以按日期对数据进行分区。 例如,如果应用程序维护着一个大型的过时新闻文章库,则可以按月份或年份对信息进行分区。 分区简化了大型数据库的可管理性,因为查询,插入,更新,删除操作以及备份和恢复可以作用于单个分区。
若要查询分区表,请在查询常规表时在SELECT语句的WHERE子句中使用CONTAINS。 可以查询整个表或单个分区。 但是,如果使用ORDER BY score子句,则Oracle建议查询单个分区,除非包含将查询限制为单个分区的范围谓词。
6.在线索引
在索引过程的开始和结束时基表被锁定的时间很短。
7.并行索引
Oracle Text通过CREATE INDEX语句支持并行索引。
在非分区表上输入并行索引语句时,Oracle Text将基本表拆分为临时分区,生成子进程,并将子级分配给分区。然后,每个子级都为其分区中的行建立索引。将基表切片为分区的方法由Oracle确定,不受直接控制。对于实际产生的子进程的数目也是如此,这取决于机器功能,系统负载,init.ora设置和其他因素。由于这些变量,实际的并行度可能与请求的并行度不匹配。
因为索引是一项密集的I / O操作,所以当具有分布式磁盘访问权限和多个cpu时,并行索引最有效地减少了索引时间。并行索引只能通过CREATE INDEX语句才能影响初始索引的性能。它不影响使用ALTER INDEX的插入,更新和删除操作,并且对查询性能的影响最小。
由于并行索引减少了初始索引时间,因此对于以下情况很有用:
- 产品包含Oracle Text索引时的数据暂存
- 基于大数据收集的应用程序的快速初始启动
- 应用程序测试,当您在开发应用程序时需要测试不同的索引参数和架构时
8.索引和视图