2010-10-20 7 views
7

Esiste un modo per avere risultati dell'ordine MySQL da quanto vicino" suonano "a un termine di ricerca?Ordina per Soundex (o simile) `Closeness`

Sto tentando di ordinare i campi che contengono l'input dell'utente dei nomi di città. Esistono variazioni e errori di ortografia e mi piacerebbe mostrare le partite "più vicine" in alto.

So che soundex potrebbe non essere il miglior algoritmo per questo, ma se (o un altro metodo) potrebbe avere un ragionevole successo - potrebbe valere la pena avere l'ordinamento fatto dal database.

risposta

4

Soundex non va bene per questo genere di cose, perché parole diverse possono fornire gli stessi risultati Soundex e pertanto verranno ordinate in modo arbitrario. Una soluzione migliore per questo è l'algoritmo Levenshein Edit Distance e potresti essere in grado di implementarlo come una funzione nel tuo database: Link a Levensheint impl. as MySql stored function !!!

È anche possibile controllare questo SO link. Contiene un'implementazione dell'algoritmo Sql server (specifico per T-SQL) ma dovrebbe essere possibile portarlo. I meccanismi dell'algoritmo sono abbastanza semplici che richiedono solo un array 2D e il looping su una stringa.

+0

Stavo guardando Levenshtein se dovevo fare l'ordinamento nel codice. Sembra che stia ponderando l'implementazione dell'algoritmo * correct * nel database, o utilizzando lo stesso algoritmo che è già disponibile sul lato del codice delle cose. –

+0

Se lo si implementa come funzione MySql (collegamento in risposta), si dovrebbe essere in grado di farlo nel proprio SQL. Qualcosa come: SELECT CityName, Leven (CityName, compString) FROM City ORDER BY Leven (CityName, compString) –

+0

@Rinzler: Sì, questo post ha quasi due anni. I collegamenti scompaiono. In ogni caso, ho trovato un altro esempio di implementazione MySql e ricollegato. –