1

Rails中有什么接近搜索选项? (也许每个人的利弊?)Rails中的接近搜索

  • 是一个邮政编码数据库的路要走吗?
  • 或使用地理编码和宝石,如地理编码器?
  • 是否有任何最佳实践或陷阱需要注意?

(用法示例,黄页类型的应用程序,其中企业可以列出,用户可以输入自己的邮政编码和发现,接近他们,或指定英里半径范围内的企业。)

更新:该应用程序与上面的示例应用程序非常相似 - 企业可以在应用程序中列出必需的目录(其中每个类型的业务都有类别),用户可以转到类别并按距离排序结果(输入他们的邮政编码后 - 所以最接近他们的企业首先显示)。不会有名字或其他标准的搜索 - 这是一个简单的去'义和团养犬者'页面,并按距离排序。

回答

0

我没有自己的地理编码经验,但Alex Reisner的Geocoder宝石看起来是最好的选择,一英里。

Geocoder是一个完整的Ruby地理编码解决方案。通过Rails,它添加​​了地理编码(通过街道或IP地址),反向地理编码(查找基于给定坐标的街道地址)和距离查询。就像在对象上调用地理编码一样简单,然后使用Venue.near(“Billings,MT”)等作用域。

查看README了解如何使用它的完整示例。

1

如果您计划添加附加搜索条件(例如公司名称,类别)或复杂排序,并且您的数据库将增长超过10000个,我建议您使用外部搜索服务器。例如,sphinx search + thinking sphinx

这里是例子geosearching的:http://freelancing-god.github.com/ts/en/geosearching.html

回报率模型解决方案(如Geocoder)不是很有效与full text searching

+0

嗨,谢谢你的回答 - 我已经更新了有关应用程序的更多信息(它不会有其他排序选项或搜索)的问题 – A4J 2012-07-19 15:07:11

+0

我前段时间写了一个类似的应用程序。我使用了thinkig_sphinx和['reverse_geocoded_by'](http://www.rubygeocoder.com/)来反向地理编码。 – rogal111 2012-07-19 15:13:02

8

那么答案取决于你想要做什么。如果你想要简单的邻近搜索(在一个半径和东西内),那么宝石是不错的!现在,如果你想要更高级的搜索功能(多边形,多边形搜索等),我建议去PostrgeSQL数据库和美妙的PostGIS扩展名。为了与Rails一起使用,您应该查看PostGIS adapter for ActiveRecord,它来自一个名为RGeo的非常好的gem的作者,它使用超快库GEOSProj进行地理空间计算。

否则,如果您发现您需要一个具有GIS功能的专用搜索服务器,那么您应该一定使用ElasticSearch,而Ruby有一个伟大的宝石来帮助您使用ES,称为Tire

希望我帮了忙!

+0

感谢您的回答Gerry - 我更新了关于该应用程序的信息,看起来Geocoder会很好(你会同意吗?),但我担心Google API的限制,每天只有2500个请求 - 是这是一个值得关注的问题?或者缓存选项会否定这一点? – A4J 2012-07-19 17:25:28

+0

好吧,处理缓存地理编码请求的方法有很多。我建议使用Redis,但请记住,尽管您的应用程序变得越来越大,您很可能迟早会达到Google API限制。 – Gerry 2012-07-19 21:38:32