Oracle 11g Release 1 (11.1) Oracle 本文索引的四种类型
http://docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#g1020588
本文内容
对于 Oracle 文本,你可以使用 CREATE INDEX 创建很多类型的索引。下面描述每个索引类型,以及他们的目的和支持的特性。
- CONTEXT 索引
- CTXCAT 索引
- CTXRULE 索引
- CTXXPATH 索引
CONTEXT
描述
- 当你的文本是由大的、连续的文本组成时,可以使用该索引建立文本检索应用程序。你能为不同格式的文件建立索引,如 MS Word、HTML 或 纯文本。
- 你可以以不同方式自定义索引。
- 该类型索引在基表上执行 DML 后要求 CTX_DDL.SYNC_INDEX 。
支持的 preferences 和 parameters
- 除了 INDEX SET,支持所有的 CREATE INDEX preferences 和 parameters。
- 这些支持的参数包括索引分区子句(index partition clause)、格式(format)、字符集(charset)和语言列(language columns)。
查询运算符
CONTAINS
- 语法称为 CONTEXT 语法,它支持很多操作。
- CTXCAT 语法则可以带模板查询。
注意
- 支持所有的文本服务和查询服务。
- 支持分区文本表的索引。
- 支持 CREATE INDEX 的 FILTER BY 和 ORDER BY 子句,也可以索引结构化列值,更有效地处理混合查询。
CTXCAT
描述
- 使用该索引类型能够获得更好地混合查询性能。通常情况下,对于该索引,你可以为小文本或文本片段建立索引。例如,在基表的其他列上,如条目名、价格和描述,可以包含在索引中,以提高混合查询性能。
- 该索引类型在 DML 后是事务性、自动更新的,而不需要 CTX_DDL.SYNC_INDEX。
支持的 preferences 和 parameters
INDEX SET
LEXER
STOPLIST
STORAGE
- WORDLIST (仅 prefix_index 属性支持日语数据)。
- 不支持格式(Format)、字符集(charset)和语言列。
- 不支持表和索引分区。
查询运算符
CATSEARCH
- 语法称为 CTXCAT,它支持逻辑运算符,短语查询和通配符。
- CONTEXT 语法可以带模板查询。
- 支持主题查询。
注意
- 该索引较大,并且创建时间比 CONTEXT 长。
- CTXCAT 索引的大小与文本总量大小、索引集中的索引数量和索引列的数量有关。在向索引集添加索引前,仔细考虑你的查询和资源。
- CTXCAT 索引不支持表和索引分区,文本服务(高亮、标记、主题和概要),或查询服务(解释、查询反馈和浏览词)。
CTXRULE
描述
- 使用 CTXRULE 索引来建立文件分类或路由应用程序。该索引在一个查询表上建立,查询定义分类或路由标准。
支持的 preferences 和 parameters
- 如果使用 SVM_CLASSIFIER 分类器,那么你可以使用 BASIC_LEXER、CHINESE_LEXER、JAPANESE_LEXER,或 KOREAN_MORPH_LEXER 分词器。如果不使用 SVM_CLASSIFIER,那只能为你的查询集使用 BASIC_LEXER 分词器。(更多关于 Oracle 文本分词器和分类器)
- Filter、memory、datastore,和 [no]populate 参数不适合 CTXRULE 索引。
- CREATE INDEX 子句支持在查询上创建索引。
- 通配符支持在查询集上进行模糊操作
- 用 CTXRULE 索引进行查询类似于那些使用 CONTAINS 的查询。支持词组(“dog house”),以及下面 CONTAINS 运算符:ABOUT、AND、NEAR、NOT、OR、STEM、WITHIN 和 THESAURUS。支持节分组,使用 MATCHES 运算符分类文档,也支持字段节。然而,CTXRULE 不直接支持字段的查询,必须在一个 CONTEXT 查询上使用查询重写。
查询运算符
MATCHES
备注
- 可以通过 MATCHES 运算符把单个文件(纯文本、HTML,或 XML)分类,它把一个文件转换成一组查询,并且在 CTXRULE 索引中查找匹配的行。
CTXXPATH
描述
- 当你需要在 XMLType 列上加速 existsNode() 时,创建这类索引。
支持的 preferences 和 parameters
STORAGE
查询运算符
existsNode()
备注
- 这类索引将会弃用,只是为了与之前版本的 Oracle 数据库向后兼容,之前版的 Oracle 的 XMLIndex 索引不可用。如果你正在建立一个新的应用程序,那么,Oracle 建议你使用 XMLIndex 索引。
- 该索引只能创建在 XMLType 列。
- 尽管该索引对 existsNode() 查询很有用,但对于 XML 搜索并不需要。
总结
一个 Oracle 文本索引是一个 Oracle 数据库域索引。若要建立查询应用程序,你可以创建一个文本和结构化数据列相混合的 CONTEXT 索引,并用 CONTAINS 运算符查询。
你可以从一个文本表创建索引。在一个查询应用程序中,这个表必须包含文本或指向文本存储位置的指针。文本通常是文件的集合,但也可以是小的文本片段。
为了让混合查询获得更好地性能,你可以用 FILTER BY 和/或 ORDER BY 子句指定关系列,创建一个 CONTEXT 索引。 查询该索引得用 CONTAINS 运算符。
当你的应用程序严重依赖混合查询,基于相关标准,如日期或价格,来搜索小文件或描述性文本片段,可以使用 CTXCAT 索引。查询该索引使用 CATSEARCH 运营商。
若通过使用“简单或基于规则分类”来建立一个文档分类应用程序,这需要创建 CTXRULE 索引。该索引使用 MATCHES 运算符归类纯文本,HTML 或 XML 文档。在你索引的文本表中,存储你定义的查询集。
如果您正在使用 XMLType 列,那么创建 XMLIndex 索引,以加快带 existsNode() 查询速度。
使用标准 SQL,创建一个文本索引作为对 Oracle 数据库一类可扩展的索引。也就说,Oracle 文本索引运算符与 Oracle 数据库索引类似。它有一个可被引用的名称,可以用标准 SQL 语句操作。
创建 Oracle 文本索引的好处是,加快用带 CONTAINS、CATSEARCH,和 MATCHES Oracle 文本运算符进行文本查询的响应速度。这些运算符分别用来查询 CONTEXT、CTXCAT 和 CTXRULE 索引。
注意:
因为透明数据加密不支持域索引,因此不能使用 Oracle 文本。