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

标签 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 中进行像这样的简单搜索,并且更智能,这样打字错误仍然可以匹配?

最佳答案

SOUNDS LIKE 使用的古老且稍微值得尊敬的 SOUNDEX 算法不处理后缀声音。也就是说,nana 不会也不可能匹配 banana。但是,banani 将匹配 banana

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

将 SOUNDEX 称为“智能文本搜索”有点夸张。 http://en.wikipedia.org/wiki/Soundex

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

小心全文。当您要搜索的表中的行数少于几百行时,它的工作方式与直觉相反。

但这不是一个适合拼写错误的单词匹配器。你问的问题并不容易。

您可以考虑 Levenshtein 算法(您可以查找)。但要正常工作却很困难。

关于mysql - 如何在列中执行MySQL智能文本搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19308317/

相关文章:

mysql - MYSQL中如何只获取一次时间

php - 向表中插入数据

php - 如何将表单的值字段而不是名称字段传递给Mysql

sql - Oracle 中的 EXCEPT 关键字

sql - 查找主管的主管是特定人员的员工

php - 搜索mysql数据库

sql - 如果恰好匹配内部连接,如何获得结果

java - soundex算法的数据结构?

mysql - SQL Server soundex 和 MySQL soundex 区别