5

在我的 Web 应用程序中将有几个用户。他们将自己的内容上传到我的 webapp。对于他们上传的每个内容,它都有一个标题、描述和标签(关键字)。我可以编写一个搜索脚本来搜索内容或用户名。但是当他们给出拼写错误时,他们的关键字不会返回任何结果。例如,如果数据库中有一个名为“Michael”的用户,并且搜索查询是“Micheal”,那么我应该得到“您的意思是搜索“Michael”吗?”这只不过是一个搜索建议。

此建议也应针对用户上传的内容。用户可以将其内容的标题保留为“Michael 2011 年 5 月的活动”,并且应该为单个词生成建议。

4

3 回答 3

9

您可以使用 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 算法生成,并与其余用户参数一起插入到表中。

于 2011-08-27T11:28:46.843 回答
2

如果没有搜索结果,也可以使用 php 库pspell获取建议。

于 2011-08-27T11:31:35.447 回答
0

也许创建一个最常用词的数据库(例如:狗、房子、城市、数字、水、互联网)。不需要让它变大(<10000 字)。然后,当您展开搜索词时,请检查“词”数据库中是否有像搜索词一样的词。然后只是回应建议。

于 2011-08-27T11:23:06.693 回答