mysql - 建议对古式拼写进行其他查询(例如 Google 的 Did You Mean)

标签 mysql sql

我的客户拥有一个涵盖 400 年历史的房地产记录数据库。他们有兴趣根据他们的数据向用户提供替代拼写建议。

我假设在这种情况下,它会变成一个包含“Martin”行以及“Martyn”和“Martine”等建议的表。

有人知道可以索引其数据的第三方解决方案吗?

编辑

每个 magicmike 的答案 SOUNDEX() 震撼了这个!

SELECT `Last` FROM `Names` 
WHERE SOUNDEX(`Last`) RLIKE SOUNDEX ('Martin')
GROUP BY `Last`

产生这个漂亮的小列表:

Martens
Martenstein
Martin
Martina
Martindale
Martine
Martineau
Martines
Martinet
Martinez
Martini
Martino
Martinstein
Mertens
Miradona
Moret and Marchand
Mortimer
Morton

最佳答案

Google 的“你是说吗”非常有趣:How does the Google "Did you mean?" Algorithm work?

过去,我成功地实现了类似的东西 SOUNDEX它可以近似该功能。

Martin、Martyn 和 Martine 从 SOUNDEX 产生相同的输出。

您可以包含 SOUNDEX 匹配的所有结果,或者选择他们要求的结果,然后从表中选择不同的名称,其中 SOUNDEX(name) = SOUNDEX(search_var) 作为您的“建议”。

作为一项优化,您可以在搜索字段上预先计算 SOUNDEX 并将其保留为索引列以避免表扫描。

它不像 Google 的“Did You Mean”那么复杂,但您可以很快地相当接近。

关于mysql - 建议对古式拼写进行其他查询(例如 Google 的 Did You Mean),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099816/

相关文章:

mysql - 从 Mysql 5.5 升级后 Percona 5.7 慢 "Sending data"

mysql - 如何使用 MySQL Workbench 创建函数?

php - 无限期运行 PHP 脚本,MySQL 超时

php - 在 PHP 中检索值

jquery - 按一列无索引或两列其中一列有索引进行搜索

SQL:将计数与 Clob 结合使用

MySQL显示第n个日期

java - Dropwizard Hibernate 无法找到持久化错误

sql - 如何sql选择具有两种状态的产品?

php - MYSQL 更新使用跨多个表的 sum() 结果