本地英文版地址: ../en/search-aggregations-bucket-geotilegrid-aggregation.html
一个多桶聚合,用于geo_point字段并将坐标点分组到代表格网单元格的桶中。
生成的网格可以是稀疏的,只包含具有匹配数据的单元格。
每个单元格对应于许多在线地图站点使用的地图切片。
每个单元格都使用“{zoom}/{x}/{y}”格式进行标注,其中 zoom 是用户指定的精度。
- 高精度键具有较大的x和y范围,表示每个切片仅覆盖一小块区域。
- 低精度键的x和y范围较小,表示每个切片覆盖的面积较大。
请参阅缩放级别文档,了解精度(缩放)与地面尺寸的关系。 此聚合的精度可以介于0和29之间(包括0和29)。
长度为29的最高精度的 geotile 产生覆盖小于10cm×10cm土地的单元格,因此就内存和结果大小而言,高精度请求的成本可能很高。 请看下面的示例,了解如何在请求高精度的详细信息之前,先将聚合过滤到较小的地理区域。
指定字段的类型必须是geo_point (只能在映射中显式设置),它还可以保存一个geo_point字段数组,在这种情况下,所有这些都将在聚合过程中考虑在内。
PUT /museums
{
"mappings": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
POST /museums/_bulk?refresh
{"index":{"_id":1}}
{"location": "52.374081,4.912350", "name": "NEMO Science Museum"}
{"index":{"_id":2}}
{"location": "52.369219,4.901618", "name": "Museum Het Rembrandthuis"}
{"index":{"_id":3}}
{"location": "52.371667,4.914722", "name": "Nederlands Scheepvaartmuseum"}
{"index":{"_id":4}}
{"location": "51.222900,4.405200", "name": "Letterenhuis"}
{"index":{"_id":5}}
{"location": "48.861111,2.336389", "name": "Musée du Louvre"}
{"index":{"_id":6}}
{"location": "48.860000,2.327000", "name": "Musée d'Orsay"}
POST /museums/_search?size=0
{
"aggregations" : {
"large-grid" : {
"geotile_grid" : {
"field" : "location",
"precision" : 8
}
}
}
}
响应:
{
...
"aggregations": {
"large-grid": {
"buckets": [
{
"key" : "8/131/84",
"doc_count" : 3
},
{
"key" : "8/129/88",
"doc_count" : 2
},
{
"key" : "8/131/85",
"doc_count" : 1
}
]
}
}
}
当请求详细的桶(通常用于显示“放大”的地图)时,应应用类似geo_bounding_box的过滤器来缩小主题区域,否则可能会创建并返回数百万个桶。
POST /museums/_search?size=0
{
"aggregations" : {
"zoomed-in" : {
"filter" : {
"geo_bounding_box" : {
"location" : {
"top_left" : "52.4, 4.9",
"bottom_right" : "52.3, 5.0"
}
}
},
"aggregations":{
"zoom1":{
"geotile_grid" : {
"field": "location",
"precision": 22
}
}
}
}
}
}
{
...
"aggregations" : {
"zoomed-in" : {
"doc_count" : 3,
"zoom1" : {
"buckets" : [
{
"key" : "22/2154412/1378379",
"doc_count" : 1
},
{
"key" : "22/2154385/1378332",
"doc_count" : 1
},
{
"key" : "22/2154259/1378425",
"doc_count" : 1
}
]
}
}
}
}
geotile_grid 聚合支持一个可选的参数-bounds,该参数将所考虑的坐标点限制在所提供的边界内。
参数 bounds 接受 地理边界框(geo_bounding_box)查询中的所有有效的格式的边界的边界框。
此边界框可与在聚合前过滤坐标点的附加geo_bounding_box查询一起使用,也可单独使用。
它是一个独立的边界框,可以与聚合上下文中定义的任何其他geo_bounding_box查询相交、相等或不相交。
POST /museums/_search?size=0
{
"aggregations" : {
"tiles-in-bounds" : {
"geotile_grid" : {
"field" : "location",
"precision" : 22,
"bounds": {
"top_left" : "52.4, 4.9",
"bottom_right" : "52.3, 5.0"
}
}
}
}
}
{
...
"aggregations" : {
"tiles-in-bounds" : {
"buckets" : [
{
"key" : "22/2154412/1378379",
"doc_count" : 1
},
{
"key" : "22/2154385/1378332",
"doc_count" : 1
},
{
"key" : "22/2154259/1378425",
"doc_count" : 1
}
]
}
}
}
|
field |
必要的。使用 GeoPoints 索引的字段的名称。 |
|
precision |
可选。用于定义结果中的单元格/桶的键的整数缩放。默认值为 5。 超出[0,29]范围的值将被拒绝。 |
|
bounds |
可选。用于过滤桶中的坐标点的边界框。 |
|
size |
可选。要返回的 geohash 桶的最大数量(默认为10,000)。 当结果被裁剪(trim)时,基于桶包含的文档数量来区分桶的优先级。 |
|
shard_size |
可选。为了对最终结果中返回的前几个单元格进行更精确的计数,该聚合默认从每个分片返回 |