考えられる理由は 2 つあります。インデックスが同期されていない可能性があり、文字列CONTAINSと一致しているのに単語と一致しているように見えLIKEます。
LIKE両方に一致するが、どちらにも一致しない2 つの文字列の例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
これにより、問題の 1 つが修正されます。しかしQ234567、まだ一致していません。私は Oracle Text についてよく知りません。また、どのようにCONTAINS機能するかについての簡単な説明さえ見つけることができません。ただし、文字列ではなく完全な単語に基づいているようです。CONTAINSQ2 と他の文字の間には、単純なフィルターで検出される単語境界のようなものが必要です。