2、录入数据
新增一个基于geo point类型的数据,可以使用多种方式。
**多种类型描述geo_point类型字段的时候,在搜索数据的时候,显示的格式 **和录入的格式是统一的。不影响搜索。任何数据描述的geo_point类型字段,都适用地理位置搜索。
数据范围要求:纬度范围是-9090之间,经度范围是-180180之间。经纬度数据都是浮点数或数字串(数字组成的字符串),最大精度:小数点后7位。(常
用小数点后6位即可。)
基于对象:latitude:纬度、longitude:经度。语义清晰,建议使用。
PUT /hotel_app/_doc/1 { "name": "七天连锁酒店", "pin" : { "lat" : 40.12, "lon" : -71.34 } }
基于字符串:依次定义纬度、经度。不推荐使用
PUT /hotel_app/_doc/2 { "name": "维多利亚大酒店", "pin" : "40.99, ‐70.81" }
基于数组:依次定义经度、纬度。不推荐使用
PUT /hotel_app/_doc/3 { "name": " 红树林宾馆", "pin" : [40, ‐73.81] }
3、搜索指定区域范围内的数据
总结:
矩形范围搜索:传入的top_left和bottom_right坐标点是有固定要求的。地图中以北作为top,南作为bottom,西作为left,东作为right。也就是top_left 应该从西北向东南。Bottom_right应该从东南向西北。Top_left的纬度应该大于bottom_right的纬度,top_left的经度应该小于bottom_right的经度。多边形范围搜索:对传入的若干点的坐标顺序没有任何的要求。只要传入若干地理位置坐标点,即可形成多边形。
搜索矩形范围内的数据
GET /hotel_app/_doc/_search { "query": { "bool": { "must": [ { "match_all": {} } ], "filter": { "geo_bounding_box": { "pin": { "top_left" : { "lat" : 41.73, "lon" : ‐74.1 }, "bottom_right" : { "lat" : 40.01, "lon" : ‐70.12 } } } } } } } GET /hotel_app/_doc/_search { "query": { "constant_score": { "filter": { "geo_bounding_box": { "pin": { "top_left": { "lat": ‐70, "lon": 39 }, "bottom_right": { "lat": ‐75, "lon": 41 } } } } } } }
搜索多边形范围内的数据
GET /hotel_app/_doc/_search { "query": { "bool": { "must": [ { "match_all": {} } ], "filter": { "geo_polygon": { "pin": { "points": [ {"lat" : 40.73, "lon" : ‐74.1}, {"lat" : 40.01, "lon" : ‐71.12}, {"lat" : 50.56, "lon" : ‐90.58} ] } } } } } }
4、搜索某地点附近的数据
这个搜索在项目中更加常用。类似附近搜索功能。
Distance距离的单位,常用的有米(m)和千米(km)。
建议使用filter来过滤geo_point数据。因为geo_point数据相关度评分计算比较耗时。使用query来搜索geo_point数据效率相对会慢一些。建议使用filter。
GET /hotel_app/_doc/_search { "query": { "bool": { "must": [ { "match_all": {} } ], "filter": { "geo_distance": { "distance": "200km", "pin": { "lat": 40, "lon": ‐70 } } } } } } GET hotel_app/_search { "query": { "geo_distance" : { "distance" : "90km", "pin" : { "lat" : 40.55, "lon" : ‐71.12 } } } }
5、统计某位置附近区域内的数据
聚合统计分别距离某位置80英里,300英里,1000英里范围内的数据数量。
其中unit是距离单位,常用单位有:米(m),千米(km),英里(mi)
distance_type是统计算法:sloppy_arc默认算法、arc最高精度、plane最高效率
GET /hotel_app/_doc/_search { "size": 0, "aggs": { "agg_by_pin" : { "geo_distance": { "distance_type": "arc", "field": "pin", "origin": { "lat": 40, "lon": ‐70 }, "unit": "mi", "ranges": [ { "to": 80 }, { "from": 80, "to": 300 }, { "from": 300, "to": 1000 } ] } } } }
四、BeatsBeats
是一个开放源代码的数据发送器。我们可以把Beats作为一种代理安装在我们的服务器上,这样就可以比较方便地将数据发送到Elasticsearch或者Logstash中。Elastic Stack提供了多种类型的Beats组件。
审计数据 AuditBeat
日志文件 FileBeat
云数据 FunctionBeat
可用性数据 HeartBeat
系统日志 JournalBeat
指标数据 MetricBeat
网络流量数据 PacketBeat
Windows事件日志 Winlogbeat
Beats可以直接将数据发送到Elasticsearch或者发送到Logstash,基于Logstash
可以进一步地对数据进行处理,然后将处理后的数据存入到Elasticsearch,最后
使用Kibana进行数据可视化。
1、FileBeat简介
FileBeat专门用于转发和收集日志数据的轻量级采集工具。它可以为作为代理安
装在服务器上,FileBeat监视指定路径的日志文件,收集日志数据,并将收集到
的日志转发到Elasticsearch或者Logstash。
2、FileBeat的工作原理
启动FileBeat时,会启动一个或者多个输入(Input),这些Input监控指定的日
志数据位置。FileBeat会针对每一个文件启动一个Harvester(收割机)。
Harvester读取每一个文件的日志,将新的日志发送到libbeat,libbeat将数据收
集到一起,并将数据发送给输出(Output)。
3、安装FileBeat
安装FileBeat只需要将FileBeat Linux安装包上传到Linux系统,并将压缩包解压
到系统就可以了。
FileBeat官方下载地址:
上传FileBeat安装到Linux,并解压。
tar ‐xvzf filebeat‐7.6.1‐linux‐x86_64.tar.gz ‐C ../usr/local/es/