我的客户拥有一个涵盖 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/