在elasticsearch中计算地理距离

我在查询中使用带轮胎的geo_distance过滤器,它工作正常:

search.filter :geo_distance, :distance => "#{request.distance}km", :location => "#{request.lat},#{request.lng}"

我预计结果会以某种方式包含我用于过滤器的地理位置的计算距离。

有没有一种方法可以告诉elasticsearch在响应中包含这些内容,以便我不必为每个结果在ruby中计算它?

==更新==

我在谷歌组中找到了答案:

search.sort do
  by "_geo_distance", "location" => "#{request.lat},#{request.lng}", "unit" => "km" if request.with_location?
end

通过_geo_distance排序将产生原始结果中的距离。


_geo_distance排序将返回结果中的距离:http: _geo_distance


对于那些可能想知道的,距离是在弹性搜索结果的排序属性中返回的。 为了访问它并在视图中显示它,请使用each_with_hit方法。 例如:

class Venue
    attr_accessor :distance
end

def index
    @search = Venue.search(params)
    @search.each_with_hit do |result, hit|
        result.distance = hit['sort'][0] # distance from the ES results
    end
    render json: @search.results
end

“each_with_hit”修改结果对象并呈现正确的json。 至此为止,您必须在搜索时将load设置为true:

:load => true
链接地址: http://www.djcxy.com/p/57551.html

上一篇: compute geo distance in elasticsearch

下一篇: How can I prevent a third party from calling certain methods?