zoukankan      html  css  js  c++  java
  • Oracle 11g Release 1 (11.1) Oracle Text 如何创建 CONTEXT 索引

    http://docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#autoId73

    本文内容

    假设用 SQL*Plus 已经创建了一个用户,并为该用户授权相应的角色和执行 CTX 包的权限。在此基础上,讨论 Oracle 全文检索中的 CONTEXT 索引。

    CONTEXT 索引很适合索引大文档,如 MS Word、HTML,或纯文本。你可以以很多种不同的方式自定义一个 CONTEXT 索引。文档必须被加载在一个文本表中。

    • CONTEXT 索引和 DML
    • CONTEXT 索引的默认行为
    • 演示索引 HTML 文档
    • 演示用 FILTER BY 和 ORDER BY 处理的查询创建 CONTEXT 索引
    • CONTEXT 索引的“偏好”
    • 修改记录

    CONTEXT 索引和 DML

    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;

    参看 CTX_DDL.SYNC_INDEX 语法

    CONTEXT 索引的默认行为

    下面在 docs 表的 text 列上创建一个名为 myindex 默认 CONTEXT 索引:

    CREATE INDEX myindex ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT;

    该 SQL 是创建 CONTEXT 索引的最简单形式,没有任何配置。因此,有必要了解 Oracle 数据库在此情况的默认行为。

    当使用 CREATE INDEX 没有显示指定参数时,系统对所有国家语言按如下默认动作:

    • 假设要索引的文本直接存储在 text 列。text 列可以是 CLOBBLOBBFILEVARCHAR2CHAR 类型。
    • 检查列的类型,并对 BLOBBFILE 二进制列使用过滤。大部分文档格式都支持过滤。如果你的列是纯文本,那么系统不使用过滤。
    • 假设要索引的文本的语言是你安装数据库时指定的。
    • 使用你安装数据库时指定语言的默认“非索引字列表(stoplist )”。非索引字列表标识索引期间系统忽略的词。这是为了精简全文索引,去掉那些经常出现但对搜索没用的字符串。在索引创建期间,将忽略这些词。如,在英语中,诸如 "a"、"and"、"is" 和 "the" 之类的词;中文中,那些咿咿呀呀的语气词等。
    • 为你的语言启用模糊和词干查询。当然如果该功能在你的语言可用的话。
    • 你总是可以通过填充因子(Preferences)和参数(parameter )改变默认的索引行为。在参数里使用填充因子。

    演示索引 HTML 文档

    若索引位于 URLs 的 HTML 文档集,你可以在 CREATE INDEX 语句中指定系统已定义的 NULL_FILTER

    你也可以使用 HTML_SECTION_GROUP 指定节组,以及使用 URL_DATASTORE 数据存储在 my_url:

    begin
     ctx_ddl.create_preference('my_url','URL_DATASTORE');
     ctx_ddl.set_attribute('my_url','HTTP_PROXY','www-proxy.us.oracle.com');
     ctx_ddl.set_attribute('my_url','NO_PROXY','us.oracle.com');
     ctx_ddl.set_attribute('my_url','Timeout','300');
    end;
     
    begin
    ctx_ddl.create_section_group('htmgroup', 'HTML_SECTION_GROUP');
    ctx_ddl.add_zone_section('htmgroup', 'heading', 'H1');
    end;

    之后,你可以按如下索引你的文档:

    CREATE INDEX myindex on docs(htmlfile) indextype is ctxsys.context 
    parameters(
    'datastore my_url filter ctxsys.null_filter section group htmgroup'
    );

    说明:

    本例先创建“填充因子”,并在创建 CONTEXT 索引时,在其参数中规定“填充因子”。

    • datastoremy_url
    • filterctxsys.null_filter
    • section grouphtmlgroup
    自定义 CONTEXT 索引

    通过在创建 CONTEXT 索引前创建“填充因子”,并在创建 CONTEXT 索引时参数中使用你创建填充因子,就可以自定义 CONTEXT 索引。

    “填充因子”是 MS SQL Server 的叫法,我觉得蛮合适的,所以在 Oracle 中借用一下。所谓的“填充因子”相当于创建 CONTEXT 索引时/前对其的配置。

    演示用 FILTER BY 和 ORDER BY 处理的查询创建 CONTEXT 索引

    为了使查询处理更有效和混合查询响应时间更快,你可以在创建 CONTEXT 索引时使用 FILTER BYORDER BY  子句。如下所示:

    CREATE INDEX myindex on docs(text) INDEXTYPE is CTXSYS.CONTEXT
    FILTER BY category, publisher, pub_date
    ORDER BY pub_date desc;

    说明:

    • 通过在查询时指定过滤 categorypublisherpub_date 列,Oracle 文本将考虑把这些列的所有关系谓词放到文本索引的行资源,以获得更有效的查询处理。
    • 另外,通过指定 pub_date 降序排序,当查询已经匹配 ORDER BY 时,为了获得更好的响应时间,Oracle 文本将决定是否把 SORT 放到文本索引的行资源。

    CONTEXT 索引的“偏好”

    http://www.cnblogs.com/liuning8023/archive/2012/04/10/2439840.html

    修改记录

    • 第一次 2012-04-14 [UPDATE][ADD]

  • 相关阅读:
    linux -- 基于zookeeper搭建yarn的HA高可用集群
    Linux -- 之HDFS实现自动切换HA(全新HDFS)
    Hadoop格式化 From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection exception: java.net.
    Directory /home/hdfs/name is in an inconsistent state: storage directory does not exist or is not a
    react学习01
    单页面应用(spa)引入百度地图(Cannot read property 'dc' of undefined)
    npm 发布包
    Vue学习-01
    echarts3.0使用总结
    webpack学习--创建一个webpack打包流程
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2437509.html
Copyright © 2011-2022 走看看