1

我成功地让 ElasticSearch 返回了按与给定坐标的距离排序的结果。问题是正在排序的距离是可用位置与坐标的平均距离,我需要在该位置拥有最近的位置。 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 坐标在散列中,但我得到相同的结果。如果有人知道我做错了什么,请告诉我,我将非常感谢任何反馈。

4

1 回答 1

0

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

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

较新版本的 ES 中排序模式的键已更改,因此根据您的 ES 版本,您可能需要sort_modemode.

如果更改sort_modemode不起作用,您可以尝试发布弹性搜索报告的类型映射以及您正在使用的 ES 版本吗?

获取类型映射在这里有很好的记录:get mapping

于 2013-06-24T14:23:54.543 回答