通过一段时间的空间搜索的学习,其实ES对于空间对象最强大之处就在于其计算能力以及计算速度,能够快速的返回你想要的结果。但在使用过程中也发现一些问题。比如说聚合时,必须保证同一个index下的所有type中不能包含相同的字段名而拥有不同的字段类型。目前还不知原因,猜测聚合是直接查找index中包含的所有字段进行统计的。
知道的话也可以留言评论哦!
空间搜索在聚合中的使用
直接上代码:
1.geo_distance
"aggs": {
"aggs_geopoint": {
"geo_distance": {
"field": "location",
"origin": {
"lat": 51.5072222,
"lon": -0.1275
},
"unit": "km",
"ranges": [
{
"to": 300
},
{
"from": 300,
"to": 2000
},
{
"from": 2000
}
]
}
主要作用对一定区域范围内的空间对象进行统计。
上图说话:
2.geohash_grid
"aggs": {
"new_york": {
"geohash_grid": {
"field": "location",
"precision": 5
}
}
}
geohash将一个二维的坐标转化为一个简单的可排序可比较的字符串.通过一个字符串来代替一个平面。
本博客转载了关于geohash的介绍。
分割成网格,每个网格就是一个bulket,每个桶再进行统计
3.geo_bounds
"aggs": {
"map_zoom": {
"geo_bounds": {
"field": "location"
}
}
}
该geo_bounds聚集将计算封装所有匹配我们查询的文件所需要的最小边界框。所以通常会与geohash聚合一起使用,作为geohash聚合内的聚合,如下:
"aggs": {
"new_york": {
"geohash_grid": {
"field": "location",
"precision": 5
}
},
"map_zoom": {
"geo_bounds": {
"field": "location"
}
}
}
geo_bounds subaggregation计算用于每geohash形成的单元格。
geo_bounds 获得包含所有查询文档的最小矩形的左上和右下的坐标