在Rails 3.x中使用Solr(websolr)进行地理空间搜索

Cha*_*nce 1 solr ruby-on-rails sunspot ruby-on-rails-3 websolr

我希望在Rails 3.1应用程序中使用Solr进行文本和地理空间搜索.我看到websolr支持地理空间索引和搜索,但它的两个宝石(太阳黑子rsolr)似乎(目前)没有实现它.太阳黑子似乎正在添加功能,但声称"[地理空间]是实验性的和未发布的.DSL可能会发生变化."

是否还有使用太阳黑子+ websolr进行地理空间搜索的其他实现?我已经做了一些googing并且碰到了一些,但是他们看起来很骇人听闻,如果已经有一个核心功能或者更受支持的方法,我宁愿不使用我发现的东西.

Rob*_*bin 7

太阳黑子确实支持地理空间搜索,但有一些限制.

索引:

searchable do
  text :location
  location :coordinates do
    Sunspot::Util::Coordinates.new latitude, longitude
  end
end
Run Code Online (Sandbox Code Playgroud)

搜索:

coord = # whatever...
with(:coordinates).near(coord[0], coord[1], :precision => 3)
Run Code Online (Sandbox Code Playgroud)

但它真的不准确......如果我没弄错的话,它会使用地理哈希.因此,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
Run Code Online (Sandbox Code Playgroud)

搜索:

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

  • 我正在使用Gmaps4rails,因为我也用它来显示我的地图,但我过去也使用过Geocoder. (2认同)