0

我正在尝试在其中一个 MySQL 表中搜索商店名称,该表有一个名为 fullname 的字段。截至目前,我正在使用 MySQL 的 SOUNDS LIKE 方法,但是这是一个失败的示例:

假设我有字符串 Banana's Shop。然后使用 SOUNDS LIKE 查询 'nana' 或 'bananas' 不会给我结果。这是我当前的查询:

SELECT `fullName` FROM `shop` WHERE `fullName` SOUNDS LIKE 'nana';

有没有更好的方法在 MySQL 中进行这样的简单搜索,这样更智能,这样拼写错误也仍然匹配?

4

1 回答 1

0

使用的古老且略显尊贵的 SOUNDEX 算法SOUNDS LIKE不处理后缀声音。也就是说,nana不匹配,也不能匹配bananabanani会匹配banana,但是。

除非它们具有相同数量的音节,否则两个话语不一定听起来相似。它非常适合匹配姓氏之类的内容:Smith、Schmitt 和 Schmidt 都具有相同的 SOUNDEX 值。

将 SOUNDEX 称为“智能文本搜索”是夸大其词。http://en.wikipedia.org/wiki/Soundex

你可以考虑 MySQL FULLTEXT 搜索,你可以查一下。这会进行一定数量的短语匹配。也就是说,如果您的列中有“banana shop”和“banana slug”,那么“banana”这个词就会匹配这两个值。

小心使用全文。当您正在搜索的表中的行数少于几百行时,它会违反直觉。

但这不是一个容易错字的单词匹配器。你要问的并不容易。

您可以考虑 Levenshtein 算法(您可以查找)。但要正常工作是一个毛球。

于 2013-10-11T00:32:09.390 回答