`
dingjun1
  • 浏览: 207931 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ORACLE TEXT全文检索

阅读更多
ORACLE 版本10.0.2
查看数据库相关的信息select * from nls_database_parameters
1、简单应用
    1.1如果要使用全文检索,当前ORACLE用户必须具有CTXAPP角色
--创建一个用户
--create user textsearch identified by textsearch;
/**
赋予用户三个角色,其中有一个为CTXAPP角色,
以便该用户可以使用与全文检索相关的PROCEDURE
*/
grant connect,resource,ctxapp to textsearch;
/


使用创建的用户登录
SQL> conn textsearch
输入口令: **********
已连接。

    1.2创建要进行全文检索的数据表,准备数据
    --drop table textdemo;
    create table textdemo(
        id number not null primary key,
        book_author varchar2(20),--作者
        publish_time date,--发布日期
        title varchar2(400),--标题
        book_abstract varchar2(2000),--摘要
        path varchar2(200)--路径
    );
    commit;

    insert into textdemo values(1,'宫琦峻',to_date('2008-10-07','yyyy-mm-dd'),'移动城堡','故事发生在19世纪末的欧洲,善良可爱的苏菲被恶毒的女巫施下魔咒,从18岁的女孩变成90岁的婆婆,孤单无助的她无意中走入镇外的移动城堡,据说它的主人哈尔以吸取女孩的灵魂为乐,但是事情并没有人们传说的那么可怕,性情古怪的哈尔居然收留了苏菲,两个人在四脚的移动城堡中开始了奇妙的共同生活,一段交织了爱与痛、乐与悲的爱情故事在战火中悄悄展开','E:\textsearch\moveingcastle.doc');

    insert into textdemo values(2,'莫·贝克曼贝托夫',to_date('2008-10-07','yyyy-mm-dd'),'子弹转弯','这部由俄罗斯导演提莫·贝克曼贝托夫执导的影片自6月末在北美上映以来,已经在全球取得了超过3亿美元的票房收入。在亚洲上映后也先后拿下日本、韩国等地的票房冠军宝座。虽然不少网友在此之前也相继通过各种渠道接触到本片,但相信影片凭着在大银幕上呈现出的超酷的视听效果,依然能够吸引大量影迷前往影院捧场。','E:\textsearch\catch.pdf');

    insert into textdemo values(3,'袁泉',to_date('2008-10-07','yyyy-mm-dd'),'主演吴彦祖和袁泉现身','电影《如梦》在上海同乐坊拍摄,主演吴彦祖和袁泉现身。由于是深夜拍摄,所以周围并没有过多的fans注意到,给了剧组一个很清净的拍摄环境,站在街头的袁泉低着头,在寒冷的夜里看上去还真有些像女鬼,令人毛骨悚然。','E:\textsearch\dream.txt');

    commit;


    1.3在摘要字段上创建索引

/*
*创建索引,使用默认的参数
*/
   --drop index demo_abstract;
    create index demo_abstract on textdemo(book_abstract)
    indextype is ctxsys.context
    --parameters('datastore ctxsys.default_datastore filter ctxsys.auto_filter ')
    ;
    commit;
;
系统会创建四个相关的表
DR$DEMO_ABSTRACT$I(分词后的TOKEN表)\DR$DEMO_ABSTRACT$K\DR$DEMO_ABSTRACT$N\DR$DEMO_ABSTRACT$R
查看索引创建过程中是否发生了错误
SELECT * FROM ctx_USER_index_errors 

1.4测试查询
select score(20),t.* from textdemo t where contains(book_abstract,'移动城堡 or 俄罗斯',20)>0;

select score(20),t.* from textdemo t where contains(book_abstract,'移动城堡 or 俄罗斯',20)>0 and t.title like '子弹%';


1.5查看索引脚本
select ctx_report.create_index_script('file_index') from dual;

2.对外部文件进行全文检索
    ORACLE TEXT可以对文件系统中的文件进行检索,支持大部分的文件格式(如:OFFICE、PDF等),不同的格式ORACLE TEXT会选择不同的
FILTER 提取二进制文件中的纯文本,生成一个虚拟的DOCUMENT,如同对单个文本型COLUMN创建索引一样。这一切都由ORACLE TEXT自己完成。
使用上表textdemo的数据,我们对path 创建索引
begin
  --ctx_ddl.drop_preference('my_filter');
  ctx_ddl.create_preference('my_filter','auto_filter');
end;
/
begin
  --ctx_ddl.drop_preference('my_store');
  ctx_ddl.create_preference('my_store','file_datastore');
  /*
  --设置文件的路径,由于此处数据表中已经包含了路径
  不需要再进行设置,如果表中只有文件名称无路径信息,
  需要设置该参数,如果文件在不同的路径下,也可以设置
  多个路径WINDOWS下用";"分开,UNIX用":",
  限制:设置目录后的文件名不应有路径信息,避免不同的目录
  下有相同的文件名.
  ctx_ddl.set_attribute('mystore','path','E:\demo;E:\textsearch');
  */
  --ctx_ddl.set_attribute('mystore','path','E:\demo');
end;
/
begin
  --ctx_ddl.drop_preference('my_lexer');
  ctx_ddl.create_preference('my_lexer','chinese_lexer');
end;

/

--drop index demo_path;
create index demo_path on textdemo(path)
indextype is ctxsys.context
parameters('
          datastore my_store
          filter my_filter
          lexer my_lexer
');

commit;




2.1查询
select score(20),t.* from textdemo t where contains(path,'苏菲 and 城堡',20)>0

--联合第一次对book_abstract做的索引进行查询
select score(5),score(20),t.* from textdemo t where contains(book_abstract,'电影',5)>0 AND contains(path,'数据库 and 全文检索',20)>0

2.2查看索引的大小信息
select ctx_report.index_size('demo_path') from dual

2.3 同步索引
索引异常可以从CTX_USER_INDEX_ERRORS视图跟踪。
数据库根据索引列的改变跟踪文档的改变,如果想强制ORACLE TEXT重新创建特定文档的索引,可以更新相对应行中的索引字段:
update textdemo set path=path where id = 4;
在索引同步时将会更新ID=4文件的关键字。

--update textdemo set path='E:\textsearch\dream.txt' where id=3;
update textdemo set path='E:\textsearch\catch.pdf' where id=2;
--update textdemo set path='E:\textsearch\movingcastle.doc' where id=1;
commit;
begin
/*
指定索引名称,和内存大小
*/
ctx_ddl.sync_index('demo_path','20M') ;
end;



3使用自定义的存储过程
USER_DATASTORE:合成索引时使用用户指定的存储过程
ATTRIBTES:
procedure:指明合成用于索引文本的存储过程,第一个参数必须为ROWID,当存储过程改变后,需要重新建立索引,
索引只会在指明定的字段修改或增加,同步索引才会起作用。
output_type:指定存储过程的第二个参数的数据类型(CLOB,CLOB_LOC,BLOB_LOC,VARCHAR2)默认为:CLOB,
当指定为CLOB_LOC,BLOB_LOC时,表示不需要临时的CLOB或BLOB变明,因为PROCEDURE复制一个locator到第二个IN/OUT参数
/*
创建自定义的存储过程
*/
create or replace procedure myproc(rid in rowid,tlob in out clob nocopy)

is

begin
for c1 in (select author,title,text from articles where rowid = rid)
loop
dbms_lob.writeappend(tlob,length(c1.title),c1.title);
dbms_lob.writeappend(tlob,length(c1.author),c1.author);
dbms_lob.writeappend(tlob,length(c1.text),c1.text);
end loop;
end;
/*
定位数据的存放形式,使用自定义的存储过程
*/

begin
ctx_ddl.create_preference('myud','user_datastore');
ctx_ddl.set_attribute('myud','procedure','myproc');
ctx_ddl.set_attribute('myud','output_type','clob');
end;

创建索引时,除了改变PARAMETERS('DATASTORE MYUD')外,其它的都不用做更改。
分享到:
评论

相关推荐

    OracleText全文检索.zip

    OracleText全文检索,包括文档、jsp、sql等

    Oracle Text全文检索技术在文档资料管理中的应用.pdf

    Oracle Text全文检索技术在文档资料管理中的应用.pdf

    oracle text全文检索的开发和相关文档

    是oracle text developer 和preference的中文版本,大家可以通过这个文档快速了解oracle text的一些使用和功能特点。

    oracle全文检索.pdf

    Oracle Text 查找功能包括模糊查找、词干查找(搜索mice 和查找mouse)、通配符、相近性等查找方式,以及结果分级和关键词突出显示等。你甚至 可以增加一个词典,以查找搭配词,并找出包含该搭配词的文档。

    Oracle9i的全文检索技术

    Oracle一直致力于全文检索技术的研究,当Oracle9i Rlease2发布之时,Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用的...

    Oracle 9i的全文检索技术

    使用Oracle9i和Oracle Text,可以方便而有效地利用标准的SQL...Oracle Text支持Oracle数据库所支持的大多数语言的基本全文搜索功能。本文将介绍如何使用Oracle9i的全文检索技术来为自己的应用提供一个优秀的 解决方案。

    基于Oracle Text电子政务全文检索技术的应用.pdf

    基于Oracle Text电子政务全文检索技术的应用.pdf

    Oracle全文检索.rar

    Oracle text 需要为可检索的数据项建立索引,用户才能够通过搜索查找内容,索引进程是根据管道建模的,在这个管道中,数据经过一系列的转换后,将其关键字会添加到索引中。该索引进程分为多个阶段,如下图 ......

    20081224-安装配置oracle全文检索

    本人使用过程中的笔记,相当明确的记录的安装和配置的信息,配有图片。

    Oracle9i的全文检索技术开发者网络Oracle

    >> 摘要 全文检索技术是智能信息管理的关键技术之一,Oracle Text作为Oracle9i的一个组件,提供了强大的全文检索功能,用Oracle9i做后台数据库,就可以充分利用其全文检索技术,构建复杂的大型文档管理系统。...

    oracle全文检索使用说明

    oracle全文检索使用说明 ,本篇主要介绍Oracle Text的基本结构和简单应用。

    oracle9i中全文检索的创建与使用

    racle从7.3开始支持全文检索,即用户可以使用Oracle服务器的上下文(ConText)选项完成基于文本的查询。具体可以采用通配符查找、模糊匹配、相关分类、近似查找、条件加权和词意扩充等方法。在Oracle8.0.x中称为...

    Oracle Text FAQ

    Oracle Text FAQ 文本处理及搜索

    oracle 全文检索

    oracle 全文检索 create

    详解Oracle数据库中文全文索引

    Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8...

    OracleTextKeywordConverter:用于 Oracle Text 中部分匹配搜索的关键字转换器

    OracleTextKeywordConverter 用于 Oracle Text 中部分匹配搜索的关键字转换器

    oracle database 10g 完整参考手册part1

    第25章 使用Oracle Text进行文本搜索 第26章 使用外部表 第27章 使用回闪查询 第28章 回闪:表和数据库 第Ⅳ部分 Pl/SQL 第29章 PL/SQL简介 第30章 触发器 第31章 过程、函数与程序包 第32章 使用本地动态SQL和DBMS_...

    Oracle 如何创建和使用全文索引

    不使用Oracle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的INSTR函数和LIKE操作符实现。 SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0; SELECT * FROM mytext WHERE thetext ...

    Oracle建立二进制文件索引的方法

    Oracle text是Oracle的全文检索技术,是9i版本标准版和企业版的一部分。Oracle text使用标准的sql语言索引、查找、分析存储在oracle数据库、文件或者网络里的文本及文档。 Oracle text能进行关于文档的语言分析...

    oracle database 11g 高清完整中文版part2

     第27章 使用oracle text 进行文本搜索  第28章 使用外部表  第29章 使用闪回查询  第30章 闪回:表和数据库  第31章 sql 重放 第ⅳ部分 pl/sql  第32章 pl/sql 简介  第33章 应用程序在线升级  第34章 ...

Global site tag (gtag.js) - Google Analytics