Elasticsearch-多边形范围查询(8.x)

目录

一、字段设计

二、数据录入

三、查询语句

四、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<PoiIndex> searchResponse = esUtil.queryDocument(searchRequest, PoiIndex.class);if (searchResponse.hits().hits().isEmpty()) {return List.of();}List<SmallAttractionDTO> smallAttractionDtoList = new ArrayList<>();for (Hit<PoiIndex> hit : searchResponse.hits().hits()) {// 业务处理}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis 夺命21问

1.什么是redis? Redis 是一个基于内存的高性能key-value数据库。 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库&#xff0c;很像memcached&#xff0c;整个数据库统统加载在内存当中进行操作&#xff0c;定期通过异步操作把数据库数据flush到硬盘上进行保存。…

回归求助 教程分享

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 今日 217/10000 抱个拳&#xff0c;送个礼 更多内容&#xff0c;见微*公号往期文章&#xff1a;通透&#xff01;&#xff01;十大回…

NFT如何解决音乐版权的问题

音乐版权问题一直困扰着音乐产业。传统的音乐版权管理模式存在以下问题。需要注意的是&#xff0c;NFT在音乐版权领域仍处于早期发展阶段&#xff0c;存在一些需要解决的问题&#xff0c;例如技术标准不统一、应用场景有限、法律法规不明朗等。但随着技术的进步和市场的完善&am…

小程序自学教程

从0开始搭建微信小程序前后台 0、准备 如何安装&#xff1f;去CSDN搜索“xxx安装教程”即可。 &#xff08;1&#xff09;工具 IntelliJ IDEA&#xff08;必选&#xff09;——Java开发集成环境&#xff0c;可以前后端同时使用 Web Storm——web开发集成环境&#xff0c;主要…

【Dison夏令营 Day 18】如何用 Python 中的 Pygame 制作国际象棋游戏

对于 Python 中级程序员来说&#xff0c;国际象棋游戏是一个很酷的项目创意。在熟练使用类的同时&#xff0c;它也是制作图形用户界面应用程序的良好练习。在本教程中&#xff0c;您将学习到 使用 pygame 的基础知识。 学习如何使用 Python 类编码一个国际象棋游戏。 安装和设…

Mybatis防止SQL注入

防止SQL注入的中心思想就是参数化查询&#xff0c;将输入当作参数传递&#xff0c;而不是直接拼接到 SQL 语句中。 常见的防止SQL注入的方式 1、使用#{}占位符 2、使用动态SQL 3、[配置 SQL 注入过滤器](#配置 SQL 注入过滤器) 使用#{}占位符 先来看一个错误的示范${} /…

PostgreSQL的pg_dirtyread工具

PostgreSQL的pg_dirtyread工具 pg_dirtyread 是一个第三方PostgreSQL扩展&#xff0c;它允许用户读取数据库文件中的“脏”数据&#xff0c;即那些被标记为删除或不再可见的数据。这个扩展对于数据恢复和调试非常有用&#xff0c;尤其是在需要恢复被删除或更新前的数据时。 以…

33.异步FIFO IP核的配置、调用与仿真

&#xff08;1&#xff09;异步FIFO的配置过程&#xff1a; ps&#xff1a;异步fifo相比较同步fifo少一个实际深度 &#xff08;2&#xff09;异步FIFO的调用: module dcfifo (input wr_clk ,input rd_clk ,input [7:0] …

2024-07-13 Unity AI状态机2 —— 项目介绍

文章目录 1 项目介绍2 模块介绍2.1 BaseState2.2 ...State2.2.1 PatrolState2.2.2 ChaseState / AttackState / BackState 2.3 StateMachine2.4 Monster 3 其他功能4 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2…

金融业务系统云原生技术转型:从传统架构到云原生的跨越

引言 在数字化浪潮的推动下&#xff0c;金融行业正经历着前所未有的变革。云计算作为这场变革的核心技术之一&#xff0c;正在重塑金融机构的IT架构。云原生技术以其敏捷性、弹性和可扩展性&#xff0c;为金融业务提供了强大的技术支撑&#xff0c;使得金融机构能够快速响应市…

大话设计模式

设计模式 专栏概览 参考《大话设计模式》&#xff0c;进行深入分析理解&#xff1b;使用C实现&#xff0c;然后C采取OOP仿照实现&#xff1b;C不是不能OOP,只是底层支持没那么好&#xff0c;所以C代码部分只是推荐参考&#xff1b;关于C的OOP推荐书籍&#xff1a;周立功的《嵌…

防火墙NAT和智能选路实验详解(华为)

目录 实验概述实验拓扑实验要求要求一要求二要求三要求四要求五 实验概述 从我上面一个博客能够了解到NAT和防火墙选路原理 ——>防火墙nat和智能选路&#xff0c;这一章我通过实验来详解防火墙关于nat和智能选路从而能熟练使用和配置防火墙&#xff0c;这里使用的是华为US…

《Cross-Image Pixel Contrasting for Semantic Segmentation》论文解读

期刊&#xff1a;TPAMI 年份&#xff1a;2024 摘要 研究图像语义分割问题。目前的方法主要集中在通过专门设计的上下文聚合模块(如空洞卷积、神经注意力)或结构感知的优化目标(如iou样损失)挖掘"局部"上下文&#xff0c;即单个图像中像素之间的依赖关系。然而&…

如何解决数据分析问题:IPython与Pandas结合

如何解决数据分析问题&#xff1a;IPython与Pandas结合 数据分析是现代科学研究、商业决策和技术开发中的一个重要环节。IPython和Pandas是两个强大的工具&#xff0c;它们可以大大简化和加速数据分析的过程。本文将为初学者详细介绍如何结合使用IPython和Pandas来解决数据分析…

Dify中高质量索引模式时,通过线程池处理chunk过程

本文主要介绍了Dify中高质量索引模式时,如何通过线程池执行器来处理chunk的过程。源码位置:dify\api\core\indexing_runner.py\IndexingRunner._load。核心思想:假设一个数据集中有一个文档,该文档可以拆分为12个段(segment)。如果chunk_size=10,那么分为2批提交给线程池…

Mojo语言的运用

1.Mojo语言概述 1.1什么是Mojo语言&#xff1f; Mojo语言是一种现代的动态编程语言&#xff0c;主要用于Web开发。它结合了多种语言的优点&#xff0c;如JavaScript、Perl和Lua&#xff0c;旨在为开发者提供&#xff1a; 简洁的语法&#xff1a;易于学习和使用&#xff0c;适…

Azcopy Sync同步Azure文件共享

Azcopy Sync同步Azure文件共享 一、工作原理二、安装 AzCopy在 Windows 上在 Linux 上 三、资源准备1. 创建源和目标 Azure 存储账户2. 创建源和目标文件共享3. 确定路径4. 生成源和目的存储账户的共享访问签名&#xff08;SAS&#xff09;令牌配置权限示例生成的 URL 四、Azco…

【鸿蒙学习笔记】尺寸设置・width・height・size・margin・padding・

官方文档&#xff1a;尺寸设置 目录标题 width&#xff1a;设置组件自身的宽度height&#xff1a;设置组件自身的高度size&#xff1a;设置高宽尺寸margin&#xff1a;设置组件的外边距padding&#xff1a;设置组件的内边距 width&#xff1a;设置组件自身的宽度 参数为Length…

PYTHON自学班车(三)NUMPY

动 array 索引 arrayname[start,end,step]得到的数据范围是[start,end) 可以用array[row][col]来获取指定行、列的值&#xff0c;同时可以用array(row,col)来获取指定行、列的值。 矩阵合并 vstact() 垂直合并 hstac() 横向合并 矩阵拆分

python通过集合去重并保持原来的顺序不变

代码 shelloworldhelloworldadfdfdeoofllffe new_sset(s) lstlist(new_s) lst.sort(keys.index) print(.join(lst))运行效果 helowrdaf原来h在最前面&#xff0c;f在最后面。得到的结果也是这样。