Spring ElasticsearchTemplate 经纬度按距离排序
es实体,用 @GeoPointField 注解,值为:中间逗号隔开,如 29.477000,119.278536(经度, 维度)
@Document(indexName = "v_intelligent_store")
@Data
public class IntelligentStore implements Serializable {
private String id; /** 体验店名称 */
private String name;
/** 联系人姓名 */
private String contactsName;
/** 联系手机号 */
private String phoneNumber;
/** 联系电话 */
private String telePhone;
/** 场景分类 */
private String category;
/** 开店时间 */
private LocalDate foundTime;
/** 营业时间 */
private String openHours;
/** 主营产品 */
private String mainProduct;
/** 店铺面积 */
private Double shopSize;
/** xx省xx市xx区 */
private String area;
/** 店铺面积 */
private String detailAddress;
/** 经维度,中间逗号隔开 */
@GeoPointField private String location;
...
}
接口:
/**
* 搜索附近的体验店
*
* @param lat 经度
* @param lon 维度
* @param distance 距离
* @param pageable
* @return
*/
Page<IntelligentStoreDTO> findAllByLocaltion(
double lat, double lon, double distance, Pageable pageable);
实现:
@Override
public Page<IntelligentStoreDTO> findAllByLocaltion(
double lat, double lon, double distance, Pageable pageable) { GeoDistanceQueryBuilder builder =
QueryBuilders.geoDistanceQuery("location")//查询字段
.point(lat, lon)//设置经纬度
.distance(distance, DistanceUnit.METERS)//设置距离和单位(米)
.geoDistance(GeoDistance.ARC);
GeoDistanceSortBuilder sortBuilder =
SortBuilders.geoDistanceSort("location")
.point(lat, lon)
.unit(DistanceUnit.METERS)
.order(SortOrder.ASC);//排序方式
//构造查询条件
NativeSearchQueryBuilder nativeSearchQueryBuilder =
new NativeSearchQueryBuilder()
.withFilter(builder)
.withSort(sortBuilder)
.withPageable(pageable); Page<IntelligentStoreDTO> page =
elasticsearchTemplate.queryForPage(
nativeSearchQueryBuilder.build(), IntelligentStoreDTO.class);
return page;
}
查询10公里范围数据,返回:
{
"code": "0",
"msg": "成功",
"result": [
{
"id": "5af2c615e15b402c54c390b9",
"name": "智哪儿体验店1",
"area": "浙江省杭州市余杭区",
"detailAddress": "梦想小镇",
"location": "30.292227,120.004870",
"distance": "13", //距离目标位置多少米
"createTime": "2018-05-09 17:57:41",
"updateTime": "2018-05-09 17:57:41"
},
{
"id": "5af2c62ce15b402c54c390bc",
"name": "智哪儿体验店3",
"area": "浙江省杭州市余杭区",
"detailAddress": "仓前工业园",
"location": "30.282905,119.987661",
"distance": "1962",//距离目标位置多少米
"createTime": "2018-05-09 17:58:04",
"updateTime": "2018-05-09 17:58:04"
},
{
"id": "5af2c61fe15b402c54c390ba",
"name": "智哪儿体验店1",
"area": "浙江省杭州市余杭区",
"detailAddress": "中国移动杭州研发中心",
"location": "30.316513,120.021278",
"distance": "3111",//距离目标位置多少米
"createTime": "2018-05-09 17:57:51",
"updateTime": "2018-05-09 17:57:51"
},
{
"id": "5af2c626e15b402c54c390bb",
"name": "智哪儿体验店2",
"area": "浙江省杭州市余杭区",
"detailAddress": "杭州师范大学",
"location": "30.241073,119.949798",
"distance": "7774",//距离目标位置多少米
"createTime": "2018-05-09 17:57:58",
"updateTime": "2018-05-09 17:57:58"
},
{
"id": "5b0fbe41d601800007db438c",
"name": "社会主义学院智能锁店",
"contactsName": "健康的风景",
"area": "浙江省杭州市余杭区",
"detailAddress": "浙江省社会主义学院",
"location": "30.291823,120.138587",
"distance": "12818",//距离目标位置多少米
"createTime": "2018-05-31 17:20:01",
"updateTime": "2018-05-31 17:21:06"
}
]
}
Spring ElasticsearchTemplate 经纬度按距离排序的更多相关文章
- Solr 空间搜索配置、按经纬度计算距离排序
Solr 空间搜索配置 1. 在solr目录下的找到conf文件夹下的schema.xml. <fields> <!-- 在fields元素中添加如下代码 --> <fi ...
- mysql使用sql语句根据经纬度计算距离排序
CREATE TABLE `locationpoint` ( `id` int(11) NOT NULL, `province` varchar(20) NOT NULL, `city` varcha ...
- Mysql 之根据经纬度按距离排序
一.方式一 st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米. SELECT *, (st_distance(point(lng,l ...
- 使用.Net+非关系型数据库MongoDB 实现LBS商家按距离排序_按离我最近排序
.Net MongoDB LBS地理位置定位 开发过程,实现商家按距离排序 前言: 在使用美团点外卖,看电影,找好吃的时候,经常会注意到软件有一个按距离排序,找离我最近的商家,心中有一些疑问,.Net ...
- entity framework 实现按照距离排序
在做项目时,经常会遇到“离我最近”这种需求.顾名思义,它需要根据用户的经纬度和事物的经纬度计算距离,然后进行排序,最后分页(当然这些操作要在数据库中进行,否则就变成假分页了). 我们通常可以用sql语 ...
- php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己 ...
- 【Python学习】指定两点地理位置经纬度的距离计算
指定两点地理位置经纬度的距离计算 #coding=utf-8 from math import * # input Lat_A 纬度A # input Lng_A 经度A # input Lat_B ...
- iOS根据2个经纬度计算距离
#pragma mark - calculate distance 根据2个经纬度计算距离 #define PI 3.14159265358979323 +(double) CalculationDi ...
- java工具类(六)根据经纬度计算距离
Java实现根据经纬度计算距离 在项目开发过程中,需要根据两地经纬度坐标计算两地间距离,所用的工具类如下: Demo1: public static double getDistatce(double ...
随机推荐
- 数字信号处理专题(2)——利用FPGA进行基本运算及特殊函数定点运算
一.前言 FPGA以擅长高速并行数据处理而闻名,从有线/无线通信到图像处理中各种DSP算法,再到现今火爆的AI应用,都离不开卷积.滤波.变换等基本的数学运算.但由于FPGA的硬件结构和开发特性使得其对 ...
- kali权限提升之配置不当提权与WCE
kali权限提升之配置不当提权与WCE 1.利用配置不当提权 2.WCE 3.其他提权 一.利用配置不当提权 与漏洞提权相比更常用的方法 在大部分企业环境下,会有相应的补丁更新策略,因此难以通过相应漏 ...
- Windows苹果安卓手机远程桌面客户端推荐
适用于:Windows 10.Windows 8.1.Windows Server 2012 R2.Windows Server 2016 最近公司电脑从Windows7升级到了Windows10,然 ...
- clamwin + 拖拽查毒+右键查毒
下载 clamwin 到 windows 并安装 http://www.clamwin.com/ 为了方便使用clamwin,写一个bat,实现拖拽到bat 自动查毒 @echo off mode c ...
- Codeception 实战
Codeception 测试 Php 代码 一.一句话概述 使用 cc 进行单元测试,保证现有代码质量,为以后维护与重构提供支撑. 二.目标 安装配置 cc 编写测试代码,简化开发与最大化稳定性和可维 ...
- UEditor1.2.6.0在.net环境下使用
UEditor1.2.6.0 1.百度百科词条 2.UEditor官方网站 [CKEditor+CKFinder的配置实用,可查看博主另一篇文章] 第一次接触UEditor还是在2011年的下半年里, ...
- React 系列教程2:编写兰顿蚂蚁演示程序
简介 最早接触兰顿蚂蚁是在做参数化的时候,那时候只感觉好奇,以为是很复杂的东西.因无意中看到生命游戏的 React 实现,所以希望通过兰顿蚂蚁的例子再学习一下 React. 兰顿蚂蚁的规则非常简单: ...
- 分布式存储ceph——(2)openstack对接ceph存储后端
ceph对接openstack环境 一.使用rbd方式提供存储如下数据: (1)image:保存glanc中的image: (2)volume存储:保存cinder的volume:保存创建虚拟机时选择 ...
- IDEA快捷建使用
因为以前使用的IDE工具是Eclipse,所以在公司中都是用IDEA的情况下,换成了IDEA,感觉是好用了很多. 其他快捷键: Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表 ...
- EXT 设置编辑框为只读
Ext.getCmp("processResult").setReadOnly(ture); //processResult是属性的id,setReadOnly(ture)设置 ...