mysql - 使用MySQL全文(或 sphinx ?)进行模糊街道地址搜索

标签 mysql search sphinx full-text-search

我有一个数据库表,里面满是Google Maps地理编码响应中的地址。 Google缩写所有方向(西-> W,东-> E等)。

因此,如果我输入的地址为“100 Pender Street West”,那么Google Maps返回的格式化地址就是“100 W Pender St”,我将其插入表格中。

现在,如果用户出现并搜索该地址,则以下所有内容均应匹配:

彭德街
西彭德街
100人
100瓦特
100西彭德

他们或多或少地做到了。表中的“w”将被忽略,因为它低于最小字长。在搜索结果中,位于东部Penner上的地址将具有相等的权重(“E”也将被忽略)。

处理此问题的最佳方法是什么?

我怀疑将最小字长设置为1是一件“坏事”。

我可以搜索并替换为Google地址中的已知缩写(N,E,S,W,St,Ave,Dr等),并用其扩展名替换它们-但是有些街道名称不是有效(某些城市有单字母的街道名称:J街道等)

同样,由于街道号(123)和街道名称(160)均低于最小字长,因此根本无法搜索到“123 160 St”之类的地址。

MySQL FullText是正确的方法吗?
Sphinx是否提供更好的东西?

还是我还没有考虑过其他解决方案?请记住,用户的搜索查询不仅会与属性的地址匹配,还会与其他文本列(例如属性名称和描述)匹配。

最佳答案

如果您独自一人,这实际上是一个非常困难的问题。我在地址验证行业的一家名为SmartyStreets的公司工作,我们的产品在其中执行您描述的任务。这是一个复杂的操作序列,将地址搜索与有效甚至可交付的端点进行匹配。准确,正确和完整地执行地址查找的认证称为CASS认证。
Google的结果与经过CASS认证的结果之间的区别在于Google的算法是“最好的猜测”。这就是Google擅长的...不幸的是,这也适用于也不完全有效的地址。 (请参阅:http://answers.smartystreets.com/questions/269/why-did-the-address-fail-validation-it-looks-good-to-me)
使用MySQL进行模糊查找将产生结果,并且您的代码可以提供算法来帮助,但不能保证准确性或有效性,或者在这种情况下,甚至没有任何值(value)。
我认为您不希望用户输入错误的地址来返回他们的查询。它使您的服务显得不及预期,用户将无法获得他们期望的值(value)(对吗?)……我建议您找到CASS软件的供应商。例如,您可以使用Google“地址验证”-我推荐的最佳基于Web的解决方案是SmartyStreets的LiveAddress API

关于mysql - 使用MySQL全文(或 sphinx ?)进行模糊街道地址搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7958267/

相关文章:

MYSQL 更新来自同一个表的值

php - Symfony 1.4 sfDoctrinePager : How to set custom SQL?

php - 如何在 gettext 驱动的多语言站点上实现搜索?

mysql - 基于返回多行的子查询更新值

php - 如何将电子邮件发送到从数据库中获取的包含其他数据的电子邮件数组

arrays - 在对数时间内搜索未排序的数组

java - 在 JFrame 中搜索

python - django sphinx search 总是没有从查询中得到

mysql - 全文搜索 django : Mysql not so bad ?(对比 sphinx、xapian)

ruby-on-rails - rails sphinx reindex 使用 delayed_job rake 任务