Dua kemungkinan alasan - indeks mungkin tidak disinkronkan, dan CONTAINS sepertinya cocok dengan kata-kata saat LIKE cocok dengan string.
Contoh dua string, di mana LIKE cocok dengan keduanya, tetapi CONTAINS tidak cocok:
create table test1(must_fix_by varchar2(4000));
create index cidx_mustfixby on test1(must_fix_by) indextype is ctxsys.context;
insert into test1 values('Q234567');
insert into test1 values('Q2 234567');
select * from test1 where must_fix_by like 'Q2%';
MUST_FIX_BY
-----------
Q234567
Q2 234567
select * from test1 where contains(must_fix_by, 'Q2') > 0;
no rows selected
Secara default, CONTEXT indeks harus disinkronkan secara manual
. Anda juga perlu menjalankan:exec ctx_ddl.sync_index('cidx_mustfixby'); , atau Anda perlu membuat indeks Anda dengan on commit .
exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;
MUST_FIX_BY
-----------
Q2 234567
Ini memperbaiki salah satu masalah. Tapi Q234567 masih belum sepadan. Saya tidak tahu banyak tentang Oracle Text, dan saya bahkan tidak dapat menemukan deskripsi sederhana tentang bagaimana CONTAINS bekerja. Tetapi tampaknya didasarkan pada kata-kata lengkap, bukan string. Perlu ada semacam batas kata antara Q2 dan karakter lain agar dapat diambil dengan CONTAINS sederhana filter.