考えられる理由は 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
機能するかについての簡単な説明さえ見つけることができません。ただし、文字列ではなく完全な単語に基づいているようです。CONTAINS
Q2 と他の文字の間には、単純なフィルターで検出される単語境界のようなものが必要です。