我在弹性搜索索引中有数十万个文档,其中包含相关的纬度和经度(存储为geo_point类型).我希望能够创建一个如下所示的地图可视化:http://leaflet.github.io/Leaflet.markercluster/example/marker-clustering-realworld.388.html
所以,我认为我想要的是运行带有边界框的查询(即用户正在查看的地图边界)并返回此边界框内的集群摘要.有没有一种方法可以在elasticsearch中实现这一目标?也许是一种新的索引策略?像geohashes这样的东西可以工作,但它会将东西聚集成一个矩形网格,而不是基于点密度的任意多边形,如上例所示.
@kumetix - 好问题.我在这里回复你的评论,因为该文本太长而无法发表另一条评论.geohash_precision设置将指定geohash聚合能够返回的最大精度.例如,如果geohash_precision设置为8,我们可以在该字段上运行geohash聚合,最多精度为8.根据参考,这将返回以大约38.2mx 19m的geohash框分组的结果.精度为7或8可能足以准确显示基于网络的热图,就像我在上面的例子中提到的那样.
至于geohash_precision如何影响集群内部,我猜测该设置在geo_point中存储长度为<= geohash_precision的geohash字符串.假设我们对自由女神像有一个观点:40.6892,-74.0444.geohash12的目的是:dr5r7p4xb2ts.将geo_point中的geohash_precision设置为8将在内部存储字符串:d dr dr5 dr5r dr5r7 dr5r7p dr5r7p4 dr5r7p4x
并且geohash_precision为12还会在内部存储字符串:dr5r7p4xb dr5r7p4xb2 dr5r7p4xb2t dr5r7p4xb2ts
导致每个geo_point的存储开销增加一点.将geohash_precision设置为距离值(1km,1m等)可能只是将其存储在最接近的geohash字符串长度精度值.
注意:如何使用python计算地理位置
$ pip install python-geohash
>>> import geohash
>>> geohash.encode(40.6892,-74.0444)
'dr5r7p4xb2ts'
Run Code Online (Sandbox Code Playgroud)
在Elasticsearch 1.0中,您可以使用新的Geohash Grid聚合。
像 geohashes 这样的东西可以工作,但它会将事物聚集成矩形网格,而不是如上例所示的基于点密度的任意多边形。
这是事实,但 geohash 网格聚合可以很好地处理稀疏数据,因此您只需要网格上有足够的点,就可以实现与该地图中的示例非常相似的效果。
| 归档时间: |
|
| 查看次数: |
3471 次 |
| 最近记录: |