İki olası neden - dizin eşitlenmeyebilir ve CONTAINS
sözcüklerle eşleşirken, LIKE
dizeleri eşleşiyor.
LIKE
maçlar hem fakat CONTAINS
maçlar ne iki dizeleri, bir örnek: Varsayılan olarak
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
, CONTEXT
indeksleri manually synchronized olmak gerekir. Ya koşmanız gerekiyor: exec ctx_ddl.sync_index('cidx_mustfixby');
, ya da on commit
ile dizin oluşturmalısınız.
exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;
MUST_FIX_BY
-----------
Q2 234567
Bu, sorunlardan birini giderir. Ancak Q234567
hala eşleşmiyor. Oracle Text hakkında pek bir şey bilmiyorum ve CONTAINS
'un nasıl çalıştığına dair basit bir açıklama bile bulamıyorum. Ama diziler yerine tam kelimelere dayanıyor gibi görünüyor. Basit bir CONTAINS
filtresi ile alınacak Q2 ve diğer karakterler arasında bir kelime sınır olması gerekir.
İkinci sorguyla ne elde etmeye çalışıyorsunuz? Bu dizeyi kaç kayıt içerdiğini öğrenmek için bir sayım (içerir (must_fix_by, 'Q2'))> 0 mı? – thursdaysgeek
Sorgunun, must_fix_by dosyasında Q2 olan tüm satırları döndürmesini istiyorum. Biliyorum GİBİ ile gidebilirim ama neden içerdiğini bilmek istiyorum. – Jeevan
Oh, pardon, yanlış olanı okudum. – thursdaysgeek