Ruby on rails 如何使用多个位置的ElasticSearch\u geo\u距离计算最近位置
我成功地让ElasticSearch返回按距离给定坐标排序的结果。问题是,排序所依据的距离是可用位置与坐标之间的平均距离,我需要有最近的位置。 表示我可以提供一个选项“排序模式”(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
注意:地理距离排序支持排序模式选项: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版本
获取类型映射的详细说明如下: