Oracle Textその2

前回の方法だとテキストファイルなどの検索ができなかった。
→バイナリだけ検索できるって微妙…

前提条件

  • 検索対象のファイルがパスワードなどの保護がかかっていないこと。
  • ファイルにアクセス可能な権限であること。

動作環境

  • Oracle10.2.0.1.0
  • OS:CentOS5.0

-- テーブル作成
 create table E_RESUME_FILE (
 id number(10),
-- ファイルのフォーマット テキストファイルなどはtext、word,excelについてはbinaryとする
 fmt varchar2(10),  
-- 文字コードのセットtextはJAAUTO(いろいろな文字コードのファイルがあるため), binaryはnull 
 cset varchar2(20), 
 text varchar(100), -- ファイルフルパス
 constraint pk_e_resume_file primary key(id)
);

-- insertを行うときに必要なシーケンスの作成
create sequence seq_E_RESUME_FILE 
start with 1
increment by 1;

insert into E_RESUME_FILE (id, fmt,cset,text) 
values(seq_E_RESUME_FILE.nextval,'text','JAAUTO','/home/oracle/filedir/hoge.txt');
insert into E_RESUME_FILE (id, fmt,cset,text) 
values(seq_E_RESUME_FILE.nextval,'text','JAAUTO','/home/oracle/filedir/002.txt');
insert into E_RESUME_FILE (id, fmt,cset,text) 
values(seq_E_RESUME_FILE.nextval,'binary',null,'/home/oracle/filedir/001.doc');
insert into E_RESUME_FILE (id, fmt,cset,text) 
values(seq_E_RESUME_FILE.nextval,'binary',null,'/home/oracle/filedir/iw2002-jnsa-takagi-dist.pdf');

-- preference作成
-- ↓いらないかも
--begin
--ctx_ddl.drop_preference('cs_filter');
--ctx_ddl.create_preference('cs_filter', 'CHARSET_FILTER');
--ctx_ddl.set_attribute('cs_filter', 'charset', 'JAAUTO');
--end;
--/
-- ↑いらないかも

-- index作成
create index idx_resume on E_RESUME_FILE(text) 
 indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore
--filter cs_filter
  filter CTXSYS.AUTO_FILTER
-- or filter CTXSYS.INSO_FILTER
  format column fmt
    charset column cset');

-- 索引同期化
begin
ctx_ddl.sync_index('idx_resume');
end;
/

-- 両方とも引っかかる。
select * from e_resume_file where contains(text,'機能') > 0;
select * from e_resume_file where contains(text,'web) > 0;