在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?