如何使用具有多个位置的ElasticSearch _geo_distance计算最近的位置

时间:2013-06-07 12:35:47

标签: ruby-on-rails geolocation elasticsearch distance tire

我成功地让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坐标,但我得到的结果相同。如果有人知道我做错了什么,请告诉我,我会非常感谢任何反馈。

1 个答案:

答案 0 :(得分:0)

我不知道ruby,但这似乎是一个弹性搜索问题而不是ruby问题。

如果您的字段实际上已编入索引geo_point,则应该能够按最小距离排序。

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

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

此处详细记录了获取类型映射:get mapping