elk笔记13--Queries-geo queries

Posted 昕光xg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elk笔记13--Queries-geo queries相关的知识,希望对你有一定的参考价值。


elk笔记13--Queries-geo queries

1 geo查询简介

geo queries(地理位置查询) 支持2类geo数据,分别为geo_point 和geo_shape 2中类型;其中, gep_points 支持 lat/lon 对, geo_shape 支持点、线、圆、多边形和多个多边形等;
共对应四种查询,分别为 geo_bounding_box、geo_distance、geo_polygon 、geo_shape 。本文部分数据直接使用 kibana_sample_data_ecommerce 中的数据,具体案例如下:

Elasticsearch supports two types of geo data: geo_point fields which support lat/lon pairs, and geo_shape fields, which support points, lines, circles, polygons, multi-polygons, etc.

2 geo 查询案例

  1. 使用geo_bounding_box 和top_left、bottom_right 搜索左上和右下区域内的数据

"query":
"geo_bounding_box" :
"geoip.location" :
"top_left" :
"lat" : 40.73,
"lon" : -74.1
,
"bottom_right" :
"lat" : 40.01,
"lon" : -71.12





也可以使用这种方式搜索
"geoip.location" :
"top_left" : [-74.1, 40.73],
"bottom_right" : [-71.12, 40.01]

或者下面这种方式
"geoip.location" :
"top_left" : "40.73, -74.1",
"bottom_right" : "40.01, -71.12"

结果:

elk笔记13--Queries-geo

  1. 使用geo_distance 搜索特定地点指定距离内的数据
GET kibana_sample_data_ecommerce/_search

"query":
"geo_distance" :
"distance": "200km",
"geoip.location" :
"lat" : 40.6,
"lon" : -73



  1. 使用 geo_polygon 搜索指定多边形区域内的数据
GET kibana_sample_data_ecommerce/_search

"query":
"geo_polygon" :
"geoip.location" :
"points" : [
"lat" : 30, "lon" : -70,
"lat" : 60, "lon" : -20,
"lat" : 45, "lon" : -90
]




也可以使用
"points" : [
[30,-70],
[60,-20],
[45,-90]
]
或者使用
"points" : [
"30,-70",
"60,-20",
"45,-90"
]
  1. 通过 geo_shape 来搜索某个范围内的数据
    该方法与前3个不同之处在于:需要设置mapping类型为geo_shape, 而前三个mapping类型为geo_point
PUT /example

"mappings":
"properties":
"location":
"type": "geo_shape"





POST /example/_doc?refresh

"name": "Wind & Wetter, Berlin, Germany",
"location":
"type": "point",
"coordinates": [13.400544, 52.530286]



GET example/_search

"query":
"geo_shape":
"location":
"shape":
"type": "envelope",
"coordinates" : [[13.0, 53.0], [14.0, 52.0]]
,
"relation": "within"



  1. 统计不同范围段内的数据
    通过aggs 和 geo_distance 来统计不同范围段的数据
GET kibana_sample_data_ecommerce/_search

"size": 0,
"aggs":
"agg_by_distance":
"geo_distance" :
"field": "geoip.location",
"origin":
"lat" : 40.6,
"lon" : -73
,
"unit": "mi",
"distance_type": "plane",
"ranges": [
"to":100,
"from": 100,"to":300,
"from": 300
]



结果:

elk笔记13--Queries-geo

此处单位为miles, 其它单位见 ​​distance-units​

3 说明

  • 参考文档
  1. ​geo-queries​
  2. ​distance-units​
  • 测试环境
  1. 本文测试案例对应的 es 版本为7.2.1
  2. 测试数据为kibana自带数据,Home->Add data->Sample data->Sample eCommerce orders


以上是关于elk笔记13--Queries-geo queries的主要内容,如果未能解决你的问题,请参考以下文章

elk笔记16--聚合分析

elk笔记8--index

elk笔记10--filebeat使用

elk笔记22.2--通过api快速创建索引

elk笔记9--跨集群搜索

ELK安装笔记