Rails使用地理编码位置确定弹性搜索

时间:2013-10-28 23:10:08

标签: ruby-on-rails elasticsearch rails-geocoder

我有一个应用程序,它使用Geocoder查找用户附近的供应商。我目前正在另一个模型中使用ElasticSearch,但我想将其扩展到我的供应商模型。唯一的问题是,我不希望用户搜索所有供应商,只搜索距离他们x距离的供应商。这样的事情可能吗?我查看了一些弹性搜索文档,但还没有找到任何内容。这是我的供应商模型和我的设计用户模型:

class Vendor < ActiveRecord::Base


    geocoded_by :address
    after_validation :geocode,
        :if => lambda{ |obj| obj.address_changed? }
end

class User < ActiveRecord::Base

   devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

   validates :zip, presence: true

   geocoded_by :zip

   after_validation :geocode

end

对此有何想法?对任何建议持开放态度,因为我不确定如何实现这一目标。提前谢谢!

2 个答案:

答案 0 :(得分:2)

我想您可以在弹性搜索索引中索引供应商文档。如果没有,那么你需要这样做以及存储位置坐标。

根据您的问题,我了解您要搜索附近用户所有供应商。如果是这种情况,则可以在elasticsearch中使用地理位置查询。

你可以使用一个或任何一个。坐标(纬度和长度)以及搜索查询中的x距离。以下是一些可能对您有用的有用链接:

http://www.elasticsearch.org/blog/geo-location-and-search/ http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-filter.html

答案 1 :(得分:0)

好吧,elasticsearch API实际上返回了ActiveModel记录,因此您可以将其合并成--

Model.search(params[:value]).near(params[:lat], params[:long], params[:dist])

这将返回匹配记录的数组