架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7461|回复: 0

[资料] ElasticSearch中Java操作地理位置信息(geo_point)

[复制链接]
发表于 2019-1-9 17:25:39 | 显示全部楼层 |阅读模式
简要介绍

我们知道es支持的数据类型是多种多样的,除了我们常见的几种基本数据类型,它也支持记录位置信息的的数据类型。在es中,记录地理位置信息的数据类型有两种,分别为geo_shap和geo_point,下面我针对geo_point类型简要介绍一下
geo_point支持多种数据传入方式:

字符串
位置:lat + "," + lon

数组
位置: {"lat": ...,"lon": ...}

对象
位置: [lon, lat]


注意:可能所有人都至少踩过一次这个坑====地理坐标点用字符串形式表示时是纬度在前,经度在后("latitude,longitude"),而数组形式表示时刚好相反,是经度在前,纬度在后([longitude,latitude])。其实,在 Elasticesearch 内部,不管字符串形式还是数组形式,都是纬度在前,经度在后。不过早期为了适配GeoJSON 的格式规范,调整了数组形式的表示方式。这点官网有说明。
针对geo_point类型一般有如下几种查询需求

distance query
查找距离中心点范围内的点

distance range query(已废弃)
查询位于中心点指定range内的点,这个api在新版本的es中去掉了,因此这里不做过多解释
bounding query
查找指定点组成的矩形范围内的点

polygon query
查找多个点组成的一个多边形中的点

针对不同的查询Java构造的SearchSourceBuilder factory如下:


service如下:

controller层代码如下:

[1].如何使用

我们在使用geo_point类型之前,首先应该在创建index时通过mapping显式指定该字段为geo_point类型,如下:


以上我们新建了一个名字为restraunt的index,在它的mapping文件中显式的指定了“位置”字段的type为“geo_point”类型

[2]准备一些数据

在kibana上我们准备的数据如下:


以上我们准备了7条数据,接下来我们需要执行查询,看看我们的接口是否符合我们需求。

[3]查询

查询distance


其他两种查询同上。




上一篇:ElasticsearchParseException[field must be either [lat], [lon] or [geohash]]
下一篇:discuz安装应用时显示“数据无法识别,请返回”解决方法
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-19 15:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表