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