Dos posibles motivos:es posible que el índice no esté sincronizado y CONTAINS
parece coincidir con las palabras mientras LIKE
coincide con cadenas.
Un ejemplo de dos cadenas, donde LIKE
coincide con ambos, pero CONTAINS
no coincide con ninguno:
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
De forma predeterminada, CONTEXT
los índices deben sincronizarse manualmente
. Debe ejecutar:exec ctx_ddl.sync_index('cidx_mustfixby');
, o necesita crear su índice con on commit
.
exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;
MUST_FIX_BY
-----------
Q2 234567
Esto soluciona uno de los problemas. Pero Q234567
todavía no está emparejado. No sé mucho sobre Oracle Text, y ni siquiera puedo encontrar una descripción simple de cómo CONTAINS
obras. Pero parece estar basado en palabras completas en lugar de cadenas. Tiene que haber algún tipo de límite de palabra entre Q2 y otros caracteres para que pueda ser recogido por un simple CONTAINS
filtro.