2015-10-14 5 views
1

Ситуация: Карта Elasticsearch, полная сборок.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(); 

Это будет просто показать мне все пользователи близко к Нью-Йорк, но расстояние OFC еще рассчитывается в Нью-Йорке, а не ко мне. Мне кажется, мне нужна какая-то агрегация, но я не понимаю. Где мне нужно поставить myLocation.lat и myLocation.lon?

ответ

0

Я бы сказал, что лучшим вариантом было бы использовать script field, чтобы вычислить расстояние от вашей реферальной точки.

Нечто подобное ниже должно дать вам то, что вы ищете

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

Вы можете узнать больше о сценарии herehere и ..

+0

, как я могу сделать это в Java? .. – cari

Смежные вопросы