sql >> データベース >  >> RDS >> Oracle

OracleContainsが機能していません

    考えられる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と他の文字の間に何らかの単語境界が必要です。 フィルタ。



    1. ユーザーの更新コマンドが拒否されました

    2. 新しいデータベースエントリを挿入する方が、エントリが最初に存在するかどうかを確認するよりも高速ですか?

    3. MySQL:このIPにレコードがない場合は挿入します

    4. MySQL LEFT JOIN with GROUPBYおよびWHEREIN(サブクエリ)