我正在研究ElasticSearch的GeoTile。在将位置分组到存储桶中之后,我想通过分页(使用searchafter)获取该存储桶中的数据。有没有人这样做,我怎么才能做到呢?谢谢你,谢谢
以下是我使用的GeoTile聚合:
GET /index-name/_doc/_search
{
"aggs": {
"result": {
"geotile_grid": {
"field": "location",
"precision": 12
}
}
}
}
字符串
结果看起来像:
{
"took" : 3,
"hits" : {
"total" : {
"value" : 39,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ... ]
},
"aggregations" : {
"result" : {
"buckets" : [
{
"key" : "12/3519/1597",
"doc_count" : 36
},
{
"key" : "12/3520/1597",
"doc_count" : 3
}
]
}
}
}
型
例如,如何在“12/3519/1597”存储桶中获取36个文档?谢谢你,谢谢
我已经尝试过将GeoTile键“12/3519/1597”转换为边界框follow this article或使用ESearch代码中的GeoTileUtils。
然而,从上面的例子中,关键字“12/3519/1597”被转换为一个边界框,当我查询该框中的所有文档时,有2个桶。x=3520
存储桶包含lon=129.375
中的文档,这些文档正好位于right edge
上。
2条答案
按热度按时间vybvopom1#
您可以嵌套top hits聚合来获取每个地理切片桶的文档。
您还可以使用geo grid query来过滤每个磁贴的文档。
字符串
响应
型
jdgnovmf2#
对于较新的ES版本(从8.8开始),您可以使用@Nathan Reese解决方案。
然而,在较低版本(我的版本是7.10)中,我使用了Elastic搜索的GeoTileUtils将geotile键(z/x/y)转换为边界框。
但你必须知道边界框的边缘。地理切片聚合不采用右边缘和下边缘上的位置(点)。为了排除边缘上的点,我使用了一个轻松的脚本,如下所示:
字符串