java查询elasticsearch游标数据(5分钟掌握Elasticsearch空间查询之geo)

在笔者之前的文章中,已经介绍过Es对空间类型geo_Point的支持了。今天笔者来介绍一下另一种重要的空间类型geo_shape。

java查询elasticsearch游标数据(5分钟掌握Elasticsearch空间查询之geo)(1)

1 geo_shape简介

使用geo_shape类型,可以支持对任意空间几何形状的检索,比如圆形、矩形、多边形。如果我们存储的数据是线、面类型,都可以用geo_shape。另外,geo_shape也是可以兼容点的存储的。

2 geo_shape选项

如果要使用geo_shape类型进行数据存储,需要在创建mapping时显式指定。可以支持的选项包括:

  • tree:可以显示指定前缀树的实现,支持geohash或者quadtree;
  • precision:存储精度,默认是50m(对应层级21);
  • tree_levels:树的层级,默认21(对应精度50m);
  • strategy:检索策略,默认是term,可以指定为recursive;
3 geo_shape设置示例

在插入geo_shape类型的数据之前,首先需要创建mapping(可以理解为关系型数据库中的表结构)

PUT /test { "mappings": { "properties": { "location": { "type": "geo_shape", "precision": "5km" } } } }

4 geo_shape数据存储示例

geo_shape存储的是空间数据,支持geojson或者WKT格式。

java查询elasticsearch游标数据(5分钟掌握Elasticsearch空间查询之geo)(2)

geojson/WKT/es中的空间类型

4.1 存储Point类型数据——geojson格式

POST /test/_doc { "location" : { "type" : "point", "coordinates" : [-77.03653, 38.897676] } }

4.2 存储Point类型数据——WKT格式

POST /test/_doc { "location" : "POINT (-77.03653 38.897676)" }

4.3 存储多边形(polygon)数据

POST /test/_doc { "location" : { "type" : "polygon", "coordinates" : [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ] } } POST /test/_doc { "location" : "POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0))" }

4.4 存储线(multilinestring)的数据

POST /test/_doc { "location" : { "type" : "multilinestring", "coordinates" : [ [ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0] ], [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0] ], [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8] ] ] } }

5 更多

本文主要介绍了geo_shape的基础存储示例,后续会出一系列文章深度讲解Es对空间查询的支持。

欢迎关注笔者,每天分享架构干货。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页