2010-10-20 41 views
7

有沒有什麼辦法讓MySQL訂單的結果靠近它們對搜索詞的「接近」?排序方式Soundex(或類似)`Closeness`

我試圖訂購包含用戶輸入的城市名稱的字段。存在變化和拼寫錯誤,我想在頂部顯示「最接近的」匹配。

我知道soundex可能不是最好的算法,但如果它(或其他方法)可以合理成功 - 可能值得由數據庫完成排序。

回答

4

Soundex對這類事情沒有好處,因爲不同的單詞可以給你相同的Soundex結果,因此可以任意排序。更好的解決方案是Levenshein編輯距離算法,您可以將其作爲數據庫中的函數實現:鏈接到Levensheint impl. as MySql stored function !!!

你也可以看看這個SO link。它包含一個Sql服務器(特定於T-SQL)的算法實現,但它應該可以移植。該算法的機制非常簡單,只需要一個二維數組並在字符串上循環。

+0

我在看Levenshtein,如果我不得不在代碼中進行排序。看起來像是在數據庫中實施* correct *算法,或者使用已經在代碼方面可用的相同算法。 – 2010-10-20 17:51:54

+0

如果您將它作爲MySql函數實現(鏈接在答案中),那麼您應該可以在SQL中執行此操作。像這樣:SELECT CityName,Leven(CityName,compString)FROM City ORDER BY Leven(CityName,compString) – 2010-10-20 18:04:26

+0

@Rinzler:是的,這篇文章已經快兩年了。鏈接消失。無論如何,我發現了另一個MySql實現的例子並重新鏈接。 – 2012-09-12 13:52:36