4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
Elasticsearch地理坐标类型(Geo-point)在Spring Data E..._CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-24

  下文整理的几个问答 本人在实际应用中亲身经历或解决过的 主要涉及Elasticsearch地理坐标类型(Geo-point)在Java应用中的一些特殊使用场景 核心依赖如下

 dependency groupId org.springframework.boot /groupId artifactId spring-boot-starter-data-elasticsearch /artifactId /dependency 
A1. elasticsearch的geo_point类型对应java中的哪种数据类型

Q1. spring data elasticsearch中定义了GeoPoint这个类来实现两者之间的类型映射 此外还需要为当前字段添加 GeoPointField注解进行标志 注意GeoPoint应该使用org.springframework.data.elasticsearch.core.geo包下的。

 /** * 坐标位置 */ GeoPointField private GeoPoint location;
A2. spring data elasticsearch中 如何以某坐标点为中心搜索指定范围的其它点

Q2. 建议尽可能通过继承ElasticsearchRepository T, ID extends Serializable 来简化完成相关查询

\"img_1b8f03be82613192e82cd0e9fcd7e8ac.png\" ElasticsearchRepository

  实现以某点为中心并搜索指定范围 首先定义如下

public interface TestRepository extends ElasticsearchRepository Test, String {}

  其次可通过QueryBuilder接口来实现上述功能 参考如下

 Servicepublic class TestService { Resource private TestRepository testRepository; public Page Test findPage(double latitude, double longitude, String distance, Pageable pageable) { // 间接实现了QueryBuilder接口 BoolQueryBuilder boolQueryBuilder new BoolQueryBuilder(); // 以某点为中心 搜索指定范围 GeoDistanceQueryBuilder distanceQueryBuilder new GeoDistanceQueryBuilder( location distanceQueryBuilder.point(latitude, longitude); // 定义查询单位 公里 distanceQueryBuilder.distance(distance, DistanceUnit.KILOMETERS); boolQueryBuilder.filter(distanceQueryBuilder); return testRepository.search(boolQueryBuilder, pageable); } }
A3. spring data elasticsearch中 如何计算两个给定坐标点之间的距离

Q3. 在GeoDistance类中定义了相关的计算方法 参考如下:

\"img_29f8b3a7a5b1fdc060a59500af71d6f4.png\" GeoDistance
 // 计算两点距离 double distance GeoDistance.ARC.calculate(srcLat, srcLon, dstLat, dstLon, DistanceUnit.KILOMETERS);

  关于GeoDistance.ARC和GeoDistance.PLANE 前者比后者计算起来要慢 但精确度要比后者高 具体区别可以看这里。

A4. spring data elasticsearch应用中 如何以某个坐标点为中心 按距离近远排序搜索指定范围

Q4. 通过SearchQuery来实现 参考下面这段代码中GeoDistanceSortBuilder的使用

 Servicepublic class TestService { Resource private TestRepository testRepository; public Page Test findPage(double latitude, double longitude, String distance, Pageable pageable) { // 实现了SearchQuery接口 用于组装QueryBuilder和SortBuilder以及Pageable等 NativeSearchQueryBuilder nativeSearchQueryBuilder new NativeSearchQueryBuilder(); nativeSearchQueryBuilder.withPageable(pageable) // 间接实现了QueryBuilder接口 BoolQueryBuilder boolQueryBuilder new BoolQueryBuilder(); // 以某点为中心 搜索指定范围 GeoDistanceQueryBuilder distanceQueryBuilder new GeoDistanceQueryBuilder( location  distanceQueryBuilder.point(latitude, longitude); // 定义查询单位 公里 distanceQueryBuilder.distance(distance, DistanceUnit.KILOMETERS); boolQueryBuilder.filter(distanceQueryBuilder); nativeSearchQueryBuilder.withQuery(boolQueryBuilder); // 按距离升序 GeoDistanceSortBuilder distanceSortBuilder  new GeoDistanceSortBuilder( location , latitude, longitude); distanceSortBuilder.unit(DistanceUnit.KILOMETERS); distanceSortBuilder.order(SortOrder.ASC); nativeSearchQueryBuilder.withSort(distanceSortBuilder); return testRepository.search(nativeSearchQueryBuilder.build());

如果这对您有帮助 欢迎分享和点赞 转载请注明出处

本文链接: http://geointer.immuno-online.com/view-713666.html

发布于 : 2021-03-24 阅读(0)