sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo crear un índice de texto para la búsqueda '% abc%'?

Yo usaría esto (establecer la longitud mínima y máxima en los valores apropiados)

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')

Los parámetros se explican aquí Oracle Text Reference

y vea esta pregunta sobre cómo administrar la actualización y cómo el índice puede no ser más rápido que un escaneo completo con datos de alta cardinalidad:

Ajuste de rendimiento de PL/SQL para LIKE '% ...%' Consultas comodín