1

Rails 有哪些邻近搜索选项?(也许各有优缺点?)

  • 邮政编码数据库是要走的路吗?
  • 或将地理编码与geocoder之类的gem一起使用?
  • 是否有任何最佳实践或需要注意的问题?

(使用示例,一个黄页类型的应用程序,企业可以在其中列出,用户可以输入他们的邮政编码并找到离他们很近或在指定英里半径内的企业。)

更新:该应用程序与上面的示例应用程序非常相似 - 企业可以在应用程序中列出一个必不可少的目录(每种类型的企业都有类别),用户可以转到一个类别并按距离对结果进行排序(输入他们的邮政编码后 - 因此最接近他们的企业会首先显示)。不会按名称或其他标准进行搜索 - 只需转到“Boxer Dog Breeders”页面并按距离排序即可。

4

3 回答 3

8

那么答案取决于你想做什么。如果您想要简单的邻近搜索(在半径范围内),那么Geocoder gem 就更好了!现在,如果您想要更高级的搜索功能(多边形、多多边形搜索等),我建议您使用PostrgeSQL数据库和出色的PostGIS扩展。要与 Rails 一起使用,您绝对应该查看ActiveRecord 的 PostGIS 适配器,它来自一个非常好的 gem 的作者,称为RGeo,它使用超快库GEOSProj进行地理空间计算。

否则,如果您发现需要具有 GIS 功能的专用搜索服务器,那么您绝对应该使用ElasticSearch,而 Ruby 有一个很棒的 gem 可以帮助您使用名为Tire的 ES 。

希望我有所帮助!

于 2012-07-19T14:57:37.537 回答
1

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

这是地理搜索的示例:http: //freelancing-god.github.com/ts/en/geosearching.html

RoR 模型解决方案(如Geocoder)对于全文搜索不是很有效。

于 2012-07-19T14:56:29.893 回答
0

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

Geocoder 是一个完整的 Ruby 地理编码解决方案。借助 Rails,它添加​​了地理编码(按街道或 IP 地址)、反向地理编码(根据给定坐标查找街道地址)和距离查询。就像在对象上调用地理编码一样简单,然后使用 Venue.near("Billings, MT") 之类的范围。

查看自述文件以获取有关如何使用它的完整示例。

于 2012-07-19T14:46:02.753 回答