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

Come creare un indice di testo per la ricerca '%abc%'?

Lo userei (impostando la lunghezza minima e massima per valori appropriati)

BEGIN
    ctx_ddl.create_preference  ('FT_WL', 'BASIC_WORDLIST');
    ctx_ddl.set_attribute      ('FT_WL', 'substring_index',   'YES');
    ctx_ddl.set_attribute      ('FT_WL', 'prefix_index',      'YES');
    ctx_ddl.set_attribute      ('FT_WL', 'prefix_min_length', 1);
    ctx_ddl.set_attribute      ('FT_WL', 'prefix_max_length', 6);
  END;

CREATE INDEX fulltext_idx ON tmp_fulltext (fulltext)
 INDEXTYPE IS CTXSYS.CTXCAT
 PARAMETERS ('WORDLIST FT_WL')

I parametri sono spiegati qui Oracle Text Reference

e guarda questa domanda su come gestire l'aggiornamento e come l'indice potrebbe non essere più veloce di una scansione completa con dati a cardinalità elevata:

Ottimizzazione delle prestazioni PL/SQL per LIKE '% ...%' Query con caratteri jolly