按位置搜索(企业)数据库

Posted

技术标签:

【中文标题】按位置搜索(企业)数据库【英文标题】:Search DB (of businesses) by location 【发布时间】:2010-11-03 18:09:59 【问题描述】:

我正在设计一个 mysql 数据库和一个相应的 RoR 应用程序,它将容纳各种业务,每个业务都有一个地址。

此应用程序的一项要求是按城市/国家/地区搜索数据库(这将包含欧洲/英国的企业)。搜索结果将由该国家/地区最近的城市返回。

这是一个粗略的 ERD:

组织数据库的最佳方式是什么?我应该将城市字段移到自己的表中吗?我应该为每个商家存储 GPS 坐标吗?

谢谢!

【问题讨论】:

你所拥有的似乎很正常。如果您想根据距离定位商家,则需要坐标。 是仅限于用户自己国家的搜索,例如我住在伦敦,搜索一家奶酪公司,您的系统建议一家距离公司只有 30 英里,但它在法国的海峡对面!真的对我没有多大好处,因为我讨厌旅行 - 或者那会是你系统中的有效命中? @f00 感谢您的洞察力,我们计划将其限制在国家/地区。因此,如果您在英国进行搜索,它只会返回附近的结果。 好,那你可能想看看我的解决方案***.com/questions/3983325/… 【参考方案1】:

我会将城市存储在一个单独的表格中,其中包含市政厅(或市中心)的纬度/经度。然后对于每家商店,我都会存储纬度/经度。

这将允许您计算从商店到市中心的距离,并按距离排名,这样您就可以显示前 N 个。

如果您稍后存储用户的位置,那么很容易修改您的查询以显示与用户位置的距离。

【讨论】:

【参考方案2】:

您不需要从Businesses 表链接到countryID,因为PostalCodes 表已经具有Countries 表的FK。

【讨论】:

【参考方案3】:

我认为拥有国家和邮政编码是矫枉过正,不会打扰。在您的国家/地区表中,包含地址、城市、州、邮政编码、国家/地区、纬度和 lng。

如果您的地址在 before_save 之前更新,则使用 GeoKit 将您的地址地理编码为 Lat/Lng。

然后你可以很厉害,说出类似(查找此地址 10 英里范围内的所有商家)之类的话

Business.within.find(:all, :origin=>'100 Spear st, San Francisco, CA', :within=>10)

资源:

Geokit Gem Geokit Rails Plugin

【讨论】:

以上是关于按位置搜索(企业)数据库的主要内容,如果未能解决你的问题,请参考以下文章

02 Apache Solr: 概览 Solr在信息系统架构中的位置

如何先按搜索词排序查询结果,然后按字母顺序?

SEM搜索引擎营销实践:数据分析企业场景演练

Aws S3按标签过滤。按标签搜索

Linux文件搜索命令

按位置和标签搜索 Instagram Api