ES地理范围查询第一讲:Java操作地理位置信息(geo 您所在的位置:网站首页 es怎么存储数据java ES地理范围查询第一讲:Java操作地理位置信息(geo

ES地理范围查询第一讲:Java操作地理位置信息(geo

2023-08-08 03:29| 来源: 网络整理| 查看: 265

- 简要介绍

我们知道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如下:

 

public class QueryFactory { /** * 针对geo_point类型的查找,查询符合多边形内的数据 * @param field * @param points * @return * @throws Exception */ public SearchSourceBuilder builtPolygonQuery(String field, List points) throws Exception { if (points == null || points.size()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有