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.pswp.cn/web/74703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74703.shtml
英文地址,請注明出處:http://en.pswp.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…