Elasticsearch:根据到A点的距离订购商品,但显示从B点计算的距离

时间:2015-10-14 15:39:34

标签: java elasticsearch

情况: 一张充满Geopoints的Elasticsearch地图。

我希望这些点按距离到位置A的距离排序,但需要距离我的位置B. 就像“告诉我接近纽约的人和他们与我的距离”

到目前为止我得到了什么:

// filterquery is a simple matchall() filter
FilteredQueryBuilder filteredQuery = QueryBuilders.filteredQuery(
        filterquery,
        FilterBuilders.geoDistanceRangeFilter("location")
        );


SearchResponse search = client.prepareSearch("myindex")
        .setTypes("user")
        .setQuery(filteredQuery)
        .addSort(SortBuilders.geoDistanceSort("location")
                .point(newyork_lat, newyork_lon)
                .unit(DistanceUnit.KILOMETERS)
                .order(SortOrder.ASC))
        .execute()
        .actionGet();

这只会告诉我所有靠近纽约的用户,但距离仍然计算到纽约,而不是我。 我想我需要某种聚合,但我没有把它弄好。 我需要在哪里放置myLocation.lat和myLocation.lon?

1 个答案:

答案 0 :(得分:0)

我想说最好的选择是使用script field来计算与推荐点的距离。

下面的内容可以为您提供所需的内容

{
  "script_fields": {
    "distanceFromMe": {
      "script": "doc['location'].distanceInKm(lat, lon)"
    }
  }
}

您可以详细了解脚本herehere ..