2015-10-14 74 views
1

情况: 一个Elasticsearch地图全Geopoints的。Elasticsearch:基于距离的订单项目到A点,但显示的距离B点计算

我想通过自己的距离来分类的某个位置点,但需要他们距离我的位置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

我会说最好的办法是使用script field计算从您的推荐点的距离。

类似下面应该给你你在找什么

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

您可以了解更多有关脚本herehere ..

+0

我怎么能做到这一点在Java ..? – cari