我希望在 Rails 3.1 应用程序中使用 Solr 进行文本和地理空间搜索。我看到websolr支持地理空间索引和搜索,但是它的两个 gem(sunspot和rsolr)似乎(当前)没有实现它。Sunspot 似乎正在添加该功能,但声称“[地理空间] 是实验性的且未发布。DSL 可能会改变。”
是否有其他使用 sunspot + websolr 进行地理空间搜索的实现?我做了一些谷歌搜索并遇到了一些,但它们看起来很老套,如果已经有一个核心功能或更受支持的方法,我宁愿不使用我发现的东西。
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(",")
后人:Sunspot 已经发布了 1.3.0 版本,支持 Solr 3 空间搜索,使其成为 Heroku 和 Websolr 上完美可行的选择。