756 lines
19 KiB
Plaintext
756 lines
19 KiB
Plaintext
[[search-vector-tile-api]]
|
|
=== Vector tile search API
|
|
++++
|
|
<titleabbrev>Vector tile search</titleabbrev>
|
|
++++
|
|
|
|
experimental::[]
|
|
|
|
Searches a vector tile for geospatial values. Returns results as a binary
|
|
https://docs.mapbox.com/vector-tiles/specification[Mapbox vector tile].
|
|
|
|
////
|
|
[source,console]
|
|
----
|
|
PUT my-index
|
|
{
|
|
"mappings": {
|
|
"properties": {
|
|
"my-geo-field": {
|
|
"type": "geo_point"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
PUT my-index/_doc/0?refresh
|
|
{
|
|
"my-geo-field": "37.3864953,-122.0863176"
|
|
}
|
|
----
|
|
////
|
|
|
|
[source,console]
|
|
----
|
|
GET my-index/_mvt/my-geo-field/15/5271/12710
|
|
----
|
|
// TEST[continued]
|
|
|
|
[[search-vector-tile-api-request]]
|
|
==== {api-request-title}
|
|
|
|
`GET <target>/_mvt/<field>/<zoom>/<x>/<y>`
|
|
|
|
`POST <target>/_mvt/<field>/<zoom>/<x>/<y>`
|
|
|
|
[[search-vector-tile-api-prereqs]]
|
|
==== {api-prereq-title}
|
|
|
|
* Before using this API, you should be familiar with the
|
|
https://github.com/mapbox/vector-tile-spec[Mapbox vector tile specification].
|
|
|
|
* If the {es} {security-features} are enabled, you must have the `read`
|
|
<<privileges-list-indices,index privilege>> for the target data stream, index,
|
|
or alias.
|
|
|
|
[[search-vector-tile-api-path-params]]
|
|
==== {api-path-parms-title}
|
|
|
|
`<target>`::
|
|
(Required, string) Comma-separated list of data streams, indices, or aliases to
|
|
search. Supports wildcards (`*`). To search all data streams and indices, omit
|
|
this parameter or use `*` or `_all`.
|
|
|
|
`<field>`::
|
|
(Required, string) Field containing geospatial values to return. Must be a
|
|
<<geo-point,`geo_point`>> or <<geo-shape,`geo_shape`>> field. The field must
|
|
have <<doc-values,doc values>> enabled. Cannot be a nested field.
|
|
+
|
|
NOTE: Vector tiles do not natively support geometry collections. For
|
|
`geometrycollection` values in a `geo_shape` field, the API returns a `hits`
|
|
layer feature for each element of the collection. This behavior may change may
|
|
change in a future release.
|
|
|
|
`<zoom>`::
|
|
(Required, integer) Zoom level for the vector tile to search. Accepts `0`-`29`.
|
|
|
|
`<x>`::
|
|
(Required, integer) X coordinate for the vector tile to search.
|
|
|
|
`<y>`::
|
|
(Required, integer) Y coordinate for the vector tile to search.
|
|
|
|
[[search-vector-tile-api-desc]]
|
|
==== {api-description-title}
|
|
|
|
Internally, {es} translates a vector tile search API request into a
|
|
<<search-search,search>> containing:
|
|
|
|
* A <<query-dsl-geo-bounding-box-query,`geo_bounding_box`>> query on the
|
|
`<field>`. The query uses the `<zoom>/<x>/<y>` tile as a bounding box.
|
|
|
|
* A <<search-aggregations-bucket-geotilegrid-aggregation,`geotile_grid`>>
|
|
aggregation on the `<field>`. The aggregation uses the `<zoom>/<x>/<y>` tile as
|
|
a bounding box.
|
|
|
|
* Optionally, a
|
|
<<search-aggregations-metrics-geobounds-aggregation,`geo_bounds`>> aggregation
|
|
on the `<field>`. The search only includes this aggregation if the
|
|
`exact_bounds` parameter is `true`.
|
|
|
|
For example, {es} may translate a vector tile search API request with an
|
|
`exact_bounds` argument of `true` into the following search:
|
|
|
|
[source,console]
|
|
----
|
|
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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
----
|
|
// TEST[continued]
|
|
|
|
The API returns results as a binary
|
|
https://github.com/mapbox/vector-tile-spec[Mapbox vector tile]. Mapbox vector
|
|
tiles are encoded as https://github.com/protocolbuffers/protobuf[Google
|
|
Protobufs (PBF)]. By default, the tile contains three layers:
|
|
|
|
* A `hits` layer containing a feature for each `<field>` value matching the
|
|
`geo_bounding_box` query.
|
|
|
|
* An `aggs` layer containing a feature for each cell of the `geotile_grid`. You
|
|
can use these cells as tiles for lower zoom levels. The layer only contains
|
|
features for cells with matching data.
|
|
|
|
* A `meta` layer containing:
|
|
** A feature containing a bounding box. By default, this is the bounding box of
|
|
the tile.
|
|
** Value ranges for any sub-aggregations on the `geotile_grid`.
|
|
** Metadata for the search.
|
|
|
|
The API only returns features that can display at its zoom level. For example,
|
|
if a polygon feature has no area at its zoom level, the API omits it.
|
|
|
|
The API returns errors as UTF-8 encoded JSON.
|
|
|
|
[[search-vector-tile-api-query-params]]
|
|
==== {api-query-parms-title}
|
|
|
|
IMPORTANT: You can specify several options for this API as either a query
|
|
parameter or request body parameter. If you specify both parameters, the query
|
|
parameter takes precedence.
|
|
|
|
// tag::exact-bounds[]
|
|
`exact_bounds`::
|
|
(Optional, Boolean)
|
|
If `false`, the `meta` layer's feature is the bounding box of the tile. Defaults
|
|
to `false`.
|
|
+
|
|
If `true`, the `meta` layer's feature is a bounding box resulting from a
|
|
<<search-aggregations-metrics-geobounds-aggregation,`geo_bounds`>> aggregation.
|
|
The aggregation runs on `<field>` values that intersect the `<zoom>/<x>/<y>`
|
|
tile with `wrap_longitude` set to `false`. The resulting bounding box may be
|
|
larger than the vector tile.
|
|
// end::exact-bounds[]
|
|
|
|
// tag::extent-param[]
|
|
`extent`::
|
|
(Optional, integer) Size, in pixels, of a side of the tile. Vector tiles are
|
|
square with equal sides. Defaults to `4096`.
|
|
// end::extent-param[]
|
|
|
|
// tag::grid-precision[]
|
|
`grid_precision`::
|
|
(Optional, integer) Additional zoom levels available through the `aggs` layer.
|
|
For example, if `<zoom>` is `7` and `grid_precision` is `8`, you can zoom in up to
|
|
level 15. Accepts `0`-`8`. Defaults to `8`. If `0`, results don't include the
|
|
`aggs` layer.
|
|
+
|
|
This value determines the grid size of the `geotile_grid` as follows:
|
|
+
|
|
`(2^grid_precision) x (2^grid_precision)`
|
|
+
|
|
For example, a value of `8` divides the tile into a grid of 256 x 256 cells. The
|
|
`aggs` layer only contains features for cells with matching data.
|
|
// end::grid-precision[]
|
|
|
|
// tag::grid-type[]
|
|
`grid_type`::
|
|
(Optional, string) Determines the geometry type for features in the `aggs`
|
|
layer. In the `aggs` layer, each feature represents a `geotile_grid` cell.
|
|
Accepts:
|
|
|
|
`grid` (Default):::
|
|
Each feature is a `Polygon` of the cell's bounding box.
|
|
|
|
`point`:::
|
|
Each feature is a `Point` that's the centroid of the cell.
|
|
// end::grid-type[]
|
|
|
|
// tag::size[]
|
|
`size`::
|
|
(Optional, integer) Maximum number of features to return in the `hits` layer.
|
|
Accepts `0`-`10000`. Defaults to `10000`. If `0`, results don't include the
|
|
`hits` layer.
|
|
// end::size[]
|
|
|
|
[role="child_attributes"]
|
|
[[search-vector-tile-api-request-body]]
|
|
==== {api-request-body-title}
|
|
|
|
`aggs`::
|
|
(Optional, <<search-aggregations,aggregation object>>)
|
|
<<run-sub-aggs,Sub-aggregations>> for the `geotile_grid`. Supports the following
|
|
aggregation types:
|
|
+
|
|
* <<search-aggregations-metrics-avg-aggregation,`avg`>>
|
|
* <<search-aggregations-metrics-cardinality-aggregation,`cardinality`>>
|
|
* <<search-aggregations-metrics-max-aggregation,`max`>>
|
|
* <<search-aggregations-metrics-min-aggregation,`min`>>
|
|
* <<search-aggregations-metrics-sum-aggregation,`sum`>>
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=exact-bounds]
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=extent-param]
|
|
|
|
`fields`::
|
|
(Optional, array of strings and objects) Fields to return in the `hits` layer.
|
|
Supports wildcards (`*`).
|
|
+
|
|
This parameter does not support fields with <<array,array values>>. Fields with
|
|
array values may return inconsistent results.
|
|
+
|
|
You can specify fields in the array as a string or object.
|
|
+
|
|
.Properties of `fields` objects
|
|
[%collapsible%open]
|
|
====
|
|
include::search.asciidoc[tag=fields-api-props]
|
|
====
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=grid-precision]
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=grid-type]
|
|
|
|
`query`::
|
|
(Optional, object) <<query-dsl,Query DSL>> used to filter documents for the
|
|
search.
|
|
|
|
include::{es-repo-dir}/search/search.asciidoc[tag=runtime-mappings-def]
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=size]
|
|
|
|
`sort`::
|
|
(Optional, array of <<sort-search-results,sort objects>>) Sorts features in the
|
|
`hits` layer.
|
|
+
|
|
By default, the API calculates a bounding box for each feature. It sorts
|
|
features based on this box's diagonal length, from longest to shortest.
|
|
|
|
[role="child_attributes"]
|
|
[[search-vector-tile-api-response]]
|
|
==== Response
|
|
|
|
Returned vector tiles contain the following data:
|
|
|
|
`hits`::
|
|
(object) Layer containing results for the `geo_bounding_box` query.
|
|
+
|
|
.Properties of `hits`
|
|
[%collapsible%open]
|
|
====
|
|
// tag::extent[]
|
|
`extent`::
|
|
(integer) Size, in pixels, of a side of the tile. Vector tiles are square with
|
|
equal sides.
|
|
// end::extent[]
|
|
|
|
// tag::version[]
|
|
`version`::
|
|
(integer) Major version number of the
|
|
https://github.com/mapbox/vector-tile-spec[Mapbox vector tile specification].
|
|
// end::version[]
|
|
|
|
`features`::
|
|
(array of objects) Array of features. Contains a feature for each `<field>`
|
|
value that matches the `geo_bounding_box` query.
|
|
+
|
|
.Properties of `features` objects
|
|
[%collapsible%open]
|
|
=====
|
|
// tag::geometry[]
|
|
`geometry`::
|
|
(object) Geometry for the feature.
|
|
+
|
|
.Properties of `geometry`
|
|
[%collapsible%open]
|
|
======
|
|
`type`::
|
|
(string) Geometry type for the feature. Valid values are:
|
|
|
|
* `UNKNOWN`
|
|
* `POINT`
|
|
* `LINESTRING`
|
|
* `POLYGON`
|
|
|
|
`coordinates`::
|
|
(array of integers or array of arrays) Tile coordinates for the feature.
|
|
======
|
|
// end::geometry[]
|
|
|
|
`properties`::
|
|
(object) Properties for the feature.
|
|
+
|
|
.Properties of `properties`
|
|
[%collapsible%open]
|
|
======
|
|
`_id`::
|
|
(string) Document `_id` for the feature's document.
|
|
|
|
`<field>`::
|
|
Field value. Only returned for fields in the `fields` parameter.
|
|
======
|
|
// tag::feature-id[]
|
|
`id`::
|
|
(integer) Unique ID for the feature within the layer.
|
|
// end::feature-id[]
|
|
|
|
// tag::feature-type[]
|
|
`type`::
|
|
(integer) Identifier for the feature's geometry type. Values are:
|
|
+
|
|
* `1` (`POINT`)
|
|
* `2` (`LINESTRING`)
|
|
* `3` (`POLYGON`)
|
|
// end::feature-type[]
|
|
=====
|
|
====
|
|
|
|
`aggs`::
|
|
(object) Layer containing results for the `geotile_grid` aggregation and its
|
|
sub-aggregations.
|
|
+
|
|
.Properties of `aggs`
|
|
[%collapsible%open]
|
|
====
|
|
include::search-vector-tile-api.asciidoc[tag=extent]
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=version]
|
|
|
|
`features`::
|
|
(array of objects) Array of features. Contains a feature for each cell of the
|
|
`geotile_grid`.
|
|
+
|
|
.Properties of `features` objects
|
|
[%collapsible%open]
|
|
=====
|
|
include::search-vector-tile-api.asciidoc[tag=geometry]
|
|
|
|
`properties`::
|
|
(object) Properties for the feature.
|
|
+
|
|
.Properties of `properties`
|
|
[%collapsible%open]
|
|
======
|
|
`_count`::
|
|
(string) Count of the cell's documents.
|
|
|
|
`<sub-aggregation>.value`::
|
|
Sub-aggregation results for the cell. Only returned for sub-aggregations in the
|
|
`aggs` parameter.
|
|
======
|
|
include::search-vector-tile-api.asciidoc[tag=feature-id]
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=feature-type]
|
|
=====
|
|
====
|
|
|
|
`meta`::
|
|
(object) Layer containing metadata for the request.
|
|
+
|
|
.Properties of `meta`
|
|
[%collapsible%open]
|
|
====
|
|
include::search-vector-tile-api.asciidoc[tag=extent]
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=version]
|
|
|
|
`features`::
|
|
(array of objects) Contains a feature for a bounding box.
|
|
+
|
|
.Properties of `features` objects
|
|
[%collapsible%open]
|
|
=====
|
|
include::search-vector-tile-api.asciidoc[tag=geometry]
|
|
|
|
`properties`::
|
|
(object) Properties for the feature.
|
|
+
|
|
.Properties of `properties`
|
|
[%collapsible%open]
|
|
======
|
|
`_shards.failed`::
|
|
(integer) Number of shards that failed to execute the search. See the search
|
|
API's <<search-api-shards,`shards`>> response property.
|
|
|
|
`_shards.skipped`::
|
|
(integer) Number of shards that skipped the search. See the search
|
|
API's <<search-api-shards,`shards`>> response property.
|
|
|
|
`_shards.successful`::
|
|
(integer) Number of shards that executed the search successfully. See the
|
|
search API's <<search-api-shards,`shards`>> response property.
|
|
|
|
`_shards.total`::
|
|
(integer) Total number of shards that required querying, including unallocated
|
|
shards. See the search API's <<search-api-shards,`shards`>> response property.
|
|
|
|
`aggregations._count.avg`::
|
|
(float) Average `_count` value for features in the `aggs` layer.
|
|
|
|
`aggregations._count.count`::
|
|
(integer) Number of unique `_count` values for features in the `aggs` layer.
|
|
|
|
`aggregations._count.max`::
|
|
(float) Largest `_count` value for features in the `aggs` layer.
|
|
|
|
`aggregations._count.min`::
|
|
(float) Smallest `_count` value for features in the `aggs` layer.
|
|
|
|
`aggregations._count.sum`::
|
|
(float) Sum of `_count` values for features in the `aggs` layer.
|
|
|
|
`aggregations.<sub-aggregation>.avg`::
|
|
(float) Average value for the sub-aggregation's results.
|
|
|
|
`aggregations.<agg_name>.count`::
|
|
(integer) Number of unique values from the sub-aggregation's results.
|
|
|
|
`aggregations.<agg_name>.max`::
|
|
(float) Largest value from the sub-aggregation's results.
|
|
|
|
`aggregations.<agg_name>.min`::
|
|
(float) Smallest value from the sub-aggregation's results.
|
|
|
|
`aggregations.<agg_name>.sum`::
|
|
(float) Sum of values for the sub-aggregation's results.
|
|
|
|
`hits.max_score`::
|
|
(float) Highest document `_score` for the search's hits.
|
|
|
|
`hits.total.relation`::
|
|
(string) Indicates whether `hits.total.value` is accurate or a lower bound.
|
|
Possible values are:
|
|
|
|
`eq`::: Accurate
|
|
|
|
`gte`::: Lower bound
|
|
|
|
`hits.total.value`::
|
|
(integer) Total number of hits for the search.
|
|
|
|
`timed_out`::
|
|
(Boolean) If `true`, the search timed out before completion. Results may be
|
|
partial or empty.
|
|
|
|
`took`::
|
|
(integer) Milliseconds it took {es} to run the search. See the search API's
|
|
<<search-api-took,`took`>> response property.
|
|
======
|
|
include::search-vector-tile-api.asciidoc[tag=feature-id]
|
|
|
|
include::search-vector-tile-api.asciidoc[tag=feature-type]
|
|
=====
|
|
====
|
|
|
|
[[search-vector-tile-api-api-example]]
|
|
==== {api-examples-title}
|
|
|
|
The following requests create the `museum` index and add several geospatial
|
|
`location` values.
|
|
|
|
[source,console]
|
|
----
|
|
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": "52.374081,4.912350", "name": "NEMO Science Museum", "price": 1750, "included": true }
|
|
{ "index": { "_id": "2" } }
|
|
{ "location": "52.369219,4.901618", "name": "Museum Het Rembrandthuis", "price": 1500, "included": false }
|
|
{ "index": { "_id": "3" } }
|
|
{ "location": "52.371667,4.914722", "name": "Nederlands Scheepvaartmuseum", "price":1650, "included": true }
|
|
{ "index": { "_id": "4" } }
|
|
{ "location": "52.371667,4.914722", "name": "Amsterdam Centre for Architecture", "price":0, "included": true }
|
|
----
|
|
|
|
The following request searches the index for `location` values that intersect
|
|
the `13/4207/2692` vector tile.
|
|
|
|
[source,console]
|
|
----
|
|
GET museums/_mvt/location/13/4207/2692
|
|
{
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
----
|
|
// TEST[continued]
|
|
|
|
The API returns results as a binary vector tile. When decoded into JSON, the
|
|
tile contains the following data:
|
|
|
|
[source,js]
|
|
----
|
|
{
|
|
"hits": {
|
|
"extent": 4096,
|
|
"version": 2,
|
|
"features": [
|
|
{
|
|
"geometry": {
|
|
"type": "Point",
|
|
"coordinates": [
|
|
3208,
|
|
3864
|
|
]
|
|
},
|
|
"properties": {
|
|
"_id": "1",
|
|
"name": "NEMO Science Museum",
|
|
"price": 1750
|
|
},
|
|
"id": 0,
|
|
"type": 1
|
|
},
|
|
{
|
|
"geometry": {
|
|
"type": "Point",
|
|
"coordinates": [
|
|
3429,
|
|
3496
|
|
]
|
|
},
|
|
"properties": {
|
|
"_id": "3",
|
|
"name": "Nederlands Scheepvaartmuseum",
|
|
"price": 1650
|
|
},
|
|
"id": 0,
|
|
"type": 1
|
|
},
|
|
{
|
|
"geometry": {
|
|
"type": "Point",
|
|
"coordinates": [
|
|
3429,
|
|
3496
|
|
]
|
|
},
|
|
"properties": {
|
|
"_id": "4",
|
|
"name": "Amsterdam Centre for Architecture",
|
|
"price": 0
|
|
},
|
|
"id": 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
|
|
},
|
|
"id": 0,
|
|
"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
|
|
},
|
|
"id": 0,
|
|
"type": 3
|
|
}
|
|
]
|
|
}
|
|
}
|
|
----
|
|
// NOTCONSOLE
|