Oracle in Pillole: Indici Testuali semplici

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , , , , , | Posted on 14:35

Che differenza c'è tra un indice testuale ed, ad esempio, i più comuni B-tree indexes?

Semplice: gli indici full text permettono di fare ricerche veloci su ogni parola di un testo.
Gli indici B-tree su stringa, invece, permettono di velocizzare solo le ricerche sui primi caratteri di un campo.

La ricerca testuale è quella che viene effettuata, ad esempio, con i Motori di Ricerca. Quindi la sua utilità è ovvia.

Google utilizza delle tecniche avanzate che gli permettono di ottenere i risultati che tutti sperimentiamo ogni giorno. Ne parleremo presto, affrontando i noSQL Database e le BigTable.

Arriviamo al punto: Oracle permette di creare indici testuali sia per normali tabelle relazionali che per file di vario tipo. Ovviamente il loro utilizzo può essere piuttosto complicato ed impegnativo. In più sono previsti 4 tipi differenti (CONTEXT, CTXCAT, CTXRULE e CTXXPATH).

Uno di questi è semplice da usare e non richiede praticamente manutenzione: CTXCAT.


Supponiamo di avere una tabella che contenga un campo NOTE.
La costruzione dell'indice si effettua con  la seguente istruzione:

 CREATE INDEX indexname ON Miatabella (NOTE) INDEXTYPE IS CTXSYS.CTXCAT;

 Un esempio di query, invece, è il seguente:
 Select cliente from MiaTabella where CATSEARCH (NOTE, 'Reclamo', null) >0;
Dove MiaTabella è il nome della tabella e NOTE è il nome del campo da indicizzare.

Un utilizzo interessante, utile e raramente descritto di questa tecnica, è la creazione di un indice su più di un campo di una o più tabelle.
Per fare un esempio pratico, possiamo ottenere il riferimento di una persona, in base a tutto il suo curriculum a tutte le sue esperienze di studio e di lavoro.

La realizzazione di ciò si ottiene construendo l'indice sulla base del risultato di una funzione PL/SQL che, per ogni persona dell'archivio, fornisca tutte le parole chiave da indicizzare.

Per chi vuole approfondire:

  http://docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#i1007263

Comments Posted (0)

Posta un commento