如何在列中执行MySQL智能文本搜索?

时间:2013-10-11 00:19:29

标签: mysql sql soundex

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

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

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

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

1 个答案:

答案 0 :(得分:0)

SOUNDS LIKE使用的古老而略显光彩的SOUNDEX算法不处理后缀声音。也就是说,nana不匹配banana,也不能匹配banani。但是,banana将匹配{{1}}。

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

调用SOUNDEX的“智能文本搜索”是一种夸张。 http://en.wikipedia.org/wiki/Soundex

您可以考虑使用MySQL FULLTEXT搜索,您可以查找。这会进行一定数量的短语匹配。也就是说,如果你的栏目中有“香蕉店”和“香蕉slu”,那么“香蕉”这个词就可以与这两个值相匹配。

小心FULLTEXT。当您搜索的表格中的行数少于几百行时,它会违反直觉。

但这不是一个错字友好的词匹配器。你问的问题并不容易。

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