API 接口
/**
* 查询用户地理位置
*
* @param userId
* @return
*/
UserLocationVo queryByUserId(Long userId);
/**
* 根据位置搜索
*
* @param longitude 经度
* @param latitude 纬度
* @param distance 距离(米)
* @param page 页数
* @param pageSize 页面大小
*/
PageInfo
=============================================================
API IMPL
/**
* 查询用户的位置信息
*
* @param userId
* @return
*/
@Override
public UserLocationVo queryByUserId(Long userId) {
GetQuery getQuery = new GetQuery();
getQuery.setId(String.valueOf(userId));
UserLocation userLocation = this.elasticsearchTemplate.queryForObject(getQuery, UserLocation.class);
if(ObjectUtil.isNotEmpty(userLocation)){
return UserLocationVo.format(userLocation);
}
return null;
}
/**
* 根据位置搜索
*
* @param longitude 经度
* @param latitude 纬度
* @param distance 距离(米)
* @param page 页数
* @param pageSize 页面大小
*/
@Override
public PageInfo
PageInfo
pageInfo.setPageNum(page);
pageInfo.setPageSize(pageSize);
String fieldName = "location";
//实现了SearchQuery接口,构造分页、排序
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();
//分页
PageRequest pageRequest = PageRequest.of(page - 1, pageSize);
searchQueryBuilder.withPageable(pageRequest);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
//以一个点为中心,指定范围查询
GeoDistanceQueryBuilder geoDistanceQueryBuilder = new GeoDistanceQueryBuilder(fieldName);
//中心点
geoDistanceQueryBuilder.point(new GeoPoint(latitude, longitude));
//距离(画圆的半径)单位:公里
geoDistanceQueryBuilder.distance(distance / 1000, DistanceUnit.KILOMETERS);
boolQueryBuilder.must(geoDistanceQueryBuilder);
searchQueryBuilder.withQuery(boolQueryBuilder);
//排序,由近到远排序
GeoDistanceSortBuilder geoDistanceSortBuilder = new GeoDistanceSortBuilder(fieldName, latitude, longitude);
geoDistanceSortBuilder.order(SortOrder.ASC); //正序排序
geoDistanceSortBuilder.unit(DistanceUnit.KILOMETERS); //设置单位
searchQueryBuilder.withSort(geoDistanceSortBuilder);
AggregatedPage
if(CollUtil.isEmpty(aggregatedPage.getContent())){
return pageInfo;
}
pageInfo.setRecords(UserLocationVo.formatToList(aggregatedPage.getContent()));
return pageInfo;
}
| 留言与评论(共有 0 条评论) “” |