Oracle Text是如何支持本地文件的检索

来源:互联网 发布:网络转换器是什么东西 编辑:程序博客网 时间:2024/06/10 18:01
今天来看看强大的Oracle Text是如何支持本地文件的检索
它的实现是依靠参数datastore和filter的组合,在数据库的文本列中只保存指向
硬盘文件的指针,建立索引的时候,Oracle读取硬盘上的文件并且将索引存储在oracle
数据库中。Oracle支持对很多格式的文件的文本检索,包括txt、html、word、excel、PowerPoint、pdf
等,而且配合Lexer参数可以很好的支持了中文字符集的检索。
  实现方法:
  1)建立存储选项参数.制定DATASTORE参数为FILE_DATASTORE,提示Oracle从文件路径索引文本
  2)制定path参数,你以指定多个文件存储的文件路径,windows环境用";"号间隔(path1;path2;path2;;),
  unix环境用“:”号间隔(path1:path2:path3::)
  begin
    ctx_ddl.create_preference('my_datastore_prefs','FILE_DATASTORE');
ctx_ddl.set_attribute('my_datastore_prefs','path','D:\slh');
  end;
  /
  3)建立保存这些文件名称的表,向表中插入数据,注意:thefile列必须是在服务器上指定的Path路径下的文件。
  create table mydocs(id number primary key,title varchar2(255),thefile varchar2(255));
  insert into mydocs(id,title,thefile)values(1,'DOC1','doc1.doc');
  insert into mydocs(id,title,thefile)values(2,'DOC2','doc2.doc');
  4)建立全文索引,使用参数DATASOTRE和Filter,Lexer。Filter可以帮助Oracle识别不同格式文件,
  、可以是文本文件、word文档、pdf文档等,Lexer用来保证可以很好的从文件中索引中文信息。
  create index mydocs_text_index on mydocs(thefile) indextype is ctxsys.context parameters('
  datastore mydatastore_prefs Filter ctxsys.inso_filter Lexer mylexer');
  5)测试是否索引文件成功
  select id,title from mydocs where contains(thefile,'盗窃')>0;
  6)指定路径带来的相关问题
    如ctx_ddl.set_attributre('my_datastore_prefs','path','c:\temp;c\docs');
如果在2个目录中均有同名的文件1.doc,如果在thefile列中保存的仅仅是文件名称1.doc,则oracle
顺序查找路径下的文件,这样就会索引2次在c:\temp下的文件1.doc,我们可以通过加上文件的路径信息。
  7)在维护文档修改的时候同步索引的问题
    如果在修改了路径下面的某个文件内容,加入了文本或删除了文件,oracle在同步的时候不会察觉到文档的
内容的修改。有一个方法可以保证同步:
修改内容之后,更新一下表thefile的信息,但仍保证文件路径不变
update mydocs set thefile='1.doc' where thefile='1.doc'
    再次执行同步索引的时候,oracle才会保持文档内容同步。
  8)关于建立以及同步索引的时候发生的错误信息可以从ctx_user_index_errors用户视图中查看。
   9)索引同步: exec ctx_ddl.sync_index('mydocs_text_index');
        索引优化:exec ctx_ddl.optimize_index('mydocs_text_index','full');
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
原创粉丝点击