Sfortunatamente non puoi farlo usando un indice full-text di MySQL. Non puoi recuperare '*nited states'
immediatamente dall'indice perché i caratteri di sinistra sono la parte più importante dell'indice. Tuttavia, puoi cerca 'United Sta*'
.
// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)
Il full-text di MySQL offre le migliori prestazioni durante la ricerca di intere parole in frasi, anche quelle a volte possono far schifo. In caso contrario, suggerirei di utilizzare un motore full-text esterno come Solr o Sfinge . Penso che Sphinx consenta caratteri jolly di prefisso e suffisso, non sono sicuro degli altri.
Potresti tornare a LIKE
di MySQL clausola, ma ancora, eseguendo query come LIKE '%nited states'
o LIKE '%nited Stat%'
, risentirà anche delle prestazioni, poiché non può utilizzare l'indice sui primi caratteri. 'United Sta%'
e 'Unit%States'
vanno bene in quanto l'indice può essere utilizzato contro il primo gruppo di caratteri conosciuti.
Un altro avvertimento piuttosto importante utilizzando l'indicizzazione full-text di MySQL è l'elenco delle parole non significative e impostazioni della lunghezza minima delle parole . Ad esempio, in un ambiente di hosting condiviso, sarai limitato a parole maggiori o uguali a 4 caratteri. Quindi la ricerca di "Goo" per ottenere "Google" fallirebbe. L'elenco delle parole non significative non consente anche parole comuni come "e", "forse" e "fuori" - infatti, ci sono 548 stop-word tutte insieme! Ancora una volta, se non utilizzi l'hosting condiviso, queste impostazioni sono relativamente facili da modificare, ma se lo fai, ti infastidirai con alcune delle impostazioni predefinite.