156 lines
3.1 KiB
Plaintext
156 lines
3.1 KiB
Plaintext
[[query-dsl-geo-polygon-query]]
|
|
=== Geo-polygon query
|
|
++++
|
|
<titleabbrev>Geo-polygon</titleabbrev>
|
|
++++
|
|
|
|
A query returning hits that only fall within a polygon of
|
|
points. Here is an example:
|
|
|
|
[source,console]
|
|
--------------------------------------------------
|
|
GET /_search
|
|
{
|
|
"query": {
|
|
"bool": {
|
|
"must": {
|
|
"match_all": {}
|
|
},
|
|
"filter": {
|
|
"geo_polygon": {
|
|
"person.location": {
|
|
"points": [
|
|
{ "lat": 40, "lon": -70 },
|
|
{ "lat": 30, "lon": -80 },
|
|
{ "lat": 20, "lon": -90 }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
|
|
[float]
|
|
==== Query Options
|
|
|
|
[cols="<,<",options="header",]
|
|
|=======================================================================
|
|
|Option |Description
|
|
|`_name` |Optional name field to identify the filter
|
|
|
|
|`validation_method` |Set to `IGNORE_MALFORMED` to accept geo points with
|
|
invalid latitude or longitude, `COERCE` to try and infer correct latitude
|
|
or longitude, or `STRICT` (default is `STRICT`).
|
|
|=======================================================================
|
|
|
|
[float]
|
|
==== Allowed Formats
|
|
|
|
[float]
|
|
===== Lat Long as Array
|
|
|
|
Format as `[lon, lat]`
|
|
|
|
Note: the order of lon/lat here must
|
|
conform with http://geojson.org/[GeoJSON].
|
|
|
|
[source,console]
|
|
--------------------------------------------------
|
|
GET /_search
|
|
{
|
|
"query": {
|
|
"bool": {
|
|
"must": {
|
|
"match_all": {}
|
|
},
|
|
"filter": {
|
|
"geo_polygon": {
|
|
"person.location": {
|
|
"points": [
|
|
[ -70, 40 ],
|
|
[ -80, 30 ],
|
|
[ -90, 20 ]
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
|
|
[float]
|
|
===== Lat Lon as String
|
|
|
|
Format in `lat,lon`.
|
|
|
|
[source,console]
|
|
--------------------------------------------------
|
|
GET /_search
|
|
{
|
|
"query": {
|
|
"bool": {
|
|
"must": {
|
|
"match_all": {}
|
|
},
|
|
"filter": {
|
|
"geo_polygon": {
|
|
"person.location": {
|
|
"points": [
|
|
"40, -70",
|
|
"30, -80",
|
|
"20, -90"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
|
|
[float]
|
|
===== Geohash
|
|
|
|
[source,console]
|
|
--------------------------------------------------
|
|
GET /_search
|
|
{
|
|
"query": {
|
|
"bool": {
|
|
"must": {
|
|
"match_all": {}
|
|
},
|
|
"filter": {
|
|
"geo_polygon": {
|
|
"person.location": {
|
|
"points": [
|
|
"drn5x1g8cu2y",
|
|
"30, -80",
|
|
"20, -90"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
|
|
[float]
|
|
==== geo_point Type
|
|
|
|
The query *requires* the <<geo-point,`geo_point`>> type to be set on the
|
|
relevant field.
|
|
|
|
[float]
|
|
==== Ignore Unmapped
|
|
|
|
When set to `true` the `ignore_unmapped` option will ignore an unmapped field
|
|
and will not match any documents for this query. This can be useful when
|
|
querying multiple indexes which might have different mappings. When set to
|
|
`false` (the default value) the query will throw an exception if the field
|
|
is not mapped.
|