设为首页 加入收藏

TOP

使用Oracle Text构建全文搜索应用程序(二)
2014-11-24 02:21:42 来源: 作者: 【 】 浏览:4
Tags:使用 Oracle Text 构建 全文 搜索 应用程序
大部分时间过滤阶段无需为每个文件指定文件格式即可很好地运行,但是,在基表中添加这一列可以对索引进程进行进一步控制。例如,使用格式列,您可以跳过某些文件类型不为其建立索引。当您只想正式支持应用程序中 Oracle Text 所支持的部分文件格式时,这一列非常有用。

#p#

Oracle Text 还可用于元数据的全文搜索。在示例应用程序中,有一个名为 issues 用于存储问题元数据的表。该表的定义如下:

  CREATE TABLE issues (
  id NUMBER,   summary VARCHAR(120),   description CLOB,   author VARCHAR(80),   ot_version VARCHAR(10)   );


ot_version 列为索引列,可用于强制为特定文档重新建立索引。该表可使用测试数据填充:

  INSERT INTO issues VALUES (1, Jane, Text does not make tea,
  Oracle Text is unable to make morning tea, 1);   INSERT INTO issues VALUES (2, John, It comes in the wrong color,   I want to have Text in pink, 1);


用户索引
Oracle Text 可为来自不同数据源的数据建立索引。Oracle Text 可用于问题跟踪系统,提供对问题元数据的全文搜索。在默认情况下,您可为单个列中的值建立索引,但是,如果要合并多个表的数据,您需要创建一个自定义的 PL/SQL 过滤器过程。我将演示如何创建这样的过程,这个过程将起到存储抽象的作用。然后,该索引进程将迭代文本表中所有的行,为每一行调用过滤器过程。过滤器过程将返回所有与问题相关的有待建立索引的文本。

  -- declare indexing procedure
  CREATE PACKAGE ot_search AS
  PROCEDURE issue_filter(rid IN ROWID, tlob IN OUT NOCOPY CLOB);
  END ot_search;
  /
  -- define indexing procedure
  CREATE PACKAGE BODY ot_search AS
  PROCEDURE issue_filter(rid IN ROWID, tlob IN OUT NOCOPY CLOB) IS
  BEGIN
  FOR c1 IN (SELECT author, summary, description FROM issues WHERE rowid = rid)
  LOOP
  dbms_lob.writeappend(tlob, LENGTH(c1.summary)+1, c1.summary || );
  dbms_lob.writeappend(tlob, LENGTH(c1.author)+1, c1.author || );
  dbms_lob.writeappend(tlob, LENGTH(c1.description), c1.description);
  END LOOP;
  END issue_filter;
  END ot_search;
  /
  -- define datastore preference for issues
  BEGIN
  ctx_ddl.create_preference(issue_store, user_datastore);
  ctx_ddl.set_attribute(issue_store, procedure, ot_search.issue_filter);
  ctx_ddl.s

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle数据库学习之第一篇 下一篇解决ora-01034:oracle not availa..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: