Mysql
 sql >> Database >  >> RDS >> Mysql

Ricerca con caratteri jolly nella ricerca full-text di MySQL

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.