elasticsearch,distance,tire,Ruby On Rails,Geolocation,elasticsearch,Distance,Tire" /> elasticsearch,distance,tire,Ruby On Rails,Geolocation,elasticsearch,Distance,Tire" />

Ruby on rails 如何使用多个位置的ElasticSearch\u geo\u距离计算最近位置

Ruby on rails 如何使用多个位置的ElasticSearch\u geo\u距离计算最近位置,ruby-on-rails,geolocation,elasticsearch,distance,tire,Ruby On Rails,Geolocation,elasticsearch,Distance,Tire,我成功地让ElasticSearch返回按距离给定坐标排序的结果。问题是,排序所依据的距离是可用位置与坐标之间的平均距离,我需要有最近的位置。 表示我可以提供一个选项“排序模式”(注意:地理距离排序支持排序模式选项:min、max和avg.),但没有给出多个位置的示例 我可以从results.sort值看出返回的是平均距离,而不是最近距离。我最终需要的是到最近位置的距离 如果有人能帮助我正确地工作,我将非常感激!谢谢 我的相关代码: mapping do indexes :locat

我成功地让ElasticSearch返回按距离给定坐标排序的结果。问题是,排序所依据的距离是可用位置与坐标之间的平均距离,我需要有最近的位置。 表示我可以提供一个选项“排序模式”(
注意:地理距离排序支持排序模式选项:min、max和avg.
),但没有给出多个位置的示例

我可以从results.sort值看出返回的是平均距离,而不是最近距离。我最终需要的是到最近位置的距离

如果有人能帮助我正确地工作,我将非常感激!谢谢

我的相关代码:

  mapping do
    indexes :locations do
      indexes :geolocation, type: "geo_point"
    end
  end


  sort do
    by :_geo_distance, 
    :sort_mode => "min", #THIS DOES NOT WORK! FIELDS ARE ORDERED BY AVERAGE DISTANCE, NOT SHORTEST
    "locations.geolocation" => coordinates,
    :order => sort_direction,
    :unit => "km"
    end
  end
**更新**

我发现它实际上不是平均值,只是Elasticsearch找到的第一个距离。
此外,我尝试只将一个字段设置为键入:“geo_point”,并在散列中输入x个坐标,但这样得到的结果相同。如果有人知道我做错了什么,请告诉我,我将非常感谢任何反馈。

我不知道ruby,但这似乎是一个elasticsearch问题,而不是ruby问题

如果您的字段实际索引为
geo_point
,您应该能够按最小距离排序

在较新版本的ES中,排序模式的键已更改,因此根据ES的版本,您可能需要将
sort\u模式
更改为
模式

如果将
sort_mode
更改为
mode
不起作用,您是否可以尝试发布elasticsearch报告的类型映射,以及您正在使用的ES版本

获取类型映射的详细说明如下: