Geotile 网格聚合
编辑Geotile 网格聚合编辑
一种多桶聚合,它将 geo_point
和 geo_shape
值分组到代表网格的桶中。生成的网格可以是稀疏的,并且只包含具有匹配数据的单元格。每个单元格对应于许多在线地图网站使用的 地图瓦片。每个单元格使用 "{zoom}/{x}/{y}" 格式进行标记,其中 zoom 等于用户指定的精度。
- 高精度键具有更大的 x 和 y 范围,并且代表仅覆盖一小块区域的瓦片。
- 低精度键具有较小的 x 和 y 范围,并且代表每个覆盖大面积的瓦片。
请参阅 缩放级别文档,了解精度(缩放)如何与地面上的大小相关联。此聚合的精度可以在 0 到 29 之间(含)。
长度为 29 的最高精度 geotile 会生成覆盖不到 10 厘米乘 10 厘米土地的单元格,因此高精度请求在 RAM 和结果大小方面可能非常昂贵。请参阅下面的示例,了解如何在请求高细节级别之前先将聚合过滤到更小的地理区域。
您只能使用 geotile_grid
来聚合显式映射的 geo_point
或 geo_shape
字段。如果 geo_point
字段包含数组,则 geotile_grid
会聚合所有数组值。
简单的低精度请求编辑
response = client.indices.create( index: 'museums', body: { mappings: { properties: { location: { type: 'geo_point' } } } } ) puts response response = client.bulk( index: 'museums', refresh: true, body: [ { index: { _id: 1 } }, { location: 'POINT (4.912350 52.374081)', name: 'NEMO Science Museum' }, { index: { _id: 2 } }, { location: 'POINT (4.901618 52.369219)', name: 'Museum Het Rembrandthuis' }, { index: { _id: 3 } }, { location: 'POINT (4.914722 52.371667)', name: 'Nederlands Scheepvaartmuseum' }, { index: { _id: 4 } }, { location: 'POINT (4.405200 51.222900)', name: 'Letterenhuis' }, { index: { _id: 5 } }, { location: 'POINT (2.336389 48.861111)', name: 'Musée du Louvre' }, { index: { _id: 6 } }, { location: 'POINT (2.327000 48.860000)', name: "Musée d'Orsay" } ] ) puts response response = client.search( index: 'museums', size: 0, body: { aggregations: { "large-grid": { geotile_grid: { field: 'location', precision: 8 } } } } ) puts response
PUT /museums { "mappings": { "properties": { "location": { "type": "geo_point" } } } } POST /museums/_bulk?refresh {"index":{"_id":1}} {"location": "POINT (4.912350 52.374081)", "name": "NEMO Science Museum"} {"index":{"_id":2}} {"location": "POINT (4.901618 52.369219)", "name": "Museum Het Rembrandthuis"} {"index":{"_id":3}} {"location": "POINT (4.914722 52.371667)", "name": "Nederlands Scheepvaartmuseum"} {"index":{"_id":4}} {"location": "POINT (4.405200 51.222900)", "name": "Letterenhuis"} {"index":{"_id":5}} {"location": "POINT (2.336389 48.861111)", "name": "Musée du Louvre"} {"index":{"_id":6}} {"location": "POINT (2.327000 48.860000)", "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 等过滤器来缩小主题区域。否则,可能会创建和返回数百万个桶。
response = client.search( index: 'museums', size: 0, body: { aggregations: { "zoomed-in": { filter: { geo_bounding_box: { location: { top_left: 'POINT (4.9 52.4)', bottom_right: 'POINT (5.0 52.3)' } } }, aggregations: { "zoom1": { geotile_grid: { field: 'location', precision: 22 } } } } } } ) puts response
POST /museums/_search?size=0 { "aggregations": { "zoomed-in": { "filter": { "geo_bounding_box": { "location": { "top_left": "POINT (4.9 52.4)", "bottom_right": "POINT (5.0 52.3)" } } }, "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
查询相交、相等或不相交。
response = client.search( index: 'museums', size: 0, body: { aggregations: { "tiles-in-bounds": { geotile_grid: { field: 'location', precision: 22, bounds: { top_left: 'POINT (4.9 52.4)', bottom_right: 'POINT (5.0 52.3)' } } } } } ) puts response
POST /museums/_search?size=0 { "aggregations": { "tiles-in-bounds": { "geotile_grid": { "field": "location", "precision": 22, "bounds": { "top_left": "POINT (4.9 52.4)", "bottom_right": "POINT (5.0 52.3)" } } } } }
响应
{ ... "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 } ] } } }
聚合 geo_shape
字段编辑
对 Geoshape 字段的聚合与对点的聚合几乎相同,除了单个形状可以在多个瓦片中进行计数。如果形状的任何部分与该瓦片相交,则该形状将计入匹配值的计数。下面是一张演示此情况的图片
选项编辑
field |
(必需,字符串) 包含索引的 geo-point 或 geo-shape 值的字段。必须显式映射为 |
precision |
(可选,整数) 用于定义结果中单元格/桶的键的整数缩放级别。默认为 |
bounds |
(可选,对象) 用于过滤每个桶中 geo-point 或 geo-shape 的边界框。接受与 地理边界框查询 相同的边界框格式。 |
size |
(可选,整数) 要返回的最大桶数。默认为 10,000。当结果被修剪时,桶会根据它们包含的文档数量进行优先级排序。 |
shard_size |
(可选,整数) 从每个分片返回的桶数。默认为 |