Elasticsearch-多边形范围查询(8.x)
创始人
2025-01-08 16:04:45
0次

目录

一、字段设计

二、数据录入

三、查询语句

四、Java代码实现


开发版本详见:Elasticsearch-经纬度查询(8.x-半径查询)_es经纬度范围查询-CSDN博客

一、字段设计

PUT /aoi_points {   "mappings": {     "properties": {       "location": {         "type": "geo_shape"       }     }   } }

aoi_points是索引名称,location是字段名称,它将存储地理形状数据

二、数据录入

POST /aoi_points/_doc {   "location": {     "type": "point",     "coordinates": [-74.0060, 40.7128]   } }

三、查询语句

GET /aoi_points/_search {   "query": {     "bool": {       "filter": {         "geo_shape": {           "location": {             "shape": {               "type": "polygon",               "coordinates": [                 [                   [-74.02, 40.715],                   [-73.99, 40.715],                   [-73.99, 40.705],                   [-74.02, 40.705],                   [-74.02, 40.715]                 ]               ]             },             "relation": "within"           }         }       }     }   } }
  • location是存储地理位置的字段
  • shape定义了一个多边形区域,coordinates是一个数组,包含多边形顶点的坐标
  • relation指定了查询的地理空间关系,这里是within,表示查询多边形内部的点
  • 多边形的坐标点需要按顺序(通常是顺时针或逆时针)排列,形成一个闭合的多边形

四、Java代码实现

具体查询对象,可自行定义,本方法只提供思路,莫直接粘贴使用

        // 封装ES查询参数         BoolQuery.Builder boolQueryBuilder = new BoolQuery.Builder();         // AOI范围查询         ShapePO shapePo =                     new ShapePO().setType(GeographyType.POLYGON.getValue()).setCoordinates(poi.getAoi().getCoordinates());         // 多边形查询         GeoShapeQuery geoShapeQuery =             GeoShapeQuery.of(geoShape -> geoShape.field(PoiIndexConstant.LOCATION)                     .shape(s -> s.shape(JsonData.fromJson(JSONUtil.toJsonStr(shapePo))).relation(GeoShapeRelation.Within)))._toQuery().geoShape();         boolQueryBuilder.filter(f -> f.geoShape(geoShapeQuery));         int size = poi.getAoi().getCoordinates().get(0).size();          SearchRequest.Builder searchRequestBuilder = new SearchRequest.Builder();         searchRequestBuilder.index(esIndexProperties.getPoiIndexRead())                 .query(query -> query.bool(boolQueryBuilder.build()))                 .size(size);          // ES查询         SearchRequest searchRequest = searchRequestBuilder.build();         log.info("getSmallAttractionByPoiId query:{}", searchRequest.toString());         SearchResponse searchResponse = esUtil.queryDocument(searchRequest, PoiIndex.class);          if (searchResponse.hits().hits().isEmpty()) {             return List.of();         }         List smallAttractionDtoList = new ArrayList<>();         for (Hit hit : searchResponse.hits().hits()) {             // 业务处理         }

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...