sql >> Database teknologi >  >> RDS >> Oracle

Oracle Contains virker ikke

To mulige årsager - indekset er muligvis ikke synkroniseret, og CONTAINS ser ud til at matche ord, mens LIKE matcher strenge.

Et eksempel på to strenge, hvor LIKE matcher begge, men CONTAINS matcher hverken:

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

Som standard er CONTEXT indekser skal manuelt synkroniseres . Du skal enten køre:exec ctx_ddl.sync_index('cidx_mustfixby'); , eller du skal oprette dit indeks med on commit .

exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;

MUST_FIX_BY
-----------
Q2 234567

Dette løser et af problemerne. Men Q234567 er stadig ikke matchet. Jeg ved ikke meget om Oracle Text, og jeg kan ikke engang finde en simpel beskrivelse af, hvordan CONTAINS arbejder. Men det ser ud til at være baseret på hele ord i stedet for strenge. Der skal være en slags ordgrænse mellem Q2 og andre tegn, for at det kan opfanges af en simpel CONTAINS filter.



  1. HTTP-fejl 500.22 - Intern serverfejl (Der er fundet en ASP.NET-indstilling, som ikke gælder i integreret administreret pipeline-tilstand.)

  2. Django MySQL-fejl ved migrering

  3. SELECT DISTINCT er langsommere end forventet på mit bord i PostgreSQL

  4. Sådan indsætter du json-output i mysql med node js