Indice CONTEXT
CONTEXT index (Oracle Text)
L’indice CONTEXT è il tipo di indice principale di Oracle Text, progettato per la ricerca full-text su colonne che contengono testo non strutturato: documenti, articoli, pareri legali, note tecniche. A differenza di un B-tree classico, non indicizza valori discreti ma token linguistici, costruendo una struttura invertita che mappa ogni parola ai documenti in cui compare.
Come funziona #
Durante la creazione, Oracle Text tokenizza il contenuto della colonna (tipicamente CLOB), applica filtri linguistici (stemming, stopword, thesaurus opzionale) e popola una serie di tabelle interne — $I, $K, $R, $N — che formano l’indice invertito. Le query usano l’operatore CONTAINS al posto del LIKE:
SELECT doc_id, SCORE(1) AS rilevanza
FROM documenti
WHERE CONTAINS(testo, 'contratto AND (locazione OR affitto)', 1) > 0
ORDER BY rilevanza DESC;
L’indice evita la scansione sequenziale dell’intera colonna CLOB a ogni query, riducendo drasticamente i tempi su dataset di grandi dimensioni.
Quando si usa #
L’indice CONTEXT è adatto quando:
- la colonna contiene testo lungo e variabile (documenti, PDF convertiti, XML);
- le query richiedono operatori booleani, prossimità o ricerca per concetto;
- il volume di dati rende impraticabile qualsiasi approccio basato su
LIKE '%...%'.
Un limite operativo rilevante: l’indice CONTEXT non si aggiorna in tempo reale. Le righe inserite o modificate dopo la creazione dell’indice diventano ricercabili solo dopo una sincronizzazione esplicita (CTX_DDL.SYNC_INDEX) o tramite un job schedulato. Per scenari con scritture frequenti va pianificata una strategia di sync coerente con la latenza accettabile.