我正在帮朋友为他正在开发的一个项目建立一个字典。该项目的一部分是创建一个搜索功能。数据库在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