2011-08-27 104 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获取建议。