1

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

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

4

2 回答 2

7

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(",")
于 2012-01-21T21:26:49.037 回答
2

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

于 2012-01-26T19:41:58.300 回答