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.