Две възможни причини - индексът може да не е синхронизиран и CONTAINS изглежда съвпада с думи, докато LIKE съвпада с низове.
Пример за два низа, където LIKE съвпада и с двете, но CONTAINS не съвпада с нито едно:
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 индексите трябва да бъдат ръчно синхронизирани
. Трябва или да изпълните:exec ctx_ddl.sync_index('cidx_mustfixby'); , или трябва да създадете своя индекс с on commit .
exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;
MUST_FIX_BY
-----------
Q2 234567
Това коригира един от проблемите. Но Q234567 все още не съответства. Не знам много за Oracle Text и дори не мога да намеря просто описание как CONTAINS върши работа. Но изглежда, че се основава на пълни думи вместо на низове. Трябва да има някаква граница на думата между Q2 и други знаци, за да може тя да бъде взета от прост CONTAINS филтър.