我正在幫朋友爲他正在開發的一個項目建立一個字典。該項目的一部分是創建一個搜索功能。數據庫在MySQL中,後端在php中。現在MySQL一個真正的LIKE語句
,運行我們的簡單查詢是小菜一碟:
SELECT *,
(
(CASE WHEN word LIKE '%$query%' THEN 1 ELSE 0 END) +
(CASE WHEN defin LIKE '%$query%' THEN 1 ELSE 0 END)
) AS relev
FROM dictionary
WHERE word LIKE '%$q%'
OR defin LIKE '%$q%'
ORDER BY relev DESC;
它產生了良好的效果;例如,輸入「火」給了我們火,消防員,救火車,着火等。但是,我們也想要錯誤的餘地:我們想要「prnk」的錯誤給我們惡作劇,prink和粉紅色,或者「騾子「也建議」鼴鼠「一詞。
非常令人驚訝的是,我們無法找到任何信息。相關係統完全是膚淺的,因爲我們不需要實際的相關性(只是一個總體指針),但我們確實需要一些東西(這就是爲什麼我們要去LIKE語句而不是MATCH ... AGAINST語句,我們在那裏找不到按照相關性排序)。
數據庫只包含三件事:id,word,defin。簡單,因爲這是所需的複雜性(或簡單)。
感謝任何人提前。
看看SOUNDEX函數 - http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex不是我用過的東西,但它可能是你的通過 – 2011-03-31 23:13:27
這通常與拼寫檢查完成後,PHP使用手冊 – 2011-03-31 23:15:36
中記錄的pspell \ enchant bot也是真的應該使用全文搜索http://dev.mysql.com/doc/refman/5.0/en/fulltext- search.html – 2011-03-31 23:16:35