ES中经纬度查询geo_point

0. ES版本

6.x版本

1. 创建索引

PUT /location
{"settings": {"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"location": {"properties": {"id": {"type": "keyword"},"name": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_max_word"},"coordinate": {"type": "geo_point"}}}}
}

2. 批量插入数据

注意:这里的coordinate用的是字符串插入,所以要用纬经度。试了下用数组的形式(“coordinate”:[116.64002551005981,40.17836693398477])会报错,应该是6.x的版本不支持吧

PUT /location/location/_bulk
{"index":{"_id":"1"}}
{"name":"资料名称1","coordinate":"40.17836693398477,116.64002551005981"}
{"index":{"_id":"2"}}
{"name":"资料名称2","coordinate":"40.19103839805197,116.5624013764374"}
{"index":{"_id":"3"}}
{"name":"资料名称3","coordinate":"40.13933715136454,116.63441990026217"}
{"index":{"_id":"4"}}
{"name":"资料名称4","coordinate":"40.14901664712196,116.53067995860928"}
{"index":{"_id":"5"}}
{"name":"资料名称5","coordinate":"40.125057718315716,116.62963567059545"}
{"index":{"_id":"6"}}
{"name":"资料名称6","coordinate":"40.19216257806647,116.64025980109571"}
{"index":{"_id":"7"}}
{"name":"资料名称7","coordinate":"40.16371689899584,116.63095084701624"}
{"index":{"_id":"8"}}
{"name":"资料名称8","coordinate":"40.146045218040605,116.5696251832195"}
{"index":{"_id":"9"}}
{"name":"资料名称9","coordinate":"40.144735806234166,116.60712460957835"}

3. geo_bounding_box查询

3.1 解释

geo_bounding_box是查询一个矩形内的所有数据,提供左上角和右上角的经纬度坐标
在这里插入图片描述

3.2 经纬度属性查询

GET /location/location/_search
{"query": {"geo_bounding_box": {"coordinate": {"top_left": {"lat": 40.187328,"lon": 116.498353},"bottom_right": {"lat": 40.084509,"lon": 116.610461}}}}
}

3.3 经纬度数组查询

GET /location/location/_search
{"query": {"geo_bounding_box": {"coordinate": {"top_left": [116.498353, 40.187328],"bottom_right": [116.610461, 40.084509]}}}
}

3.4 经纬度字符串查询

GET /location/location/_search
{"query": {"geo_bounding_box": {"coordinate": {"top_left": "40.187328, 116.498353","bottom_right": "40.084509, 116.610461"}}}
}

3.5 经纬度边界框WKT查询

GET /location/location/_search
{"query": {"geo_bounding_box": {"coordinate": {"wkt": "BBOX(116.498353,116.610461,40.187328,40.084509)"}}}
}

3.6 经纬度顶点属性查询

GET /location/location/_search
{"query": {"geo_bounding_box": {"coordinate": {"top": 40.187328,"left": 116.498353,"bottom": 40.084509,"right": 116.610461}}}
}

4. geo_polygon查询

4.1 解释

geo_polygon查询一个多边形区域内的所有数据,需要按顺序形成一个闭合的区域,不管从哪个坐标开始,只要能形成一个闭合区域就行
在这里插入图片描述

4.2 查询

GET /location/location/_search
{"query": {"geo_polygon": {"coordinate": {"points": ["40.178012,116.577188","40.169329,116.586315","40.178288,116.591813"]}}}
}
GET /location/location/_search
{"query": {"geo_polygon": {"coordinate": {"points": ["40.178012,116.577188","40.169329,116.586315","40.178288,116.591813","40.171975,116.587105"]}}}
}

5. Springboot中使用geo_bounding_box查询

5.1 实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "location", type = "location")
public class AddressEsEntity {@Idprivate String id;@Field(type = FieldType.Text, analyzer = "ik_max_word")private String name;@Field(type = FieldType.Keyword)private String coordinate;
}

5.2 geoBoundingBoxQuery

这里的setCorners里面直接传topLeft和bottomRight会报错,具体原因还没研究

String topLeft = "40.187328,116.498353";
String bottomRight = "40.084509,116.610461";
try {SearchRequest searchRequest = new SearchRequest("location");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.geoBoundingBoxQuery("coordinate").setCorners(new GeoPoint("40.187328,116.498353"), new GeoPoint("40.084509,116.610461")));searchRequest.types("location").source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHit[] hits = searchResponse.getHits().getHits();System.out.println(searchResponse);
} catch (IOException e) {e.printStackTrace();
}

5.3 geoPolygonQuery

List<GeoPoint> points = new ArrayList<>();
points.add(new GeoPoint("40.178012,116.577188"));
points.add(new GeoPoint("40.169329,116.586315"));
points.add(new GeoPoint("40.178288,116.591813"));
try {SearchRequest searchRequest = new SearchRequest("address");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.geoPolygonQuery("coordinate", points));searchRequest.types("address").source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHit[] hits = searchResponse.getHits().getHits();System.out.println(searchResponse);
} catch (IOException e) {e.printStackTrace();
}

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

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

相关文章

OpenCV界面编程

《OpenCV计算机视觉开发实践&#xff1a;基于Python&#xff08;人工智能技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 OpenCV的Python开发环境搭建(Windows)-CSDN博客 OpenCV也支持有限的界面编程&#xff0c;主要是针对窗口、控件和鼠标…

GOC L2 第五课模运算和周期二

课堂回顾&#xff1a; 求取余数的过程叫做模运算 每轮的动作都是重复的&#xff0c;我们称这个过程位周期。 课堂学习&#xff1a; 剩余计算器 秋天到了&#xff0c;学校里的苹果熟了&#xff0c;太乙老师&#xff0c;想让哪吒帮忙设计一个计算器&#xff0c;看每个小朋友能分…

54.大学生心理健康管理系统(基于springboot项目)

目录 1.系统的受众说明 2.相关技术 2.1 B/S结构 2.2 MySQL数据库 3.系统分析 3.1可行性分析 3.1.1时间可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.1.4 技术可行性 3.1.5 法律可行性 3.2系统流程分析 3.3系统功能需求分析 3.4 系统非功能需求分析 4.系统设计…

Redis 除了数据类型外的核心功能 的详细说明,包含事务、流水线、发布/订阅、Lua 脚本的完整代码示例和表格总结

以下是 Redis 除了数据类型外的核心功能 的详细说明&#xff0c;包含事务、流水线、发布/订阅、Lua 脚本的完整代码示例和表格总结&#xff1a; 1. Redis 事务&#xff08;Transactions&#xff09; 功能描述 事务通过 MULTI 和 EXEC 命令将一组命令打包执行&#xff0c;保证…

STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出

目录 前言 输出时的GPIO控制部分 标准库是如何操作寄存器完成GPIO驱动的初始化的&#xff1f; 问题1&#xff1a;如何掌握GPIO的编程细节——跟寄存器如何打交道 问题2&#xff1a;哪些寄存器&#xff0c;去哪里找呢&#xff1f; 问题三&#xff0c;寄存器的含义&#xff…

前端布局难题:父元素padding导致子元素无法全屏?3种解决方案

大家好&#xff0c;我是一诺。今天要跟大家分享一个我在实际项目中经常用到的CSS技巧——如何让子元素突破父元素的padding限制&#xff0c;实现真正的全屏宽度效果。 为什么会有这个需求&#xff1f; 记得我刚入行的时候&#xff0c;接到一个需求&#xff1a;要在内容区插入…

当网页受到DDOS网络攻击有哪些应对方法?

分布式拒绝服务攻击也是人们较为熟悉的DDOS攻击&#xff0c;这类攻击会通过大量受控制的僵尸网络向目标服务器发送请求&#xff0c;以此来消耗服务器中的资源&#xff0c;致使用户无法正常访问&#xff0c;当网页受到分布式拒绝服务攻击时都有哪些应对方法呢&#xff1f; 建立全…

LeNet-5简介及matlab实现

文章目录 一、LeNet-5网络结构简介二、LeNet-5每一层的实现原理2.1. 第一层 (C1) &#xff1a;卷积层&#xff08;Convolution Layer&#xff09;2.2. 第二层 (S2) &#xff1a;池化层&#xff08;Pooling Layer&#xff09;2.3. 第三层&#xff08;C3&#xff09;&#xff1a;…

【LLM】MCP(Python):实现 stdio 通信的Client与Server

本文将详细介绍如何使用 Model Context Protocol (MCP) 在 Python 中实现基于 STDIO 通信的 Client 与 Server。MCP 是一个开放协议&#xff0c;它使 LLM 应用与外部数据源和工具之间的无缝集成成为可能。无论你是构建 AI 驱动的 IDE、改善 chat 交互&#xff0c;还是构建自定义…

Docker 安装 Elasticsearch 教程

目录 一、安装 Elasticsearch 二、安装 Kibana 三、安装 IK 分词器 四、Elasticsearch 常用配置 五、Elasticsearch 常用命令 一、安装 Elasticsearch &#xff08;一&#xff09;创建 Docker 网络 因为后续还需要部署 Kibana 容器&#xff0c;所以需要让 Elasticsearch…

Swagger @ApiOperation

ApiOperation 注解并非 Spring Boot 自带的注解&#xff0c;而是来自 Swagger 框架&#xff0c;Swagger 是一个规范且完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务&#xff0c;而 ApiOperation 主要用于为 API 接口的操作添加描述信息。以下为…

【奇点时刻】GPT4o新图像生成模型底层原理深度洞察报告(篇2)

由于上一篇解析深度不足&#xff0c;经过查看学习相关论文&#xff0c;以下是一份对 GPT-4o 最新的图像生成模型 的深度梳理与洞察&#xff0c;从模型原理到社区解读、对比传统扩散模型&#xff0c;再到对未来趋势的分析。为了便于阅读&#xff0c;整理成以下七个部分&#xff…

C# 窗体应用(.FET Framework ) 打开文件操作

一、 打开文件或文件夹加载数据 1. 定义一个列表用来接收路径 public List<string> paths new List<string>();2. 打开文件选择一个文件并将文件放入列表中 OpenFileDialog open new OpenFileDialog(); // 过滤 open.Filter "(*.jpg;*.jpge;*.bmp;*.png…

Scala 面向对象编程总结

​​​抽象属性和抽象方法 基本语法 定义抽象类&#xff1a;abstract class Person{} //通过 abstract 关键字标记抽象类定义抽象属性&#xff1a;val|var name:String //一个属性没有初始化&#xff0c;就是抽象属性定义抽象方法&#xff1a;def hello():String //只声明而没…

人工智能赋能工业制造:智能制造的未来之路

一、引言 随着人工智能技术的飞速发展&#xff0c;其应用场景不断拓展&#xff0c;从消费电子到医疗健康&#xff0c;从金融科技到交通运输&#xff0c;几乎涵盖了所有行业。而工业制造作为国民经济的支柱产业&#xff0c;也在人工智能的浪潮中迎来了深刻的变革。智能制造&…

元宇宙概念下,UI 设计如何打造沉浸式体验?

一、元宇宙时代UI设计的核心趋势 在元宇宙概念下&#xff0c;UI设计的核心目标是打造沉浸式体验&#xff0c;让用户在虚拟世界中感受到身临其境的交互效果。以下是元宇宙时代UI设计的几个核心趋势&#xff1a; 沉浸式体验设计 元宇宙的核心是提供沉浸式体验&#xff0c;UI设计…

AI 如何帮助我们提升自己,不被替代

在当今快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐渗透到生活的方方面面。许多人担心 AI 会取代人类的工作&#xff0c;然而&#xff0c;AI 更多的是作为一种强大的赋能工具&#xff0c;帮助我们提升自身能力&#xff0c;让我们在工作中更具竞争力。以…

基于SpringBoot+Vue实现的二手交易市场平台功能一

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的发展和人们生活水平的提高&#xff0c;消费者购买能力的提升导致产生了大量的闲置物品&#xff0c;这些闲置物品具有一定的经济价值。特别是在高校环境中&#xff0c;学生群体作为一个具有一定消费水平的群体&#xff0c;每…

k8s安装cri驱动创建storageclass动态类

部署nfs服务器 #所有k8s节点安装nfs客户端 yum install -y nfs-utils mkdir -p /nfs/share echo "/nfs/share *(rw,sync,no_root_squash)" >> /etc/exports systemctl enable --now nfs-serverhelm部署nfs的provisioner&sc 所有k8s节点安装客户端 yu…

SpringBoot + Netty + Vue + WebSocket实现在线聊天

最近想学学WebSocket做一个实时通讯的练手项目 主要用到的技术栈是WebSocket Netty Vue Pinia MySQL SpringBoot&#xff0c;实现一个持久化数据&#xff0c;单一群聊&#xff0c;支持多用户的聊天界面 下面是实现的过程 后端 SpringBoot启动的时候会占用一个端口&#xff…