Abilitare la ricerca FULLTEXT in MySQL è un'operazione relativamente semplice che ci consente di avere un potente strumento che permette agli utenti di trovare sui nostri siti le risorse che stanno cercando.
Per effettuare questa operazione occorre creare un indice di ricerca sulla tabella scelta specificando le colonne interessate.
CREATE FULLTEXT INDEX idx_search
ON posts (title, excerpt);
idx_search
è il nome dell'indice da noi creato. In questo caso viene creato sulla tabella posts
per le colonne title
ed excerpt
. È bene ricordare, per completezza di informazione, che tale ricerca si applica sulle colonne il cui tipo di dati rientra nella categoria testuale di MySQL.
Una tipica query di ricerca apparirà così:
SELECT * FROM posts WHERE MATCH(title) AGAINST('test case');
In questo esempio, la query ricerca la stringa test case
nella colonna specificata dalla clausola MATCH
. Se vogliamo effettuare la ricerca in modalità booleana, ad esempio includendo test
ma escludendo case
, possiamo scrivere:
SELECT * FROM posts WHERE MATCH(title) AGAINST('+test -case' IN BOOLEAN MODE);
Alcune raccomandazioni:
- Usa
FULLTEXT
per dati testuali di grandi dimensioni. È particolarmente utile per colonne con contenuti testuali sostanziali, offrendo miglioramenti significativi delle prestazioni rispetto alle query conLIKE
. - Combina con
MATCH ... AGAINST
. Usa sempreMATCH ... AGAINST
per eseguire ricerche full-text e sfruttare correttamente l’indice. - Considera il motore di archiviazione della tabella. Assicurati che la tua tabella utilizzi un motore che supporti
FULLTEXT
, come InnoDB o MyISAM. - Ottimizza le query di ricerca. Usa la modalità booleana per logiche di ricerca più complesse, come includere o escludere parole specifiche.
- Analizza la necessità. Implementa indici
FULLTEXT
solo dove necessario, poiché possono aumentare i requisiti di archiviazione. - Ricostruisci gli indici quando serve. Ricostruisci regolarmente gli indici dopo modifiche significative ai dati per mantenere prestazioni ottimali.
- Comprendi le limitazioni. Tieni presente la lunghezza minima delle parole indicizzabili e le stopword predefinite che potrebbero essere ignorate.
- Considerazioni sulle prestazioni. L’aggiornamento frequente delle colonne indicizzate può influire sulle prestazioni — considera aggiornamenti in batch se possibile.
- Esplora le modalità di ricerca.
NATURAL LANGUAGE MODE
fornisce risultati basati sulla rilevanza senza operatori booleani, a differenza diBOOLEAN MODE
.