Oracle的全文检索技术
- 格式:doc
- 大小:70.50 KB
- 文档页数:8
使用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在执行查询时,会根据查询条件选择合适的索引来进行扫描。
它使用以下几种
方法来选择索引扫描方式:
1. 全表扫描(Full Table Scan):当没有适用的索引或者优化器认为全表扫描更高效时,Oracle会选择对整个表进行扫描。
这通常在小表或者需要扫描大部分数据的情况下发生。
2. 索引扫描(Index Scan):如果有适用的索引,Oracle可以使用索引扫描来避免全表
扫描。
索引扫描可以是范围扫描(Range Scan)、唯一索引扫描(Unique Scan)、位
图索引扫描(Bitmap Index Scan)等。
3. 聚簇索引扫描(Clustered Index Scan):当表使用聚簇索引时,Oracle可以通过聚簇
索引扫描来获取数据。
聚簇索引将相邻行的数据存储在一起,因此可以减少磁盘I/O
操作。
4. 索引唯一扫描(Index Unique Scan):当查询条件中包含唯一索引的完整键值时,Oracle可以使用索引唯一扫描来获取数据。
这种扫描方式只返回满足条件的一行数据。
5. 索引范围扫描(Index Range Scan):当查询条件中包含索引的部分键值时,Oracle
可以使用索引范围扫描来获取数据。
这种扫描方式返回满足条件的多行数据。
以上是Oracle选择索引扫描方法的一些常见方式,实际选择会受到许多因素的影响,
如索引的选择性、表的大小、查询条件的复杂度等。
优化器会根据统计信息和成本评
估来选择最佳的索引扫描方式。
1 全文检索系统方案1.1 全文检索系统总体方案系统将采用以下全文检索流程。
针对企业内部的信息,包括文件服务器上的文件、网站网页、ERP 等系统存放信息的数据库信息、办公应用中的公文档案文档已经内容管理系统中流转的内容,本系统提供了两种数据适配器来提取其中的正文内容和属性内容,形成一个相对结构化的数据虚拟层;本系统的索引引擎(Indexer )对结构化的数据虚拟层进行中文切分词、文件特征分析和逐步索引,以及其它索引算法,生成索引数据库;使用者(user )在搜索页面中输入查询字串等搜索条件并提交给本系统后,本系统的全文检索查询引擎(Searcher )会在索引库中进行搜索,并将符合搜索条件的搜索结果返回给使用者;使用者(user )可于查询结果页面,进一步链接到信息原文查看详细内容。
对于系统管理,管理员可通过相应web 方式的管理程序来管理整个系统运行环境及设置文件;并通过索引引擎(Indexer.exe )实时或定时创建索引,更新索引数据库的内容,使检索信息维持在最新状态。
IRMS.Indexer Index DatabaseIRMS.SearchEngine(User Interface)Application (User Interface)ApplicationTerm Extract Term Index Folder/Share Folder with DocumentsWeb Site Robot/Spider By URL EntryRDBMS(ODBC /OLEDB / JDBC)Lotus Domino R5,R6(NSF)FileNET內容管理Fuzzy SearchSynonym PhraseWild-CardMulti-field Filter IRMS AdapterData Source ComposerFile Extractor1.2 全文检索系统平台架构本系统基于组件化和松散耦合架构和设计,系统平台架构示意图如下:整个系统主要分为信息整合、信息萃取和服务、应用整合三个部分。
oracle检索第5行摘要:1.Oracle 简介2.Oracle 检索第5 行的方法3.实例操作正文:【Oracle 简介】Oracle 是一款广泛应用于企业级数据管理的关系型数据库管理系统,以其高性能、安全稳定、可扩展性强而著称。
Oracle 数据库支持多种数据类型,可以满足不同业务场景的需求,因此在全球范围内拥有大量用户。
【Oracle 检索第5 行的方法】在Oracle 中,要检索第5 行数据,可以使用ROWNUM 伪列或者使用ROW_NUMBER() 分析函数。
下面分别介绍这两种方法:方法一:使用ROWNUM 伪列```sqlSELECT * FROM (SELECT t.*, ROWNUM rn FROM your_table t) WHERE rn = 5;```方法二:使用ROW_NUMBER() 分析函数```sqlSELECT * FROM (SELECT t.*, ROW_NUMBER() OVER (ORDER BYsome_column) rn FROM your_table t) WHERE rn = 5;```【实例操作】假设有一个名为“employees”的表,包含以下列:id, name, age, department。
现在要检索第5 行的数据,可以使用以下SQL 语句:方法一:```sqlSELECT * FROM (SELECT t.*, ROWNUM rn FROM employees t) WHERE rn = 5;```方法二:```sqlSELECT * FROM (SELECT t.*, ROW_NUMBER() OVER (ORDER BY id) rn FROM employees t) WHERE rn = 5;```以上两种方法都可以实现检索第5 行数据的需求。
[转载]oracleText全⽂检索功能对中⽂分词的⽀持情况下⾯例⼦在XE中测试通过。
准备⼯作:CREATE TABLE issues (ID NUMBER,summary VARCHAR(120),description CLOB,author VARCHAR(80),ot_version VARCHAR(10));INSERT INTO issuesVALUES (1, 'Jane', 'Text does not make tea','Oracle Text is unable to make morning tea', 1);INSERT INTO issuesVALUES (2, 'John', 'It comes in the wrong color','I want to have Text in pink', 1);INSERT INTO issuesVALUES (3, 'Mike', 'I come from china', '所以我讲中⽂', 1);--下⾯两句话很难解析的INSERT INTO issuesVALUES (4, 'Mike', 'I come from china', '吉林省长春市的⼈民', 1);INSERT INTO issuesVALUES (5, 'Mike', 'I come from china','我们要积极地主动作好计划⽣育⼯作', 1);-- define datastore preference for issuesBEGIN--ctx_ddl.drop_preference ('issue_lexer');ctx_ddl.set_attribute ('issue_store', 'output_type', 'CLOB');ctx_ddl.create_preference ('issue_lexer', 'CHINESE_LEXER');END;/-- index issues 没有指定任何lexerCREATE INDEX issue_index ON issues(author) INDEXTYPE IS ctxsys.CONTEXT;--进⾏查询SELECT *FROM issuesWHERE contains (author, '中⽂', 1) > 0;会返回no rows selected。
oracle查询数据库名称的语句在Oracle数据库中,可以使用多种方法查询数据库名称。
以下是一些常用的查询方法:1. 使用全局数据字典视图:在Oracle数据库中,可以使用全局数据字典视图来查询数据库名称。
全局数据字典视图存储了关于数据库实例和对象的元数据信息。
具体的查询语句如下:```SELECT nameFROM v$database;```这将返回数据库的名称。
2. 使用系统表:Oracle数据库还提供了一些系统表,可以通过这些系统表查询数据库名称。
其中,`v$database`表和`v$instance`表是常用的。
```SELECT nameFROM v$database;```或```SELECT nameFROM v$instance;```这两个查询都可以返回数据库的名称。
3. 使用SQL*Plus命令:如果在Oracle数据库中使用SQL*Plus命令行工具,可以通过以下命令来查询数据库名称:```SELECT ora_database_nameFROM dual;```这将从`dual`表中返回数据库的名称。
4. 使用特殊的行属性:在Oracle数据库中,可以使用`SELECT`语句的`FROM`子句中的特殊行属性来查询数据库名称。
```SELECT*FROMtable(sys_context('userenv','con_name'));```这将返回数据库的名称。
总结起来,查询Oracle数据库名称的方法有很多种,包括使用全局数据字典视图、系统表、SQL*Plus命令和特殊的行属性等。
根据实际情况选择合适的方法来查询数据库名称。
Oracle中的全局索引(global index)是用于加速数据检索的一种数据库对象。
当你在表(table)或其分区(partition)上执行数据定义语言(DDL)操作时,例如添加、删除或修改列,这些操作可能会使相关的全局索引失效(invalidate)。
为了保持索引的可用性并优化查询性能,Oracle提供了在DDL操作中自动更新索引的功能。
当你使用UPDATE GLOBAL INDEXES或UPDATE INDEXES语句时,Oracle会在执行DDL操作后自动重新构建或验证这些受影响的索引,使它们保持有效(valid)状态。
具体来说,UPDATE GLOBAL INDEXES或UPDATE INDEXES语句告诉Oracle在修改表或分区结构后更新所有相关的全局索引。
Oracle会检查哪些索引受到影响,并根据需要执行重建或验证操作。
在更新全局索引的过程中,Oracle通常会采用以下方法:
1.重建索引(Rebuild Index):如果索引由于某种原因(如DDL操作)变得无效,Oracle会重
新构建该索引。
这意味着它会根据表的当前数据重新创建索引条目,以确保索引与表数据保持一致。
2.验证索引(Validate Index):在某些情况下,Oracle可能不需要完全重建索引,而只需要验证
其完整性。
验证索引会检查索引条目是否与表数据匹配,如果不匹配,则进行必要的调整。
通过使用UPDATE GLOBAL INDEXES或UPDATE INDEXES语句,你可以确保在表或分区结构更改后,相关的全局索引仍然有效,从而保持查询性能并减少因索引失效而导致的潜在问题。
Oracle支持多种全文检索索引类型,包括:
1. 简单全文索引(Basic Text Index):适用于常规的全文搜索需求,将文本内容分解为单词,存储在索引中,并提供搜索、排序和过滤功能。
2. 范围索引(Range Index):针对XML数据类型的索引,用于对XML文档的路径进行全文搜索,支持基于XSLT风格模式的查询和范围搜索。
3. 空间索引(Spatial Index):用于支持基于空间关系的查询,例如地理位置或几何形状的搜索,可以加速地理信息系统(GIS)或位置相关应用的查询操作。
Oracle索引类型按照物理可划分为分区索引和非分区索引,按照索引结构可划分为正常索引、Bitmap索引、Reverse索引和Domain 索引。
Oracle Text使用小结一、Oracle Text介绍Oracle从7.3开始支持全文检索,即用户可以使用Oracle服务器的上下文(ConText)完成基于文本的查询(具体可采用通配符查找、模糊匹配、相关分类、近似查找、条件加权和词意扩充等方法);在Oracle 8.0.x中称为ConText ;在Oracle 8i 中称为interMedia Text ; Oracle9i中称为Oracle Text。
Oracle Text是9i 标准版和企业版的一部分,Oracle9i将全文检索功能做为内置功能提供给用户,使得用户在创建数据库实例时自动安装全文检索。
Oracle Text使Oracle 9i具备了强大的文本检索能力和智能化的文本管理能力。
使用Oracle Text,可以方便而有效地利用标准的SQL工具来构建基于文本的新的开发工具或对现有应用程序进行扩展。
应用程序开发人员可以在任何使用文本的Oracle数据库应用程序中充分利用Oracle Text搜索,应用范围可以是现有应用程序中可搜索的注释字段,也可是实现涉及多种文档格式(包括doc,excel,txt,pdf等)和复杂搜索标准的大型文档管理系统,还可是来自Internet和文件系统的文本数据搜索XML应用程序。
Oracle Text支持Oracle数据库所支持的大多数语言的基本全文搜索功能。
要使用Oracle Text,必须具有CTXAPP角色或者是CTXSYS用户。
Oracle Text 为系统管理员提供CTXSYS用户,为应用程序开发人员提供CTXAPP角色。
CTXSYS 用户可执行以下任务:启动Oracle Text服务器,执行CTXAPP角色的所有任务。
具有CTXAPP 角色的用户可执行以下任务:创建索引,管理Oracle Text数据字典,包括创建和删除首选项,进行Oracle Text查询,使用Oracle Text PL/SQL程序包。
检索数据库和方法
1. 关键字检索:这是最常见的检索方法,用户通过输入与所需信息相关的关键字来查找匹配的记录。
数据库将返回包含这些关键字的所有记录。
2. 高级检索:高级检索允许用户使用更多的条件和运算符来更精确地定义他们的检索需求。
用户可以使用逻辑运算符(如 AND、OR、NOT)以及通配符来组合多个关键字,并指定字段、日期范围等条件。
3. 全文检索:全文检索是一种基于文本内容的检索方法,它可以搜索数据库中所有文本字段的内容。
它不仅可以匹配确切的关键字,还可以匹配关键词的近义词、相关词等。
4. 分类检索:某些数据库可能按照特定的分类体系进行组织,用户可以通过选择特定的分类来检索相关的记录。
5. 字段检索:用户可以选择特定的字段进行检索,例如作者、标题、摘要、日期等。
这种方法可以帮助用户更准确地找到他们所需的信息。
6. 布尔检索:布尔检索是一种使用逻辑运算符来组合检索条件的方法。
例如,用户可以使用"AND"操作符来查找同时包含两个关键字的记录,使用"OR"操作符来查找包含任何一个关键字的记录。
这些是一些常见的数据库检索方法,具体的检索方式可能因所使用的数据库系统而有所不同。
在进行数据库检索时,建议先了解所使用的数据库的检索功能和语法,以便有效地找到所需的信息。
杂查询提供了先进的软件级解决方案,具有业界先进的架构和高度的可靠性。
兼容1、体系结构方面,DM7兼容o racle的单库单实例式结构、表空间-数据文件机制、回滚机制、多版本并发控制、闪回。
2、应用开发接口兼容,兼容PL/SQL常用语法90%、OCI、OOCI、OO4O接口兼容、系统包机制。
3、维护管理方式兼容,兼容大量V$动态视图、AWR性能分析报告、10053等事件。
(案例:现已成功应用于商务部、政法委、工信部、国家电网、中国铁建集团、中国铁路总公司、中国航信等政府机关、大型中央国有企业以及国防,其中达梦数据库替换OR ACLE在国家智能电网已稳定运行6年,占有率达80%;经过实测,达梦数据库支撑的中国铁建集团财务大共享系统,支持在线用户高达12000个。
)高可用性1、DM7可以提供数据库或整个服务器的冷/热备份以及对应的还原功能,达到数据库数据保护和迁移。
支持的备份类型包括物理备份、逻辑备份,可实现全库、表空间、B树3个级别的备份。
支持增量备份,支持以检查点进行还原。
2、DM7提供事务级的同步复制和异步复制功能。
DM7数据复制功能支持一到多、多到一、级联复制、多主多从复制、环形复制、对称复制以及大数据对象复制。
1、RAC是Or acle数据库高可用性解决方案。
高可用性包含两部分的内容:首先是在这种解决方案下要确保数据不丢失,这是最基础的也是必须要保证的;2、其次是确保不停机,使Oracl e数据库一直维持在正常的运行状态,避免停机给客户带来的损失高安全性1、DM7是具有自主知识产权的高安全数据库管理系统,已通过公安部安全四级评测。
是目前安全等级最高的商业数据库之一。
同时DM7还通过了中国信息安全测评中心的EAL4级评测。
oracle索引。
其中全⽂检索最变态全⽂检索位图索引B全⽂检索很少使⽤,如果产品上使⽤⼤家可以⽤Lcunce这些应⽤如果⾮要在数据库做这个采⽤就把⽤⼀个全⽂检索索引检索索引不会像其他的索引创建⼀个对象他会创建⼗个相关的对象。
⼗张的其中⼀张表存在形式如下Dtaken_text token_last tokent_count是 1 1是⼀个 1 1我是 1 1我是⼀个 1 1通过形式就猜到冗余存储如果表数据10M 索引表估计要50m⼤家会想问like 会⽤全⽂索引实际是不会的下⾯⽅法使⽤select * form t where contains("name","DBA")>0我插⼊⼀条sql 会直接有索引吗答案可能你猜错了没有的需要⼿⼯同步alter index t_idx_rebuild parameters('sync');⼿⼯同步有时间也是优势,以后讲sql优化⽅案会讲到的。
删除更新同样需要公共同步当然oracle 可以⾃动同步,只是默认没有开启。
全⽂索引操作量太⼤。
位图索引在⼤量相同数据时B树索引是⾮常低效的。
位图索引存款空间⼩对 or⽐较⾼效。
位图索引适合数据仓库不适合 oltp位图索引⽤在下⾯情况1.重复率⾼的数据2.特定类型的查询。
对 or⽐较⾼效。
3.联合索引B树索引唯⼀索引和主键的区别。
主键侧重的外键,唯⼀索引强调索引。
采⽤数据结构B树索引。
⼤量插⼊压⼒很⼤。
Hive索引的弊端:– 每次查询时候都要先⽤⼀个job扫描索引表,如果索引列的值⾮常稀疏,那么索引表本⾝也会⾮常⼤– 索引表不会⾃动rebuild,如果表有数据新增或删除,那么必须⼿动rebuild索引表数据索引是传统RDBMS的标准技术,⽤来加速查询Hive⾃0.7版本开始⽀持索引,但提供的功能很有限,效率也并不⾼,因此Hive索引很少使⽤Hive索引原理:– 在指定列上建⽴索引,⽣成⼀张索引表(Hive的⼀张物理表),记录以下三个字段:索引列的值、该值对应的HDFS⽂件路径、该值在⽂件中的偏移量– 在执⾏索引字段查询时候,⾸先额外⽣成⼀个MapReduce job,根据对索引列的过滤条件,从索引表中过滤出索引列的值对应的hdfs⽂件路径及偏移量,输出到hdfs上的⼀个⽂件中,然后根据这些⽂件中的hdfs路径和偏移量,筛选原始input⽂件,⽣成新的split,作为整个job的split,达到不⽤全表扫描的⽬的。
全文检索(oracle text)Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力,Oracle Text是Oracle9i采用的新名称,在oracle8/8i中被称为oracle intermedia text,oracle8以前是oracle context cartridge。
Oracle Text的索引和查找功能并不局限于存储在数据库中的数据。
它可以对存储于文件系统中的文档进行检索和查找,并可检索超过150种文档类型,包括Microsoft Word、PDF和XML。
Oracle Text查找功能包括模糊查找、词干查找(搜索mice 和查找mouse)、通配符、相近性等查找方式,以及结果分级和关键词突出显示等。
你甚至可以增加一个词典,以查找搭配词,并找出包含该搭配词的文档。
Oracle text 需要为可检索的数据项建立索引,用户才能够通过搜索查找内容,索引进程是根据管道建模的,在这个管道中,数据经过一系列的转换后,将其关键字会添加到索引中。
该索引进程分为多个阶段,如下图1.数据检索(Datastore):只是将数据从数据存储(例如web页面、数据库大型对象或本地文件系统)中取出,然后作为数据流传送到下一个阶段。
2. 过滤(Filter):过滤器负责将各种文件格式的数据转换为纯文本格式,索引管道中的其他组件只能处理纯文本数据,不能识别 Ms word 或 excel 等文件格式。
3. 分段(Sectioner):分段器添加关于原始数据项结构的元数据。
4. 词法分析(Lexer):根据数据项的语言将字符流分为几个字词。
5. 索引(Index):最后一个阶段将关键字添加到实际索引中。
测试环境:Linux AS release 4 (Nahant Update 3), oracle10g(10.2.0.2.0)内容简介:本文档主要以实验为主,文档中包含了大量的实验例子,部分测试用例来自document,部分来自网友的测试,所有的例子都在oracle10g中测试通过。
Oracle的全文检索技术Oracle一直致力于全文检索技术的研究,当Oracle9i Rlease2发布之时,Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。
Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text。
使用Oracle Text,可以方便而有效地利用标准的SQL工具来构建基于文本的新的开发工具或对现有应用程序进行扩展。
应用程序开发人员可以在任何使用文本的Oracle数据库应用程序中充分利用Oracle Text搜索,应用范围可以是现有应用程序中可搜索的注释字段,也可是实现涉及多种文档格式和复杂搜索标准的大型文档管理系统。
Oracle Text支持Oracle数据库所支持的大多数语言的基本全文搜索功能。
虽然大多数大型数据库都支持全文检索,但Oracle在这方面无疑是最出色的。
Oracle 能搜索多种格式的文档,如Word,Execl,PowerPoint,Html,PDF等等。
但在使用中也发现有遗憾的地方,Oracle Text无论使用何种过滤器(INSO_FILTER或NULL_FILTER)及何种词法分析器(BASIC_LEXER,CHINESE_VGRAM_LEXER还是CHINESE_LEXER)都不能检索出中文内容的文本文档(TXT,RTF)。
1 Oracle Text的体系架构下图是Oracle Text的体系架构:图1 Oracle Text的体系架构Oracle Text 索引文档时所使用的主要逻辑步骤如下:(1)数据存储逻辑搜索表的所有行,并读取列中的数据。
通常,这只是列数据,但有些数据存储使用列数据作为文档数据的指针。
例如,URL_DATASTORE 将列数据作为URL 使用。
如果对本地文件进行检索,只要指定DATASTORE中FILE_DA TASTORE参数为文件的路径即可。
(2)过滤器提取文档数据并将其转换为文本表示方式。
存储二进制文档(如Word 或Acrobat 文件) 时需要这样做。
过滤器的输出不必是纯文本格式-- 它可以是XML 或HTML 之类的文本格式。
(3)分段器提取过滤器的输出信息,并将其转换为纯文本。
包括XML 和HTML 在内的不同文本格式有不同的分段器。
转换为纯文本涉及检测重要文档段标记、移去不可见的信息和文本重新格式化。
(4)词法分析器提取分段器中的纯文本,并将其拆分为不连续的标记。
既存在空白字符分隔语言使用的词法分析器,也存在分段复杂的亚洲语言使用的专门词法分析器。
(5)索引引擎提取词法分析器中的所有标记、文档段在分段器中的偏移量以及被称为非索引字的低信息含量字列表,并构建反向索引。
倒排索引存储标记和含有这些标记的文档。
归纳起来如下:(1)建表并装载文本(包含带有需要检索的文本字段)(2)配置索引(3)建立索引(4)发出查询(5)索引维护:同步与优化(将在后面介绍)文本装载要实现文本的全文检索首先必须把正确的文本加载到数据库表中,默认的建立索引行为要求将文档装载在文本列中,尽管可以用其它方式(包括文件系统和URL 形式)存储文档(在"数据存储"选项进行设置)。
默认情况下,系统应该将文档装载在文本列中。
文本列可以是VARCHAR2、CLOB、BLOB、CHAR或BFILE。
注意,只有在将Oracle7系统移植到Oracle8的情况下才支持用LONG和LONG RAW 这两个相反的列类型存储文本。
不能为列类型NCLOB、DA TE和NUMBER建立索引。
关于文档格式,因为系统能为包括HTML、PDF、Microsoft Word和纯文本在内的大多数文档格式建立索引,可以将其中的任何文档类型装载到文本列中(在"过滤器"选项中设置)。
有关所支持的文档格式的详细信息,可以参阅Oracle Text User's Guideand Reference 中的附录"Supported Filter Formats"。
装载方法主要有以下几种:(1)SQL INSERT 语句(2)ctxload 可执行文件(3)SQL*Loader(4)从BFILE 中装载LOB 的DBMS_LOB.LOADFROMFILE() PL/SQL 过程(5)Oracle Call Interface建立索引文本装入文本列后,就可以创建Oracle Text索引。
文档以许多不同方案、格式和语言存储。
因此,每个Oracle Text 索引有许多需要设置的选项,以针对特定情况配置索引。
创建索引时,Oracle Text可使用若干个默认值,但在大多数情况下要求用户通过指定首选项来配置索引。
每个索引的许多选项组成功能组,称为"类",每个类集中体现配置的某一方面,可以认为这些类就是与文档数据库有关的一些问题。
例如:数据存储、过滤器、词法分析器、相关词表、存储等。
每个类具有许多预定义的行为,称之为对象。
每个对象是类问题可能具有的答案,并且大多数对象都包含有属性。
通过属性来定制对象,从而使对索引的配置更加多变以适应于不同的应用。
(1)存储(Storage)类存储类指定构成Oracle Text索引的数据库表和索引的表空间参数和创建参数。
它仅有一个基本对象:BASIC_STORAGE,其属性包括:I_Index_Clause、I_Table_Clause、K_Table_Clause、N_Table_Clause、P_Table_Clause、R_Table_Clause。
(2)数据存储(Datastore)类数据存储:关于列中存储文本的位置和其他信息。
默认情况下,文本直接存储到列中,表中的每行都表示一个单独的完整文档。
其他数据存储位置包括存储在单独文件中或以其URL 标识的Web 页上。
七个基本对象包括:Default_Datastore、Detail_Datastore、Direct_Datastore、File_Datastore、Multi_Column_Datastore 、URL_Datastore、User_Datastore,。
(3)文档段组(Section Group)类文档段组是用于指定一组文档段的对象。
必须先定义文档段,然后才能使用索引通过WITHIN 运算符在文档段内进行查询。
文档段定义为文档段组的一部分。
包含七个基本对象:AUTO_SECTION_GROUP、BASIC_SECTION_GROUP、HTML_SECTION_GROUP、NEWS_SECTION_GROUP、NULL_SECTION_GROUP、XML_SECTION_GROUP、PATH_SECTION_GROUP。
(4)相关词表(Wordlist)类相关词表标识用于索引的词干和模糊匹配查询选项的语言,只有一个基本对象BASIC_WORDLIST,其属性有:Fuzzy_Match、Fuzzy_Numresults、Fuzzy_Score、Stemmer、Substring_Index、Wildcard_Maxterms、Prefix_Index、Prefix_Max_Length、Prefix_Min_Length。
(5)索引集(Index Set)索引集是一个或多个Oracle 索引(不是Oracle Text索引) 的集合,用于创建CTXCAT类型的Oracle Text索引,只有一个基本对象BASIC_INDEX_SET。
(6)词法分析器(Lexer)类词法分析器类标识文本使用的语言,还确定在文本中如何标识标记。
默认的词法分析器是英语或其他西欧语言,用空格、标准标点和非字母数字字符标识标记,同时禁用大小写。
包含8个基本对象:BASIC_LEXER、CHINESE_LEXER、CHINESE_VGRAM_LEXER、JAPANESE_LEXER、JAPANESE_VGRAM_LEXER、KOREAN_LEXER、KOREAN__MORPH_ LEXER、MULTI_LEXER。
(7)过滤器(Filter)类过滤器确定如何过滤文本以建立索引。
可以使用过滤器对文字处理器处理的文档、格式化的文档、纯文本和HTML 文档建立索引,包括5个基本对象:CHARSET_FILTER、INSO_FILTER INSO、NULL_FILTER、PROCEDURE_FILTER、USER_FILTER。
(8)非索引字表(Stoplist)类非索引字表类是用以指定一组不编入索引的单词(称为非索引字)。
有两个基本对象:BASIC_STOPLIST (一种语言中的所有非索引字) 、MULTI_STOPLIST (包含多种语言中的非索引字的多语言非索引字表)。
查询建立了索引,就可以使用SELECT 语句中的CONTAINS 运算符发出文本查询。
使用CONTAINS 可以进行两种查询:单词查询和ABOUT查询。
5.1 词查询示例词查询是对输入到CONTAINS 运算符中单引号间的精确单词或短语的查询。
在以下示例中,我们将查找文本列中包含oracle 一词的所有文档。
每行的分值由使用标签 1 的SCORE 运算符选定:SELECT SCORE(1) title from news WHERE CONTAINS(text, 'oracle', 1) > 0;在查询表达式中,可以使用AND 和OR 等文本运算符来获取不同结果。
还可以将结构性谓词添加到WHERE 子句中。
可以使用count(*)、CTX_QUERY.COUNT_HITS 或CTX_QUERY.EXPLAIN 来计算查询的命中(匹配) 数目。
5.2 ABOUT查询示例在所有语言中,ABOUT查询增加了某查询所返回的相关文档的数目。
在英语中,ABOUT 查询可以使用索引的主题词组件,该组件在默认情况下创建。
这样,运算符将根据查询的概念返回文档,而不是仅依据所指定的精确单词或短语。
例如,以下查询将查找文本列中关于主题politics 的所有文档,而不是仅包含politics 一词的文档:SELECT SCORE(1) title from news WHERE CONTAINS(text, 'about(politics)', 1) > 0;索引维护索引建好后,如果表中的数据发生变化,比如增加或修改了记录,怎么办?由于对表所发生的任何DML语句,都不会自动修改索引,因此,必须定时同步(sync)和优化(optimize)索引,以正确反映数据的变化。