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
Запрос
GET <target>/_mvt/<field>/<zoom>/<x>/<y>
POST <target>/_mvt/<field>/<zoom>/<x>/<y>
Предварительные условия
- Перед использованием этого API, ознакомьтесь со спецификацией векторных тайлов Mapbox.
- Если в Elasticsearch включены функции безопасности, у вас должны быть
readправа на индекс для целевого потока данных, индекса или псевдонима. Для поиска в распределённых кластерах, см. Распределённые кластеры.
Параметры пути
-
<target> -
(Обязательно, строка) Список потоков данных, индексов или псевдонимов, разделяемых запятыми, для поиска. Поддерживаются подстановочные знаки (
*). Для поиска по всем потокам данных и индексам, опустите этот параметр или используйте*или_all.Для поиска в удалённом кластере используйте синтаксис
<cluster>:<target>. См. Поиск в нескольких кластерах. -
<field> -
(Обязательно, строка) Поле, содержащее геопространственные значения для возврата. Должно быть полем типа
geo_pointилиgeo_shape. Поле должно иметь включённые doc values. Не может быть вложенным полем.Векторные тайлы не поддерживают наборы геометрий. Для значений
geometrycollectionв полеgeo_shapeAPI возвращает элемент слояhitsдля каждого элемента набора. Это поведение может измениться в будущих версиях. -
<zoom> - (Обязательно, целое число) Уровень детализации (zoom level) векторного тайла для поиска. Принимает значения от
0до29. -
<x> - (Обязательно, целое число) Координата X для векторного тайла для поиска.
-
<y> - (Обязательно, целое число) Координата Y для векторного тайла для поиска.
Описание
Внутренне, Elasticsearch переводит запрос API поиска векторных тайлов в запрос поиска, содержащий:
- Запрос
geo_bounding_boxпо полю<field>. Запрос использует тайл<zoom>/<x>/<y>в качестве прямоугольника. - Агрегацию
geotile_gridилиgeohex_gridпо полю<field>. Параметрgrid_aggопределяет тип агрегации. Агрегация использует тайл<zoom>/<x>/<y>в качестве прямоугольника. - Необязательно, агрегацию
geo_boundsпо полю<field>. Поиск включает эту агрегацию только если параметрexact_boundsравенtrue. - Если необязательный параметр
with_labelsимеет значение true, внутренний поиск включает динамическое поле runtime, которое вызывает функциюgetLabelPositionзначения геометрии doc value. Это позволяет генерировать новые точки с предполагаемыми метками геометрии, так что, например, многоугольники будут иметь только одну метку.
Например, Elasticsearch может перевести запрос API поиска векторного тайла с аргументом grid_agg равным geotile и аргументом exact_bounds равным true в следующий запрос:
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, содержащий элемент для каждого значения<field>, соответствующего запросуgeo_bounding_box. - Слой
aggs, содержащий элемент для каждой ячейкиgeotile_gridилиgeohex_grid. Слой содержит только элементы для ячеек с соответствующими данными. -
Слой
meta, содержащий:- Элемент, содержащий прямоугольник. По умолчанию это прямоугольник тайла.
- Диапазоны значений для любых вложенных агрегаций по
geotile_gridилиgeohex_grid. - Метаданные для поиска.
API возвращает только те элементы, которые могут быть отображены на заданном уровне детализации. Например, если у многоугольника нет площади на данном уровне детализации, он пропускается.
API возвращает ошибки в формате UTF-8 закодированного JSON.
Параметры запроса
Вы можете указать несколько параметров для этого API как в параметрах запроса, так и в теле запроса. Если вы указываете оба параметра, имеет приоритет параметр запроса.
-
exact_bounds -
(Необязательно, булево) Если
false, элемент слояmeta— прямоугольник тайла. По умолчаниюfalse.Если
true, элемент слояmeta— прямоугольник, полученный из агрегацииgeo_bounds. Агрегация выполняется на значениях<field>, пересекающих тайл<zoom>/<x>/<y>сwrap_longitudeравнымfalse. Результирующий прямоугольник может быть больше, чем векторный тайл.
-
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_agggeotileвы можете использовать ячейки в слое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_agggeohexElasticsearch использует<zoom>иgrid_precisionдля вычисления конечной точности следующим образом:<zoom> + grid_precisionЭта точность определяет разрешение H3 шестиугольных ячеек, создаваемых агрегацией
geohex. В следующей таблице показано соответствие разрешения H3 для каждой точности.Например, если
<zoom>равно3, аgrid_precisionравно3, точность равна6. При точности6шестиугольные ячейки имеют разрешение H32. Если<zoom>равно3, аgrid_precisionравно4, точность равна7. При точности7шестиугольные ячейки имеют разрешение H33.Точность Уникальные ячейки плитки Разрешение 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 использует разрешение H3, которое наиболее близко к соответствующей плотности
geotile.
-
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, то ответ не включает общее количество совпадений запросу.
-
with_labels -
(Необязательно, булево значение) Если true, слои hits и aggs будут содержать дополнительные точки, представляющие предполагаемые позиции меток для исходных объектов.
- Объекты
PointиMultiPointбудут иметь одну из выбранных точек. - Объекты
PolygonиMultiPolygonбудут иметь одну сгенерированную точку, либо центр, если он находится внутри многоугольника, либо другую точку внутри многоугольника, выбранную из отсортированного дерева треугольников sorted triangle-tree. - Объекты
LineStringтакже предоставят примерно центральную точку, выбранную из дерева треугольников triangle-tree. - Результаты агрегации предоставят одну центральную точку для каждого корзины агрегации.
Все атрибуты из исходных объектов также будут скопированы в новые метки. Кроме того, новые объекты будут различимы по тегу
_mvt_label_position. - Объекты
Тело запроса
-
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агрегации. Агрегация выполняется над<field>значениями, которые пересекают тайл<zoom>/<x>/<y>сwrap_longitudeустановленным наfalse. Полученный прямоугольник ограничивающей рамки может быть больше, чем векторный тайл. -
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уровняgeohexElasticsearch использует<zoom>иgrid_precisionдля вычисления конечной точности следующим образом:<zoom> + grid_precisionЭта точность определяет разрешение H3 шестиугольных ячеек, создаваемых агрегацией
geohex. В следующей таблице показано соответствие разрешения H3 для каждой точности.Например, если
<zoom>равно3, аgrid_precisionравно3, точность равна6. При точности6шестиугольные ячейки имеют разрешение H32. Если<zoom>равно3, аgrid_precisionравно4, точность равна7. При точности7шестиугольные ячейки имеют разрешение H33.Точность Уникальные ячейки тайла Разрешение 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 использует разрешение H3, которое наиболее близко к соответствующей плотности
geotile. -
grid_type
-
(Необязательно, строка) Определяет тип геометрии для объектов в слое
aggs. В слоеaggsкаждый объект представляет собой ячейку в сетке.Допустимые значения для
grid_type-
grid(По умолчанию) - Каждый объект является
Polygonгеометрии ячейки. Дляgrid_agggeotileобъект представляет собой рамку ограничивающей области ячейки. Дляgrid_agggeohexобъект представляет собой границы шестиугольной ячейки. -
point - Каждый объект является
Point, представляющим центр ячейки. -
centroid - Каждый объект представляет собой
Point, являющийся центром данных внутри ячейки. Для сложных геометрий фактический центр может находиться за пределами ячейки. В таких случаях объект устанавливается на ближайшую точку к центру внутри ячейки.
-
-
query - (Необязательно, объект) 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 будут содержать дополнительные точки, представляющие предполагаемые позиции меток для исходных объектов.
- Объекты
PointиMultiPointбудут иметь одну из выбранных точек. - Объекты
PolygonиMultiPolygonбудут иметь одну сгенерированную точку, либо центр, если он находится внутри многоугольника, или другую точку внутри многоугольника, выбранную из отсортированного дерева треугольников. - Объекты
LineStringтакже предоставят приблизительно центральную точку, выбранную из дерева треугольников. - Результаты агрегации предоставят одну центральную точку для каждого агрегированного значения.
Все атрибуты из исходных объектов также будут скопированы в новые метки. Кроме того, новые объекты можно будет отличить по тегу
_mvt_label_position. - Объекты
Ответ
Возвращаемые векторные тайлы содержат следующие данные:
-
hits -
(объект) Слой, содержащий результаты запроса по
geo_bounding_box.Свойства
hits-
extent - (целое число) Размер стороны тайла в пикселях. Векторные тайлы квадратные с равными сторонами.
-
version - (целое число) Номер основной версии спецификации векторных тайлов Mapbox.
-
features -
(массив объектов) Массив объектов. Содержит объект для каждого
<field>значения, соответствующего запросу поgeo_bounding_box.Свойства объектов
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 - (вещественное число) Среднее значение
_countдля объектов в слоеaggs. -
aggregations._count.count - (целое число) Количество уникальных значений
_countдля объектов в слоеaggs. -
aggregations._count.max - (вещественное число) Наибольшее значение
_countдля объектов в слоеaggs. -
aggregations._count.min - (вещественное число) Наименьшее значение
_countдля объектов в слоеaggs. -
aggregations._count.sum - (вещественное число) Сумма значений
_countдля объектов в слоеaggs. -
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 responseconst 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 }Следующий запрос ищет в индексе значения
location, которые пересекают векторный тайл13/4207/2692.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 } ] } } -
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/search-vector-tile-api.html