вычислить географическое расстояние вasticsearch - PullRequest
7 голосов
/ 15 февраля 2012

Я использую geo_distance фильтр с шиной в моем запросе, и он отлично работает:

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

Я ожидал, что результат будет как-то включатьвычисленное расстояние до географического местоположения, которое я использовал для моего фильтра.

- это способ указать эластичному поиску, чтобы включить его в ответ, чтобы мне не приходилось вычислять его в рубинах для каждого результата.?

== ОБНОВЛЕНИЕ ==

Я нашел ответ в группе Google:

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

сортировка по _geo_distance дастрасстояние в сырых результатах.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Сортировка по _geo_distance вернет расстояние в результатах: http://www.elasticsearch.org/guide/reference/api/search/sort.html

1 голос
/ 30 сентября 2013

Для тех, кому может быть интересно, расстояние возвращается в свойстве sort результатов упругого поиска.Чтобы получить к нему доступ и отобразить его в представлении, используйте метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...