2

我有一个使用地理编码器在用户附近查找供应商的应用程序。我目前在另一个模型中使用 ElasticSearch,但我想将其扩展到我的 Vendor 模型。唯一的事情是,我不希望用户搜索所有供应商,只搜索距离他们 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

对此有什么想法吗?对任何建议持开放态度,因为我不确定如何做到这一点。提前致谢!

4

2 回答 2

2

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

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

您可以使用一个或任何一个。坐标(纬度和经度)以及搜索查询中的 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

于 2013-10-29T10:19:15.393 回答
0

好吧,elasticsearch API 实际上返回了一个 ActiveModel 记录,因此您可以通过合并它来使用 geocoder 的 near api - :

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

这将返回一个匹配记录的数组

于 2020-10-06T19:58:33.640 回答