Elasticsearch--地理搜索
地理位置索引
空间搜索映射定义
elasticsearch中使用geo_point类型定义地理位置。
示例
下面是一些示例数据:
location字段是geo_point类型的,可以使用字符串,数字或者一个对象来提供经纬度。注意使用字符串和数组来提供经纬度时,经度和纬度参数有不同的顺序。最后一条记录使用地理散列值,详细描述见http://en.wikipedia.org/wiki/Geohash
使用坐标进行查询的方式有多种
基于距离的排序
按照与给定地点的距离进行排序。
{
"query":{
"match_all":{
}
},
"sort":[
{
"_geo_distance":{
"location":"48.1312, 2.356",
"unit":"km"
}
}
]
}
使用_geo_distance表明按照距离进行排序,unit的值有:km(公里),mi(英里)。
边界框过滤
当需要在地图上显示结果,或者允许用户标记地图区域来搜索时,非常有用
{
"filter":{
"geo_bounding_box":{
"location":{
"top_left":"52.346, -1.962",
"bottom_right":"48.155, 2.356"
}
}
}
}
通过提供左上和右下坐标,形成一个矩形区域。Elasticsearch会自动计算出该区域,并返回位于该区域中的点的数据记录。
距离的限制
把结果限定为离基准点一个选定的距离之内。
{
"filter":{
"geo_distance":{
"location":"48.656, 2.355",
"distance":"500km"
}
}
}
任意地理形状搜索
Elasticsearch使用geo_shape来定义自定义形状。
映射如下:
{
"poi":{
"properties":{
"name":{
"type":"string",
"index":"not_analyzed"
},
"location":{
"type":"geo_shape"
}
}
}
}
上面定义了一个poi索引类型,location字段使用geo_shape类型(不同的es版本写法略有不同)。
geo_shape类型字段的结构语法被称为GeoJson.它允许我们定义各种地理类型。
点
一个点的第一个元素是经度,第二个元素是纬度。
{
"location":{
"type":"point",
"coordinates":[
-0.265,
51.5646
]
}
}
包络线
一个包络线(Envelope)通过提供左上和右下两个坐标定义一个框。
{
"type":"envelope",
"coordinates":[[-0.265, 51.5646],[56.166, 4.621]]
}
多边形
一个多边形通过一个连接点的列表来创建。数组中的第一个点和最后一个点必须是一样的,保证闭合。
{
"type":"polygon",
"coordinates":[
[-0.265, 51.5646],[56.166, 4.621],
[6.255, 5.5646],[6.166, 9.621],
[3.274, 34.566],[12.386, 6.741],
[-0.265, 51.5646],[56.166, 4.621]
]
}
多个多边形
multipolygon形状包含多个多边形,除了有多个多边形还可以包含多个被排除的形状。
比如查询某个区域中是否有数据时,可以使用多边形定义这个区域,elasticsearch就能返回该区域内的数据。
下面是一个查询用法:
把形状保存到索引中
形状的定义很复杂,但是形状不会经常改变。在索引中定义形状,并在查询中使用它们。
映射定义如下:
索引下面数据:
查询语句如下:
{
"filter":{
"geo_shape":{
"location":{
"index_shape":{
"index":"countries",
"type":"country",
"path":"area",
"id":1
}
}
}
}
}
比较最近这两个查询,shape变成了indexed_shape。需要告诉elasticsearch去哪里找这个形状。
Elasticsearch--地理搜索的更多相关文章
- 十九种Elasticsearch字符串搜索方式终极介绍
前言 刚开始接触Elasticsearch的时候被Elasticsearch的搜索功能搞得晕头转向,每次想在Kibana里面查询某个字段的时候,查出来的结果经常不是自己想要的,然而又不知道问题出在了哪 ...
- Elasticsearch分布式搜索和数据分析引擎-ElasticStack(上)v7.14.0
Elasticsearch概述 **本人博客网站 **IT小神 www.itxiaoshen.com Elasticsearch官网地址 https://www.elastic.co/cn/elast ...
- ElasticSearch位置搜索
ElasticSearch位置搜索 学习了:https://blog.csdn.net/bingduanlbd/article/details/52253542 学习了:https://blog.cs ...
- ElasticSearch入门-搜索(java api)
ElasticSearch入门-搜索(java api) package com.qlyd.searchhelper; import java.util.Map; import net.sf.json ...
- PHP使用ElasticSearch做搜索
PHP 使用 ElasticSearch 做搜索 https://blog.csdn.net/zhanghao143lina/article/details/80280321 https://www. ...
- Elasticsearch实现搜索推荐词
本篇介绍的是基于Elasticsearch实现搜索推荐词,其中需要用到Elasticsearch的pinyin插件以及ik分词插件,代码的实现这里提供了java跟C#的版本方便大家参考. 1.实现的结 ...
- Elasticsearch 为了搜索
前言 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库--无论是开源还是 ...
- [ElasticSearch] 空间搜索 (一)
依据索引文档的地理坐标来进行搜索.Elasticsearch 也可以处理这种搜索.--空间搜索 一.为空间搜索准备映射 PUT my_space_test { "mappings" ...
- Elasticsearch 教程--搜索
搜索 – 基本工具 到目前为止,我们已经学习了Elasticsearch的分布式NOSQL文档存储,我们可以直接把JSON文档扔到Elasticsearch中,然后直接通过ID来进行调取.但是Elas ...
- Elasticsearch 数据搜索篇·【入门级干货】
ES即简单又复杂,你可以快速的实现全文检索,又需要了解复杂的REST API.本篇就通过一些简单的搜索命令,帮助你理解ES的相关应用.虽然不能让你理解ES的原理设计,但是可以帮助你理解ES,探寻更多的 ...
随机推荐
- Redis集群方案之主从复制(待实践)
Redis有主从复制的功能,一台主可以有多台从,从还可以有多台从,但是从只能有一个主.并且在从写入的数据不会复制到主. 配置 在Redis中,要实现主从复制架构非常简单,只需要在从数据库的配置文件中加 ...
- CSDN 夏令营程序 试题分析 (2)
题目:若须要在O(nlogn)(以2为底)的时间内完毕对数组的排序.且要求排序是稳定的,则可选择的排序方法是: A.高速排序 B.堆排序 C.归并排序 D.直接插入 ...
- A* Pathfinding Project (Unity A*寻路插件) 使用教程
Unity4.6 兴许版本号都已经内置了寻路AI了.之前的文章有介绍 Unity3d 寻路功能 介绍及项目演示 然而两年来项目中一直使用的是 A* Pathfinding 这个插件的.所以抽时间来写下 ...
- dorker 安装
http://www.docker.org.cn/book/install/install-docker-win7-win8-requirements-38.html1. 你先去下载Docker To ...
- 玩转单元測试之DBUnit
本文同一时候发表在:http://www.cnblogs.com/wade-xu/p/4547381.html DBunit 是一种扩展于JUnit的数据库驱动測试框架,它使数据库在測试过程之间处于一 ...
- hdu 5256 序列变换
最长上升子序列 nlogn;也是从别人的博客学来的 #include<iostream> #include<algorithm> #define maxn 100000+5 u ...
- 容器与容器编排实战系列 1 -- Docker 安装
CentOS7.4 下安装Docker 详细步骤 第一步:安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yu ...
- cojs 1001. [WZOI2011 S3] 消息传递
1001. [WZOI2011 S3] 消息传递 ★★ 输入文件:messagew.in 输出文件:messagew.out 简单对比时间限制:1 s 内存限制:128 MB Prob ...
- linux用于文件解压缩的命令
1 gzip gzip -<压缩率> 压缩率用数字(1-9)来表示,越大,则压缩率越大. 2 bz2 解压bz2 bzip2 -d filename.bz2
- vijos - P1077克隆龙 (找规律 + 指数型母函数 + python)
P1077克隆龙 Accepted 标签:[显示标签] 描写叙述 如今龙的克隆已成为可能,龙基因由ACTG字母组成,而龙的基因有例如以下特点: 1.A在基因中的出现为偶数次(包含0): 2.C的情况也 ...