假设用 SQL*Plus 已经创建了一个用户,并为该用户授权相应的角色和执行 CTX 包的权限。在此基础上,讨论 Oracle 全文检索中的 CONTEXT 索引。
CONTEXT 索引很适合索引大文档,如 MS Word、HTML,或纯文本。你可以以很多种不同的方式自定义一个 CONTEXT 索引。文档必须被加载在一个文本表中。
- CONTEXT 索引和 DML
- CONTEXT 索引的默认行为
- 演示索引 HTML 文档
- 演示用 FILTER BY 和 ORDER BY 处理的查询创建 CONTEXT 索引
- CONTEXT 索引的“偏好”
- 修改记录
CONTEXT 索引不是事务性的。
- 当你删除记录时,索引的变化立刻反应出来。也就是说,从你删除记录那刻起,你的会话不能找到该记录。只要你提交,其他用户也将不能找到该记录。
- 对于插入和更新,新的信息直到发生索引同步,文本搜索才能看到。
因此,当你执行插入或更新时,必须用 CTX_DDL.SYNC_INDEX 显示同步索引。
示例1:演示用 2M 内部同步索引。
begin
ctx_ddl.sync_index('myindex', '2M');
end;
示例2:演示用 2M 内存同步 part1 索引分区。
begin
ctx_ddl.sync_index('myindex', '2M', 'part1');
end;
CONTEXT 索引的默认行为
下面在 docs 表的 text 列上创建一个名为 myindex 默认 CONTEXT 索引:
CREATE INDEX myindex ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT;
该 SQL 是创建 CONTEXT 索引的最简单形式,没有任何配置。因此,有必要了解 Oracle 数据库在此情况的默认行为。
当使用 CREATE INDEX 没有显示指定参数时,系统对所有国家语言按如下默认动作:
- 假设要索引的文本直接存储在 text 列。text 列可以是 CLOB、BLOB、BFILE、VARCHAR2 和 CHAR 类型。
- 检查列的类型,并对 BLOB 和 BFILE 二进制列使用过滤。大部分文档格式都支持过滤。如果你的列是纯文本,那么系统不使用过滤。
- 假设要索引的文本的语言是你安装数据库时指定的。
- 使用你安装数据库时指定语言的默认“非索引字列表(stoplist )”。非索引字列表标识索引期间系统忽略的词。这是为了精简全文索引,去掉那些经常出现但对搜索没用的字符串。在索引创建期间,将忽略这些词。如,在英语中,诸如 "a"、"and"、"is" 和 "the" 之类的词;中文中,那些咿咿呀呀的语气词等。
- 为你的语言启用模糊和词干查询。当然如果该功能在你的语言可用的话。
- 你总是可以通过填充因子(Preferences)和参数(parameter )改变默认的索引行为。在参数里使用填充因子。