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

今天來看看強大的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');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章