2011-08-27 102 views
5

在我的web應用程序中會有幾個用戶。他們有自己的內容上傳到我的web應用程序。對於他們上傳的每個內容,它都有一個標題,描述和標籤(關鍵字)。我可以編寫一個搜索腳本來搜索內容或用戶名。但是當他們給出拼寫錯誤時它們的關鍵字不會返回任何結果。例如,如果數據庫中有一個名爲「Michael」的用戶,並且搜索查詢是「Micheal」,我應該得到「您是否想要搜索'Michael'」,這是搜索建議。PHP MySQL搜索建議

此外,這個建議應該是爲用戶上傳的內容。用戶可以將他們的內容標題保留爲「Michael的2011年5月活動」,並且應該爲單詞生成建議。

回答

8

你可以使用SOUNDEX尋找發音相似的名字,像:

SELECT * FROM users WHERE SOUNDEX(name) = SOUNDEX(:input) 

或類似的

SELECT * FROM users WHERE name SOUNDS_LIKE :input 

(這是完全等同的)

編輯:如果您需要使用Soundex以外的算法,正如Martin Hohenberg所建議的那樣,您需要在表中添加一個額外的列,例如sound_equivalent。 (這實際上是一個更有效的解決方案,因爲此列可以編入索引)。然後,該請求將是:

SELECT * FROM users WHERE sound_equivalent = :input_sound_equivalent 

的sound_equivalent列的內容然後可以用一個PHP算法生成,並與用戶參數的其餘部分插入在表中。

+2

請務必使用專爲您的語言發音設計的soundex風格的算法。例如,對於德語,Soundex不太有用,應該由科爾納Phonetik(不屬於MYSQL的一部分)替代, – ty812

0

也許建立一個最常見的詞(如:狗,房子,城市,數字,水,互聯網)的數據庫。不需要做大(< 10000字)。 然後,當您爆炸搜索詞時,請檢查「詞」數據庫中是否包含搜索詞。然後只是迴應這些建議。

2

如果您沒有搜索結果,您還可以使用php庫pspell獲取建議。