我的客户有一个包含 400 年历史的房地产记录数据库。他们有兴趣根据他们的数据向用户提供替代拼写建议。
我假设在这样的情况下,它会变成一个包含“Martin”行以及“Martyn”和“Martine”等建议的表。
有谁知道可以索引其数据的第三方解决方案?
EDIT
根据 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
谷歌的“你是说吗”很有趣:谷歌“你是说吗?”是如何表达的?算法工作? https://stackoverflow.com/questions/307291/how-does-the-google-did-you-mean-algorithm-work
过去,我曾设法实现类似的东西SOUNDEX http://www.madirish.net/?article=85它可以近似该功能。
Martin、Martyn 和 Martine 产生相同的输出SOUNDEX
.
您可以包括以下所有结果SOUNDEX
匹配,或选择他们要求的结果,然后select distinct name from table where SOUNDEX(name) = SOUNDEX(search_var)
作为您的“建议”。
作为一种优化,您可以在搜索字段上预先计算 SOUNDEX 并将其保留为索引列以避免表扫描。
它不像 Google 的“Did You Mean”那么复杂,但您可以很快地相当接近。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)