我成功地让ElasticSearch返回按我给定坐标的距离排序的结果。问题是正在排序的距离是坐标的可用位置的平均距离,我需要在那里找到CLOSEST位置。
ElasticSearch说我可以选择“sort_mode”(Note: the geo distance sorting supports sort_mode options: min, max and 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坐标,但我得到的结果相同。如果有人知道我做错了什么,请告诉我,我会非常感谢任何反馈。
答案 0 :(得分:0)
我不知道ruby,但这似乎是一个弹性搜索问题而不是ruby问题。
如果您的字段实际上已编入索引geo_point
,则应该能够按最小距离排序。
排序模式的键在较新版本的ES中已更改,因此根据您的ES版本,您可能需要将sort_mode
更改为mode
。
如果将sort_mode
更改为mode
不起作用,您是否可以尝试发布elasticsearch报告的类型映射,以及您正在使用的ES版本?
此处详细记录了获取类型映射:get mapping。