Twee mogelijke redenen:de index is mogelijk niet gesynchroniseerd en CONTAINS
lijkt overeen te komen met woorden terwijl LIKE
komt overeen met tekenreeksen.
Een voorbeeld van twee strings, waarbij LIKE
komt overeen met beide, maar CONTAINS
komt overeen met geen van beide:
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
Standaard CONTEXT
indexen moeten handmatig worden gesynchroniseerd
. U moet ofwel uitvoeren:exec ctx_ddl.sync_index('cidx_mustfixby');
, of je moet je index maken met on commit
.
exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;
MUST_FIX_BY
-----------
Q2 234567
Dit lost een van de problemen op. Maar Q234567
komt nog steeds niet overeen. Ik weet niet veel over Oracle Text, en ik kan niet eens een eenvoudige beschrijving vinden van hoe CONTAINS
werken. Maar het lijkt te zijn gebaseerd op volledige woorden in plaats van tekenreeksen. Er moet een soort woordgrens zijn tussen Q2 en andere karakters om het te kunnen oppikken door een simpele CONTAINS
filter.