Zwei mögliche Gründe – der Index ist möglicherweise nicht synchronisiert und CONTAINS
scheint Wörtern zu entsprechen, während LIKE
stimmt mit Strings überein.
Ein Beispiel für zwei Strings, wobei LIKE
stimmt mit beiden überein, aber CONTAINS
passt zu keinem von beiden:
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
Standardmäßig CONTEXT
Indizes müssen manuell synchronisiert
werden . Sie müssen entweder Folgendes ausführen:exec ctx_ddl.sync_index('cidx_mustfixby');
, oder Sie müssen Ihren Index mit on commit
erstellen .
exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;
MUST_FIX_BY
-----------
Q2 234567
Dies behebt eines der Probleme. Aber Q234567
ist immer noch nicht abgestimmt. Ich weiß nicht viel über Oracle Text, und ich kann nicht einmal eine einfache Beschreibung dafür finden, wie CONTAINS
funktioniert. Aber es scheint auf ganzen Wörtern statt auf Strings zu basieren. Es muss eine Art Wortgrenze zwischen Q2 und anderen Zeichen geben, damit es von einem einfachen CONTAINS
aufgenommen werden kann filtern.