我正在构建一个需要弹性搜索的应用程序,以根据纬度和经度查找最近的位置 . 目前我能够基于GeoPoint和最大距离(公里)来做到这一点 .
@Override
public List<CityDefinition> findCitiesNearby(GeoPoint geo, double distance, String source) {
LOGGER.info("<findCitiesNearby>");
FilterBuilder filterBuilderGeo = FilterBuilders.geoDistanceFilter("geo").point(geo.getLat(), geo.getLon()).distance(distance, DistanceUnit.KILOMETERS);
SearchQuery q = new NativeSearchQueryBuilder()
.withFilter(filterBuilderGeo);
List<CityDefinition> fields = esOps.queryForList(q, CityDefinition.class);
return fields;
}
这几乎是完美的,但不是在给定的距离内搜索,我想要弹性返回最近的位置,无论距离 . 这可能吗?如果是,我该怎么做?
2 回答
你可以按距离排序,而不是过滤 .
沿着这些方向的东西应该有效:
显然,可以删除距离部分 .