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,探寻更多的 ... 
随机推荐
- 我的arcgis培训照片8
			来自:http://www.cioiot.com/successview-554-1.html 
- iOS UI03_LTView
			// // LTView.h // OC03_LTView // // Created by dllo on 15/7/31. // Copyright (c) 2015年 dllo. All ... 
- ios打包静态库
			1. 什么是库? 所谓库就是程序代码的集合,是共享程序代码的一种方式. 2. 库的分类 根据程序代码的开源情况,库可以分为两类 开源库源代码是公开的,你可以看到具体实现.比如GitHub上比较出名的第 ... 
- Mysql-SQL优化-统计某种类型的个数
			有时我们想统计某种类型有多少个,会用这个SQL. 全表扫描之余,还要filesort.耗时1.34秒. mysql> select country,count(*) from t1 group ... 
- Cocos2D实现上下滚动式状态窗体
			大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 有时候要显示的内容太多,我们无法在iOS设备的小屏幕上显示出来 ... 
- 【POJ 1275】 Cashier Employment(差分约束系统的建立和求解)
			[POJ 1275] Cashier Employment(差分约束系统的建立和求解) Cashier Employment Time Limit: 1000MS Memory Limit: 10 ... 
- vs2012下安装Cocos2d-x模板问题
			今天想開始学Cocos2d-x.于是依据书本的提示到网上去下载了所需的安装包.我下载的cocos2d-x版本号是2.2.3.在下载完毕之后依照书中的步骤对其环境进行配置.在搞到模板安装这一步,发现找不 ... 
- Bootstrap 模态窗口源码分析
			前言: bootstrap的 js插件的源码写的非常好,也算是编写jquery插件的模范写法,本来还想大篇详细的分析一下呢,唉,没时间啊,很早之前看过的源码了,现在贴在了博客上, 300来行的代码,其 ... 
- 洛谷 P1181,1182 数列分段Section
			数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格 ... 
- go语言---map
			go语言---map https://blog.csdn.net/cyk2396/article/details/78890185 一.map的用法: type PersonDB struct { I ... 
