前回の方法だとテキストファイルなどの検索ができなかった。
→バイナリだけ検索できるって微妙…
前提条件
- 検索対象のファイルがパスワードなどの保護がかかっていないこと。
- ファイルにアクセス可能な権限であること。
動作環境
- 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;