情况: 一张充满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?
答案 0 :(得分:0)
我想说最好的选择是使用script field来计算与推荐点的距离。
下面的内容可以为您提供所需的内容
{
"script_fields": {
"distanceFromMe": {
"script": "doc['location'].distanceInKm(lat, lon)"
}
}
}