【问题标题】:Geospatial searches with Solr (websolr) in Rails 3.x在 Rails 3.x 中使用 Solr (websolr) 进行地理空间搜索
【发布时间】:2012-01-21 21:02:37
【问题描述】:

我希望在 Rails 3.1 应用程序中使用 Solr 进行文本和地理空间搜索。我看到websolr 支持地理空间索引和搜索,但它的两个宝石(sunspotrsolr)似乎(当前)没有实现它。 Sunspot 似乎正在添加功能,但声称“[地理空间] 是实验性的且未发布。DSL 可能会改变。”

还有其他使用 sunspot + websolr 进行地理空间搜索的实现吗?我做了一些谷歌搜索并遇到了一些,但它们看起来很老套,如果已经有一个核心功能或更受支持的方法,我宁愿不使用我发现的东西。

【问题讨论】:

  • 如果您正在运行自己的机器,请查看 ElasticSearch 而不是 elasticsearch.org。它比 solr 更容易设置,无模式且面向文档,并且在增长时支持分片。它基于 Lucene(和 solr 一样),您可以在 rails 中使用轮胎宝石。
  • @ADAM 目前这将是一个 Heroku 部署的项目。它看起来也不像轮胎支持地理空间搜索?不过感谢您提供的信息,我们稍后可能会扩展到专用环境!
  • 好吧……我想可能是这样,所以我发表了评论。 ElasticSearch 用于地理空间,同时具有点 + 地理围栏和刻面。我发现它比基于 solr 的解决方案更易于集成。
  • @ADAM 我想我会在 EC2 上使用它。我发现这篇文章对设置它很有帮助:elasticsearch.org/tutorials/2011/08/22/…,客户应该可以免费使用一年,这对他们会有帮助。谢谢大佬!

标签: ruby-on-rails ruby-on-rails-3 solr sunspot websolr


【解决方案1】:

Sunspot 确实支持地理空间搜索,但有一些限制。

索引:

searchable do
  text :location
  location :coordinates do
    Sunspot::Util::Coordinates.new latitude, longitude
  end
end

搜索:

coord = # whatever...
with(:coordinates).near(coord[0], coord[1], :precision => 3)

但它真的不精确......如果我没记错的话,它使用的是地理哈希。因此,有可能 2 个点彼此靠近但未找到。
此外,您不能将near 嵌套在构面中。

我会听从 ADAM 的建议,选择弹性搜索。这就是我所做的。您获得了更多的控制权。

Tire 也支持地理空间搜索,但是 DSL 中没有具体的方法,因为它不是必需的。我想他们计划稍后添加。

索引:

tire.mapping do
    indexes :location, type: 'string', analyzer: 'snowball'
    indexes :latitude_longitude, type: 'geo_point'
end

def latitude_longitude
    [latitude, longitude].join(",")
end

def to_indexed_json
    to_json(methods: ['latitude_longitude'])
end

搜索:

filter :geo_distance, distance: "#{distance}km", latitude_longitude: [user.latitude, user.longitude].join(",")

【讨论】:

  • 顺便说一句,非常感谢。我在 EC2 上设置它时遇到了一些问题(我猜与最新版本和文章不兼容),但之后它变得非常顺利。 :D
  • 我正在使用 Gmaps4rails,因为我也使用它来显示我的地图,但我过去也使用过 Geocoder。
  • 我自己正在使用地理编码器。我将不得不检查 Gmaps4rails,将来可能需要该功能。感谢您的帮助。
【解决方案2】:

为了后代:Sunspot 已经发布了 1.3.0 版,支持 Solr 3 空间搜索,使其成为 Heroku 和 Websolr 上完美可行的选择。

【讨论】:

  • 如果这样做,一定要正确设置索引类型,见here
猜你喜欢
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2013-02-23
  • 2023-03-29
相关资源
最近更新 更多