Tecniche di ricerca testuale nei database SQL: un’analisi tra operatori di confronto e full-text indexing
La ricerca testuale all’interno dei database relazionali rappresenta una componente fondamentale di numerosi sistemi informativi.
In ambienti basati su SQL, la necessità di eseguire query che identifichino record contenenti determinate parole o frasi ha portato all’utilizzo di operatori come
LIKE
, ILIKE
e, nei sistemi più evoluti, del costrutto MATCH ... AGAINST
in combinazione con indici full-text.
Sebbene queste tecniche siano ancora diffuse in molte applicazioni, esse presentano caratteristiche, vantaggi e limiti che è opportuno analizzare con precisione,
soprattutto in un’epoca in cui si tende a privilegiare approcci semantici e vettoriali alla ricerca.
1. Ricerca testuale tramite LIKE
L’operatore LIKE
consente di effettuare confronti tra stringhe mediante l’uso di caratteri jolly (%
, _
).
È uno strumento semplice e ampiamente supportato, utilizzato principalmente per pattern matching:
SELECT * FROM documenti WHERE titolo LIKE '%intelligenza artificiale%';
Caratteristiche principali:
- Confronto case-sensitive o case-insensitive a seconda della collation.
- Funziona bene su dataset di piccole dimensioni.
- Le ricerche con
%keyword
sono inefficienti, poiché non sfruttano gli indici tradizionali. - Nessuna comprensione semantica: la ricerca è puramente letterale.
2. Ricerca full-text con MATCH ... AGAINST
Per superare i limiti del pattern matching, alcuni sistemi come MySQL e MariaDB introducono il supporto alla
full-text search nativamente tramite l’operatore MATCH ... AGAINST
.
SELECT * FROM articoli
WHERE MATCH(titolo, contenuto) AGAINST('intelligenza artificiale' IN NATURAL LANGUAGE MODE);
Principali modalità:
NATURAL LANGUAGE MODE
: considera la rilevanza dei termini e può ignorare le stopword.BOOLEAN MODE
: consente operatori logici avanzati (+
,-
,*
,>
,<
, ecc.).WITH QUERY EXPANSION
: applica relevance feedback per espandere la query.
Vantaggi rispetto a LIKE
:
- Indicizzazione full-text tramite indice invertito.
- Scoring dei risultati in base alla rilevanza.
- Maggiore flessibilità e supporto a operatori logici.
Limiti:
- Supporto limitato in alcune versioni di MySQL/InnoDB.
- Mancanza di comprensione semantica.
- Gestione linguistica poco flessibile in assenza di configurazioni avanzate.
3. Indicizzazione e prestazioni
Affinché MATCH ... AGAINST
sia efficace, è necessario creare un indice full-text:
ALTER TABLE articoli ADD FULLTEXT(titolo, contenuto);
L’indicizzazione consente ricerche molto più veloci rispetto a LIKE
, specialmente su dataset estesi. Tuttavia,
comporta un costo computazionale e di spazio da tenere in considerazione in ambienti con scritture frequenti.
4. Comparazione sintetica
Caratteristica | LIKE |
MATCH ... AGAINST |
---|---|---|
Supporto semantico | ❌ Nessuno | ❌ Nessuno |
Prestazioni su grandi dataset | ❌ Scarse con %keyword% |
✅ Ottimizzate con full-text |
Ordinamento per rilevanza | ❌ No | ✅ Sì |
Espressività della query | ✅ Limitata | ✅ Avanzata |
Indicizzazione | ✅ B-tree | ✅ Full-text |
Configurabilità linguistica | ❌ Assente | ⚠️ Limitata |
Conclusioni
Sebbene LIKE
e MATCH ... AGAINST
rimangano strumenti fondamentali nella storia della ricerca testuale in SQL,
il loro utilizzo è indicato solo in contesti in cui la ricerca è puramente lessicale e controllata. In scenari moderni, dove gli utenti
si aspettano risposte pertinenti a domande formulate in linguaggio naturale, queste soluzioni mostrano limiti evidenti.
Comprendere a fondo il funzionamento di queste tecniche è però essenziale per valutare se e quando integrarle, oppure quando optare per sistemi di ricerca semantica più avanzati, come quelli basati su AI e embedding vettoriali.