156 lines
3.7 KiB
Plaintext
156 lines
3.7 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.
|