Le ricerche MySql Full-Text servono per cercare delle parole chiave fra le colonne di una tabella. Si usa Full-Text perchè è molto più veloce di LIKE ma non entreremo nel merito.
Perchè non trovo parole corte con Full-Text?
Per questioni di ottimizzazione delle prestazioni vengono cercate solo parole di almeno 4 lettere.
Posso risolvere il problema?
La soluzione per cercare parole più corte di 4 caratteri è modificare le configurazioni di MySql ma per fare ciò devi avere i permessi per modificarle. Per farla breve generalmente solo chi dispone di un server dedicato o virtuale può fare questa operazione.
Si, ho un server dedicato o virtuale, come procedo per la soluzione?
E’ molto semplice ma ti consiglio di leggere bene tutto prima di iniziare.
Prima di tutto trova il tuo file di configurazioni con il comando (se sei su linux)
locate my.cnf
Di solito è in /etc/my.cnf o più probabilmente in /etc/mysql/my.cnf
Trovato il file è come sempre meglio farne una copia di backup
cd /etc/mysql
Ora puoi modificare il file di configurazioni con il tuo editor preferito, per esempio vi
cp my.cnf my.cnf_BackUp
vi my.cnf
Cerca sotto la voce [mysqld] se è già presente la variabile ft_min_word_len.
Se esiste modifica il suo valore altrimenti aggiungila appena sotto [mysqld]
[mysqld]
ft_min_word_len = 3
per esempio imposta Full-Text per cercare parole anche di 3 lettere. Ricorda che più diminuisci questo valore e più basse saranno le prestazioni.
Ora devi riavviare il server MySql
/etc/init.d/mysql restart
Infine devi ricostruire gli indici Full-Text, per esempio con un comando REPAIR
REPAIR TABLE tbl_name QUICK;
(Questa ultima operazione puoi farla anche da phpmyadmin).
Ora sarà possibile fare query anche con parole di 3 caratteri.
Nota importante:
Come specifica MySql il comando myisamchk utilizza le configurazioni di default e potrebbe provocare problemi ed anche query fallite dopo questa modifica.
Per risolvere questo problema ci sono due opzioni:
- Utilizzare sempre l’opzione ft_min_word_len via shell, per esempio:
shell> myisamchk --recover --ft_min_word_len=3 tbl_name.MYI
- Modificare il file di configurazione aggiungendo il parametro ft_min_word_len anche sotto la dicitura [myisamchk] con lo stesso lavore che in [mysqld]
Ovviamente la seconda opzione è fortemente consigliata. Lo stesso problema si propone con il motore isam nel caso in cui utilizzassi una vecchia versione di MySql.
Breve sitografia:
- Full-Text fine tuning
- Cambiare la lunghezza minima delle parole cercate a 3
- MyIsamCHK e IsamCHK
- Riavviare MySql
Spero che questa guida vi sia servita e vi sia stata chiara, non esitate a contattarci per problemi.
A presto!