矢量瓦片搜索 API
编辑矢量瓦片搜索 API
编辑搜索矢量瓦片中的地理空间值。以二进制 Mapbox 矢量瓦片 的形式返回结果。
resp = client.search_mvt( index="my-index", field="my-geo-field", zoom="15", x="5271", y="12710", ) print(resp)
const response = await client.searchMvt({ index: "my-index", field: "my-geo-field", zoom: 15, x: 5271, y: 12710, }); console.log(response);
GET my-index/_mvt/my-geo-field/15/5271/12710
前提条件
编辑- 在使用此 API 之前,您应该熟悉 Mapbox 矢量瓦片规范。
- 如果启用了 Elasticsearch 安全功能,您必须具有目标数据流、索引或别名的
read
索引权限。对于跨集群搜索,请参阅 远程集群。
路径参数
编辑-
<target>
-
(必需,字符串) 要搜索的数据流、索引或别名的逗号分隔列表。支持通配符 (
*
)。要搜索所有数据流和索引,请省略此参数或使用*
或_all
。要搜索远程集群,请使用
<cluster>:<target>
语法。请参阅 跨集群搜索。 -
<field>
-
(必需,字符串) 包含要返回的地理空间值的字段。必须是
geo_point
或geo_shape
字段。该字段必须启用 doc values。不能是嵌套字段。矢量瓦片本身不支持几何图形集合。对于
geo_shape
字段中的geometrycollection
值,API 为集合的每个元素返回一个hits
层要素。此行为可能会在未来的版本中更改。 -
<zoom>
- (必需,整数) 要搜索的矢量瓦片的缩放级别。接受
0
-29
。 -
<x>
- (必需,整数) 要搜索的矢量瓦片的 X 坐标。
-
<y>
- (必需,整数) 要搜索的矢量瓦片的 Y 坐标。
描述
编辑在内部,Elasticsearch 将矢量瓦片搜索 API 请求转换为包含以下内容的 搜索
- 一个关于
<field>
的geo_bounding_box
查询。该查询使用<zoom>/<x>/<y>
瓦片作为边界框。 - 一个关于
<field>
的geotile_grid
或geohex_grid
聚合。grid_agg
参数确定聚合类型。聚合使用<zoom>/<x>/<y>
瓦片作为边界框。 - 可选地,一个关于
<field>
的geo_bounds
聚合。只有当exact_bounds
参数为true
时,搜索才包含此聚合。 - 如果可选参数
with_labels
为 true,则内部搜索将包含一个动态运行时字段,该字段调用几何 doc 值的getLabelPosition
函数。这使得能够生成包含建议几何标签的新点要素,例如,多边形将只有一个标签。
例如,Elasticsearch 可以将 grid_agg
参数为 geotile
且 exact_bounds
参数为 true
的矢量瓦片搜索 API 请求转换为以下搜索
resp = client.search( index="my-index", size=10000, query={ "geo_bounding_box": { "my-geo-field": { "top_left": { "lat": -40.979898069620134, "lon": -45 }, "bottom_right": { "lat": -66.51326044311186, "lon": 0 } } } }, aggregations={ "grid": { "geotile_grid": { "field": "my-geo-field", "precision": 11, "size": 65536, "bounds": { "top_left": { "lat": -40.979898069620134, "lon": -45 }, "bottom_right": { "lat": -66.51326044311186, "lon": 0 } } } }, "bounds": { "geo_bounds": { "field": "my-geo-field", "wrap_longitude": False } } }, ) print(resp)
const response = await client.search({ index: "my-index", size: 10000, query: { geo_bounding_box: { "my-geo-field": { top_left: { lat: -40.979898069620134, lon: -45, }, bottom_right: { lat: -66.51326044311186, lon: 0, }, }, }, }, aggregations: { grid: { geotile_grid: { field: "my-geo-field", precision: 11, size: 65536, bounds: { top_left: { lat: -40.979898069620134, lon: -45, }, bottom_right: { lat: -66.51326044311186, lon: 0, }, }, }, }, bounds: { geo_bounds: { field: "my-geo-field", wrap_longitude: false, }, }, }, }); console.log(response);
GET my-index/_search { "size": 10000, "query": { "geo_bounding_box": { "my-geo-field": { "top_left": { "lat": -40.979898069620134, "lon": -45 }, "bottom_right": { "lat": -66.51326044311186, "lon": 0 } } } }, "aggregations": { "grid": { "geotile_grid": { "field": "my-geo-field", "precision": 11, "size": 65536, "bounds": { "top_left": { "lat": -40.979898069620134, "lon": -45 }, "bottom_right": { "lat": -66.51326044311186, "lon": 0 } } } }, "bounds": { "geo_bounds": { "field": "my-geo-field", "wrap_longitude": false } } } }
API 以二进制 Mapbox 矢量瓦片 的形式返回结果。Mapbox 矢量瓦片被编码为 Google Protobufs (PBF)。默认情况下,瓦片包含三个图层
- 一个
hits
图层,其中包含与geo_bounding_box
查询匹配的每个<field>
值的要素。 - 一个
aggs
图层,其中包含geotile_grid
或geohex_grid
的每个单元格的要素。该图层仅包含具有匹配数据的单元格的要素。 -
一个
meta
图层,其中包含- 一个包含边界框的要素。默认情况下,这是瓦片的边界框。
- 关于
geotile_grid
或geohex_grid
的任何子聚合的值范围。 - 搜索的元数据。
API 仅返回可以在其缩放级别上显示的要素。例如,如果一个多边形要素在其缩放级别上没有面积,则 API 会省略它。
API 以 UTF-8 编码的 JSON 形式返回错误。
查询参数
编辑您可以为此 API 指定多个选项,作为查询参数或请求主体参数。如果您同时指定这两个参数,则查询参数优先。
-
exact_bounds
-
(可选,布尔值) 如果
false
,则meta
图层的要素是瓦片的边界框。默认为false
。如果
true
,则meta
图层的要素是geo_bounds
聚合产生的边界框。该聚合对与<zoom>/<x>/<y>
瓦片相交且wrap_longitude
设置为false
的<field>
值运行。生成的边界框可能大于矢量瓦片。
-
extent
- (可选,整数) 瓦片一边的像素大小。矢量瓦片是边长相等的正方形。默认为
4096
。
-
buffer
- (可选,整数) 瓦片外部裁剪缓冲区的像素大小。这允许渲染器避免来自超出瓦片范围的几何图形的轮廓伪影。默认为
5
。
-
grid_agg
-
(可选,字符串) 用于为
<field>
创建网格的聚合。grid_agg
的有效值-
geotile
(默认) -
geotile_grid
聚合。 -
geohex
-
geohex_grid
聚合。
-
-
grid_precision
-
(可选,整数)
grid_agg
中单元格的精度级别。接受0
-8
。默认为8
。如果0
,则结果不包含aggs
图层。geotile
的网格精度对于
grid_agg
为geotile
的情况,您可以使用aggs
图层中的单元格作为较低缩放级别的瓦片。grid_precision
表示可通过这些单元格获得的额外缩放级别。最终精度计算如下<zoom> + grid_precision
例如,如果
<zoom>
为7
且grid_precision
为8
,则geotile_grid
聚合将使用15
的精度。最大最终精度为29
。grid_precision
还确定网格的单元格数量,如下所示(2^grid_precision) x (2^grid_precision)
例如,值
8
将瓦片划分为 256 x 256 个单元格的网格。aggs
图层仅包含具有匹配数据的单元格的要素。geohex
的网格精度对于
grid_agg
为geohex
的情况,Elasticsearch 使用<zoom>
和grid_precision
计算最终精度,如下所示<zoom> + grid_precision
此精度确定
geohex
聚合产生的六边形单元的 H3 分辨率。下表映射了每个精度的 H3 分辨率。例如,如果
<zoom>
为3
且grid_precision
为3
,则精度为6
。在精度为6
时,六边形单元的 H3 分辨率为2
。如果<zoom>
为3
且grid_precision
为4
,则精度为7
。在精度为7
时,六边形单元的 H3 分辨率为3
。精度 唯一瓦片箱 H3 分辨率 唯一六边形箱 比例 1
4
0
122
30.5
2
16
0
122
7.625
3
64
1
842
13.15625
4
256
1
842
3.2890625
5
1024
2
5882
5.744140625
6
4096
2
5882
1.436035156
7
16384
3
41162
2.512329102
8
65536
3
41162
0.6280822754
9
262144
4
288122
1.099098206
10
1048576
4
288122
0.2747745514
11
4194304
5
2016842
0.4808526039
12
16777216
6
14117882
0.8414913416
13
67108864
6
14117882
0.2103728354
14
268435456
7
98825162
0.3681524172
15
1073741824
8
691776122
0.644266719
16
4294967296
8
691776122
0.1610666797
17
17179869184
9
4842432842
0.2818666889
18
68719476736
10
33897029882
0.4932667053
19
274877906944
11
237279209162
0.8632167343
20
1099511627776
11
237279209162
0.2158041836
21
4398046511104
12
1660954464122
0.3776573213
22
17592186044416
13
11626681248842
0.6609003122
23
70368744177664
13
11626681248842
0.165225078
24
281474976710656
14
81386768741882
0.2891438866
25
1125899906842620
15
569707381193162
0.5060018015
26
4503599627370500
15
569707381193162
0.1265004504
27
18014398509482000
15
569707381193162
0.03162511259
28
72057594037927900
15
569707381193162
0.007906278149
29
288230376151712000
15
569707381193162
0.001976569537
六边形单元在矢量瓦片上并非完美对齐。某些单元格可能与多个矢量瓦片相交。为了计算每个精度的 H3 分辨率,Elasticsearch 将每个分辨率的六边形箱的平均密度与每个缩放级别的瓦片箱的平均密度进行比较。Elasticsearch 使用最接近相应
geotile
密度的 H3 分辨率。
-
grid_type
-
(可选,字符串) 确定
aggs
图层中要素的几何图形类型。在aggs
图层中,每个要素表示网格中的一个单元格。grid_type
的有效值-
grid
(默认) - 每个要素都是单元格几何图形的
Polygon
。对于grid_agg
为geotile
的情况,要素是单元格的边界框。对于grid_agg
为geohex
的情况,要素是六边形单元的边界。 -
point
- 每个要素都是单元格质心的
Point
。 -
centroid
- 每个要素都是单元格内数据的质心的
Point
。对于复杂的几何图形,实际质心可能在单元格之外。在这些情况下,要素将设置为单元格内部最接近质心的点。
-
-
size
- (可选,整数) 要在
hits
图层中返回的最大要素数。接受0
-10000
。默认为10000
。如果0
,则结果不包含hits
图层。
-
track_total_hits
-
(可选,整数或布尔值) 准确计数与查询匹配的命中数。默认为
10000
。如果
true
,则以牺牲一些性能为代价返回确切的命中数。如果false
,则响应不包括与查询匹配的命中总数。
请求主体
编辑-
aggs
-
(可选,聚合对象)
grid_agg
的子聚合。支持以下聚合类型:-
avg
-
boxplot
-
cardinality
-
extended stats
-
max
-
median absolute deviation
-
min
-
percentile
-
percentile-rank
-
stats
-
sum
-
聚合名称不能以
_mvt_
开头。_mvt_
前缀保留用于内部聚合。
-
-
exact_bounds
-
(可选,布尔值) 如果
false
,则meta
图层的要素是瓦片的边界框。默认为false
。如果
true
,则meta
图层的要素是geo_bounds
聚合产生的边界框。该聚合对与<zoom>/<x>/<y>
瓦片相交且wrap_longitude
设置为false
的<field>
值运行。生成的边界框可能大于矢量瓦片。 -
extent
- (可选,整数) 瓦片一边的像素大小。矢量瓦片是边长相等的正方形。默认为
4096
。 -
buffer
- (可选,整数) 瓦片外部裁剪缓冲区的像素大小。这允许渲染器避免来自超出瓦片范围的几何图形的轮廓伪影。默认为
5
。 -
fields
-
(可选,字符串和对象的数组)要在
hits
层中返回的字段。支持通配符 (*
)。此参数不支持具有数组值的字段。具有数组值的字段可能会返回不一致的结果。
您可以在数组中将字段指定为字符串或对象。
fields
对象的属性-
field
- (必需,字符串)要返回的字段。支持通配符 (
*
)。 -
format
-
(可选,字符串)日期和地理空间字段的格式。其他字段数据类型不支持此参数。
date
和date_nanos
字段接受日期格式。geo_point
和geo_shape
字段接受-
geojson
(默认) - GeoJSON
-
wkt
- Well Known Text(众所周知的文本)
-
mvt(<spec>)
-
二进制Mapbox 矢量瓦片。该 API 以 base64 编码的字符串形式返回瓦片。
<spec>
的格式为<zoom>/<x>/<y>
,带有两个可选后缀:@<extent>
和/或:<buffer>
。例如,2/0/1
或2/0/1@4096:5
。mvt
参数-
<zoom>
- (必需,整数)瓦片的缩放级别。接受
0
-29
。 -
<x>
- (必需,整数)瓦片的 X 坐标。
-
<y>
- (必需,整数)瓦片的 Y 坐标。
-
<extent>
- (可选,整数) 瓦片一边的像素大小。矢量瓦片是边长相等的正方形。默认为
4096
。 -
<buffer>
- (可选,整数) 瓦片外部裁剪缓冲区的像素大小。这允许渲染器避免来自超出瓦片范围的几何图形的轮廓伪影。默认为
5
。
-
-
-
-
grid_agg
-
(可选,字符串) 用于为
<field>
创建网格的聚合。grid_agg
的有效值-
geotile
(默认) -
geotile_grid
聚合。 -
geohex
-
geohex_grid
聚合。
-
-
grid_precision
-
(可选,整数)
grid_agg
中单元格的精度级别。接受0
-8
。默认为8
。如果0
,则结果不包含aggs
图层。geotile
的网格精度对于
grid_agg
为geotile
的情况,您可以使用aggs
图层中的单元格作为较低缩放级别的瓦片。grid_precision
表示可通过这些单元格获得的额外缩放级别。最终精度计算如下<zoom> + grid_precision
例如,如果
<zoom>
为7
且grid_precision
为8
,则geotile_grid
聚合将使用15
的精度。最大最终精度为29
。grid_precision
还确定网格的单元格数量,如下所示(2^grid_precision) x (2^grid_precision)
例如,值
8
将瓦片划分为 256 x 256 个单元格的网格。aggs
图层仅包含具有匹配数据的单元格的要素。geohex
的网格精度对于
grid_agg
为geohex
的情况,Elasticsearch 使用<zoom>
和grid_precision
计算最终精度,如下所示<zoom> + grid_precision
此精度确定
geohex
聚合产生的六边形单元的 H3 分辨率。下表映射了每个精度的 H3 分辨率。例如,如果
<zoom>
为3
且grid_precision
为3
,则精度为6
。在精度为6
时,六边形单元的 H3 分辨率为2
。如果<zoom>
为3
且grid_precision
为4
,则精度为7
。在精度为7
时,六边形单元的 H3 分辨率为3
。精度 唯一瓦片箱 H3 分辨率 唯一六边形箱 比例 1
4
0
122
30.5
2
16
0
122
7.625
3
64
1
842
13.15625
4
256
1
842
3.2890625
5
1024
2
5882
5.744140625
6
4096
2
5882
1.436035156
7
16384
3
41162
2.512329102
8
65536
3
41162
0.6280822754
9
262144
4
288122
1.099098206
10
1048576
4
288122
0.2747745514
11
4194304
5
2016842
0.4808526039
12
16777216
6
14117882
0.8414913416
13
67108864
6
14117882
0.2103728354
14
268435456
7
98825162
0.3681524172
15
1073741824
8
691776122
0.644266719
16
4294967296
8
691776122
0.1610666797
17
17179869184
9
4842432842
0.2818666889
18
68719476736
10
33897029882
0.4932667053
19
274877906944
11
237279209162
0.8632167343
20
1099511627776
11
237279209162
0.2158041836
21
4398046511104
12
1660954464122
0.3776573213
22
17592186044416
13
11626681248842
0.6609003122
23
70368744177664
13
11626681248842
0.165225078
24
281474976710656
14
81386768741882
0.2891438866
25
1125899906842620
15
569707381193162
0.5060018015
26
4503599627370500
15
569707381193162
0.1265004504
27
18014398509482000
15
569707381193162
0.03162511259
28
72057594037927900
15
569707381193162
0.007906278149
29
288230376151712000
15
569707381193162
0.001976569537
六边形单元在矢量瓦片上并非完美对齐。某些单元格可能与多个矢量瓦片相交。为了计算每个精度的 H3 分辨率,Elasticsearch 将每个分辨率的六边形箱的平均密度与每个缩放级别的瓦片箱的平均密度进行比较。Elasticsearch 使用最接近相应
geotile
密度的 H3 分辨率。 -
grid_type
-
(可选,字符串) 确定
aggs
图层中要素的几何图形类型。在aggs
图层中,每个要素表示网格中的一个单元格。grid_type
的有效值-
grid
(默认) - 每个要素都是单元格几何图形的
Polygon
。对于grid_agg
为geotile
的情况,要素是单元格的边界框。对于grid_agg
为geohex
的情况,要素是六边形单元的边界。 -
point
- 每个要素都是单元格质心的
Point
。 -
centroid
- 每个要素都是单元格内数据的质心的
Point
。对于复杂的几何图形,实际质心可能在单元格之外。在这些情况下,要素将设置为单元格内部最接近质心的点。
-
-
query
- (可选,对象)用于过滤搜索文档的 查询 DSL。
-
runtime_mappings
-
(可选,对象的对象)在搜索请求中定义一个或多个运行时字段。这些字段优先于具有相同名称的映射字段。
runtime_mappings
对象的属性-
<field-name>
-
(必需,对象)运行时字段的配置。键是字段名称。
<field-name>
的属性-
type
-
(必需,字符串)字段类型,可以是以下任何一种:
-
boolean
-
composite
-
date
-
double
-
geo_point
-
ip
-
keyword
-
long
-
lookup
-
-
script
-
(可选,字符串)在查询时执行的 Painless 脚本。该脚本可以访问文档的整个上下文,包括原始的
_source
和任何映射的字段及其值。此脚本必须包含
emit
以返回计算值。例如"script": "emit(doc['@timestamp'].value.dayOfWeekEnum.toString())"
-
-
-
size
- (可选,整数) 要在
hits
图层中返回的最大要素数。接受0
-10000
。默认为10000
。如果0
,则结果不包含hits
图层。 -
sort
-
(可选,排序对象的数组)对
hits
层中的特征进行排序。默认情况下,API 会为每个特征计算一个边界框。它根据此框的对角线长度对特征进行排序,从最长到最短。
-
track_total_hits
-
(可选,整数或布尔值) 准确计数与查询匹配的命中数。默认为
10000
。如果
true
,则以牺牲一些性能为代价返回确切的命中数。如果false
,则响应不包括与查询匹配的命中总数。 -
with_labels
-
(可选,布尔值) 如果为 true,则 hits 和 aggs 图层将包含额外的点要素,表示原始要素的建议标签位置。
原始特征的所有属性也将被复制到新的标签特征中。此外,新的特征将使用标签
_mvt_label_position
来区分。
响应
编辑返回的矢量瓦片包含以下数据:
-
hits
-
(对象)包含
geo_bounding_box
查询结果的图层。hits
的属性-
extent
- (整数)瓦片一侧的大小,以像素为单位。矢量瓦片是等边正方形。
-
version
- (整数)Mapbox 矢量瓦片规范的主要版本号。
-
features
-
(对象数组)特征数组。包含与
geo_bounding_box
查询匹配的每个<field>
值的特征。features
对象的属性-
geometry
-
(对象)特征的几何形状。
geometry
的属性-
type
-
(字符串)特征的几何类型。有效值为:
-
UNKNOWN
-
POINT
-
LINESTRING
-
POLYGON
-
-
coordinates
- (整数数组或数组的数组)特征的瓦片坐标。
-
-
properties
-
(对象)特征的属性。
properties
的属性-
_id
- (字符串)特征的文档的
_id
。 -
_index
- (字符串)特征文档的索引名称。
-
<field>
- 字段值。仅为
fields
参数中的字段返回。
-
-
type
-
(整数)特征几何类型的标识符。值为:
-
1
(POINT
) -
2
(LINESTRING
) -
3
(POLYGON
)
-
-
-
-
aggs
-
(对象)包含
grid_agg
聚合及其子聚合结果的图层。aggs
的属性-
extent
- (整数)瓦片一侧的大小,以像素为单位。矢量瓦片是等边正方形。
-
version
- (整数)Mapbox 矢量瓦片规范的主要版本号。
-
features
-
(对象数组)特征数组。包含网格的每个单元格的特征。
features
对象的属性-
geometry
-
(对象)特征的几何形状。
geometry
的属性-
type
-
(字符串)特征的几何类型。有效值为:
-
UNKNOWN
-
POINT
-
LINESTRING
-
POLYGON
-
-
coordinates
- (整数数组或数组的数组)特征的瓦片坐标。
-
-
properties
-
(对象)特征的属性。
properties
的属性-
_count
- (长整型)单元格的文档计数。
-
_key
- (字符串)单元格的桶键,格式为
<zoom>/<x>/<y>
。 -
<sub-aggregation>.value
- 单元格的子聚合结果。仅为
aggs
参数中的子聚合返回。
-
-
type
-
(整数)特征几何类型的标识符。值为:
-
1
(POINT
) -
2
(LINESTRING
) -
3
(POLYGON
)
-
-
-
-
meta
-
(对象)包含请求元数据的图层。
meta
的属性-
extent
- (整数)瓦片一侧的大小,以像素为单位。矢量瓦片是等边正方形。
-
version
- (整数)Mapbox 矢量瓦片规范的主要版本号。
-
features
-
(对象数组)包含边界框的特征。
features
对象的属性-
geometry
-
(对象)特征的几何形状。
geometry
的属性-
type
-
(字符串)特征的几何类型。有效值为:
-
UNKNOWN
-
POINT
-
LINESTRING
-
POLYGON
-
-
coordinates
- (整数数组或数组的数组)特征的瓦片坐标。
-
-
properties
-
(对象)特征的属性。
properties
的属性-
_shards.failed
- (整数)执行搜索失败的分片数。请参阅搜索 API 的
shards
响应属性。 -
_shards.skipped
- (整数)跳过搜索的分片数。请参阅搜索 API 的
shards
响应属性。 -
_shards.successful
- (整数)成功执行搜索的分片数。请参阅搜索 API 的
shards
响应属性。 -
_shards.total
- (整数)需要查询的分片总数,包括未分配的分片。请参阅搜索 API 的
shards
响应属性。 -
aggregations._count.avg
- (浮点数)
aggs
图层中特征的_count
值的平均值。 -
aggregations._count.count
- (整数)
aggs
图层中特征的唯一_count
值的数量。 -
aggregations._count.max
- (浮点数)
aggs
图层中特征的最大_count
值。 -
aggregations._count.min
- (浮点数)
aggs
图层中特征的最小_count
值。 -
aggregations._count.sum
- (浮点数)
aggs
图层中特征的_count
值之和。 -
aggregations.<sub-aggregation>.avg
- (浮点数)子聚合结果的平均值。
-
aggregations.<agg_name>.count
- (整数)来自子聚合结果的唯一值的数量。
-
aggregations.<agg_name>.max
- (浮点数)来自子聚合结果的最大值。
-
aggregations.<agg_name>.min
- (浮点数)来自子聚合结果的最小值。
-
aggregations.<agg_name>.sum
- (浮点数)子聚合结果的值之和。
-
hits.max_score
- (浮点数)搜索命中结果的最高文档
_score
。 -
hits.total.relation
-
(字符串)指示
hits.total.value
是精确值还是下限值。可能的值为:-
eq
- 精确
-
gte
- 下限
-
-
hits.total.value
- (整数)搜索命中的总数。
-
timed_out
- (布尔值)如果为
true
,则搜索在完成前超时。结果可能不完整或为空。 -
took
- (整数)Elasticsearch 运行搜索所花费的毫秒数。请参阅搜索 API 的
took
响应属性。
-
-
type
-
(整数)特征几何类型的标识符。值为:
-
1
(POINT
) -
2
(LINESTRING
) -
3
(POLYGON
)
-
-
-
示例
编辑以下请求创建 museum
索引并添加几个地理空间 location
值。
resp = client.indices.create( index="museums", mappings={ "properties": { "location": { "type": "geo_point" }, "name": { "type": "keyword" }, "price": { "type": "long" }, "included": { "type": "boolean" } } }, ) print(resp) resp1 = client.bulk( index="museums", refresh=True, operations=[ { "index": { "_id": "1" } }, { "location": "POINT (4.912350 52.374081)", "name": "NEMO Science Museum", "price": 1750, "included": True }, { "index": { "_id": "2" } }, { "location": "POINT (4.901618 52.369219)", "name": "Museum Het Rembrandthuis", "price": 1500, "included": False }, { "index": { "_id": "3" } }, { "location": "POINT (4.914722 52.371667)", "name": "Nederlands Scheepvaartmuseum", "price": 1650, "included": True }, { "index": { "_id": "4" } }, { "location": "POINT (4.914722 52.371667)", "name": "Amsterdam Centre for Architecture", "price": 0, "included": True } ], ) print(resp1)
response = client.indices.create( index: 'museums', body: { mappings: { properties: { location: { type: 'geo_point' }, name: { type: 'keyword' }, price: { type: 'long' }, included: { type: 'boolean' } } } } ) puts response response = client.bulk( index: 'museums', refresh: true, body: [ { index: { _id: '1' } }, { location: 'POINT (4.912350 52.374081)', name: 'NEMO Science Museum', price: 1750, included: true }, { index: { _id: '2' } }, { location: 'POINT (4.901618 52.369219)', name: 'Museum Het Rembrandthuis', price: 1500, included: false }, { index: { _id: '3' } }, { location: 'POINT (4.914722 52.371667)', name: 'Nederlands Scheepvaartmuseum', price: 1650, included: true }, { index: { _id: '4' } }, { location: 'POINT (4.914722 52.371667)', name: 'Amsterdam Centre for Architecture', price: 0, included: true } ] ) puts response
const response = await client.indices.create({ index: "museums", mappings: { properties: { location: { type: "geo_point", }, name: { type: "keyword", }, price: { type: "long", }, included: { type: "boolean", }, }, }, }); console.log(response); const response1 = await client.bulk({ index: "museums", refresh: "true", operations: [ { index: { _id: "1", }, }, { location: "POINT (4.912350 52.374081)", name: "NEMO Science Museum", price: 1750, included: true, }, { index: { _id: "2", }, }, { location: "POINT (4.901618 52.369219)", name: "Museum Het Rembrandthuis", price: 1500, included: false, }, { index: { _id: "3", }, }, { location: "POINT (4.914722 52.371667)", name: "Nederlands Scheepvaartmuseum", price: 1650, included: true, }, { index: { _id: "4", }, }, { location: "POINT (4.914722 52.371667)", name: "Amsterdam Centre for Architecture", price: 0, included: true, }, ], }); console.log(response1);
PUT museums { "mappings": { "properties": { "location": { "type": "geo_point" }, "name": { "type": "keyword" }, "price": { "type": "long" }, "included": { "type": "boolean" } } } } POST museums/_bulk?refresh { "index": { "_id": "1" } } { "location": "POINT (4.912350 52.374081)", "name": "NEMO Science Museum", "price": 1750, "included": true } { "index": { "_id": "2" } } { "location": "POINT (4.901618 52.369219)", "name": "Museum Het Rembrandthuis", "price": 1500, "included": false } { "index": { "_id": "3" } } { "location": "POINT (4.914722 52.371667)", "name": "Nederlands Scheepvaartmuseum", "price":1650, "included": true } { "index": { "_id": "4" } } { "location": "POINT (4.914722 52.371667)", "name": "Amsterdam Centre for Architecture", "price":0, "included": true }
以下请求在索引中搜索与 13/4207/2692
矢量瓦片相交的 location
值。
resp = client.search_mvt( index="museums", field="location", zoom="13", x="4207", y="2692", grid_agg="geotile", grid_precision=2, fields=[ "name", "price" ], query={ "term": { "included": True } }, aggs={ "min_price": { "min": { "field": "price" } }, "max_price": { "max": { "field": "price" } }, "avg_price": { "avg": { "field": "price" } } }, ) print(resp)
const response = await client.searchMvt({ index: "museums", field: "location", zoom: 13, x: 4207, y: 2692, grid_agg: "geotile", grid_precision: 2, fields: ["name", "price"], query: { term: { included: true, }, }, aggs: { min_price: { min: { field: "price", }, }, max_price: { max: { field: "price", }, }, avg_price: { avg: { field: "price", }, }, }, }); console.log(response);
GET museums/_mvt/location/13/4207/2692 { "grid_agg": "geotile", "grid_precision": 2, "fields": [ "name", "price" ], "query": { "term": { "included": true } }, "aggs": { "min_price": { "min": { "field": "price" } }, "max_price": { "max": { "field": "price" } }, "avg_price": { "avg": { "field": "price" } } } }
API 以二进制矢量瓦片的形式返回结果。当解码为 JSON 时,该瓦片包含以下数据:
{ "hits": { "extent": 4096, "version": 2, "features": [ { "geometry": { "type": "Point", "coordinates": [ 3208, 3864 ] }, "properties": { "_id": "1", "_index": "museums", "name": "NEMO Science Museum", "price": 1750 }, "type": 1 }, { "geometry": { "type": "Point", "coordinates": [ 3429, 3496 ] }, "properties": { "_id": "3", "_index": "museums", "name": "Nederlands Scheepvaartmuseum", "price": 1650 }, "type": 1 }, { "geometry": { "type": "Point", "coordinates": [ 3429, 3496 ] }, "properties": { "_id": "4", "_index": "museums", "name": "Amsterdam Centre for Architecture", "price": 0 }, "type": 1 } ] }, "aggs": { "extent": 4096, "version": 2, "features": [ { "geometry": { "type": "Polygon", "coordinates": [ [ [ 3072, 3072 ], [ 4096, 3072 ], [ 4096, 4096 ], [ 3072, 4096 ], [ 3072, 3072 ] ] ] }, "properties": { "_count": 3, "max_price.value": 1750.0, "min_price.value": 0.0, "avg_price.value": 1133.3333333333333 }, "type": 3 } ] }, "meta": { "extent": 4096, "version": 2, "features": [ { "geometry": { "type": "Polygon", "coordinates": [ [ [ 0, 0 ], [ 4096, 0 ], [ 4096, 4096 ], [ 0, 4096 ], [ 0, 0 ] ] ] }, "properties": { "_shards.failed": 0, "_shards.skipped": 0, "_shards.successful": 1, "_shards.total": 1, "aggregations._count.avg": 3.0, "aggregations._count.count": 1, "aggregations._count.max": 3.0, "aggregations._count.min": 3.0, "aggregations._count.sum": 3.0, "aggregations.avg_price.avg": 1133.3333333333333, "aggregations.avg_price.count": 1, "aggregations.avg_price.max": 1133.3333333333333, "aggregations.avg_price.min": 1133.3333333333333, "aggregations.avg_price.sum": 1133.3333333333333, "aggregations.max_price.avg": 1750.0, "aggregations.max_price.count": 1, "aggregations.max_price.max": 1750.0, "aggregations.max_price.min": 1750.0, "aggregations.max_price.sum": 1750.0, "aggregations.min_price.avg": 0.0, "aggregations.min_price.count": 1, "aggregations.min_price.max": 0.0, "aggregations.min_price.min": 0.0, "aggregations.min_price.sum": 0.0, "hits.max_score": 0.0, "hits.total.relation": "eq", "hits.total.value": 3, "timed_out": false, "took": 2 }, "type": 3 } ] } }