es版基于地理位置搜索

1.构建schema
.startObject("location").field("type", "geo_point").endObject()

2.构建索引
.field("location", geoMap.get("lat") + "," + geoMap.get("lon"))

3.搜索api
TransportClient client = ESClientFactory.instance().transportClient();
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("geo")
                                                  .setTypes("geo")
                                                  .setSearchType(SearchType.QUERY_THEN_FETCH)
                                                  .setExplain(false);
GeoDistanceQueryBuilder location = QueryBuilders.geoDistanceQuery("location")
                                                .point(lat, lon)
                                                .distance(d, DistanceUnit.KILOMETERS);
searchRequestBuilder.setPostFilter(location);
// 获取距离多少公里 这个才是获取点与点之间的距离的
GeoDistanceSortBuilder sort = SortBuilders.geoDistanceSort("location", lat, lon);
sort.unit(DistanceUnit.KILOMETERS);
sort.order(SortOrder.ASC);
sort.point(lat, lon);
searchRequestBuilder.addSort(sort);
SearchResponse response = searchRequestBuilder.get();

猜你喜欢

转载自blog.csdn.net/my201110lc/article/details/82229687