82 lines
2.8 KiB
Plaintext
82 lines
2.8 KiB
Plaintext
[[query-dsl-geohash-cell-query]]
|
|
=== Geohash Cell Query
|
|
|
|
The `geohash_cell` query provides access to a hierarchy of geohashes.
|
|
By defining a geohash cell, only <<geo-point,geopoints>>
|
|
within this cell will match this filter.
|
|
|
|
To get this filter work all prefixes of a geohash need to be indexed. In
|
|
example a geohash `u30` needs to be decomposed into three terms: `u30`,
|
|
`u3` and `u`. This decomposition must be enabled in the mapping of the
|
|
<<geo-point,geopoint>> field that's going to be filtered by
|
|
setting the `geohash_prefix` option:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
PUT /my_index
|
|
{
|
|
"mappings" : {
|
|
"location": {
|
|
"properties": {
|
|
"pin": {
|
|
"type": "geo_point",
|
|
"geohash": true,
|
|
"geohash_prefix": true,
|
|
"geohash_precision": 10
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
// CONSOLE
|
|
// TEST[warning:geo_point geohash parameter is deprecated and will be removed in the next major release]
|
|
// TEST[warning:geo_point geohash_precision parameter is deprecated and will be removed in the next major release]
|
|
// TEST[warning:geo_point geohash_prefix parameter is deprecated and will be removed in the next major release]
|
|
|
|
The geohash cell can defined by all formats of `geo_points`. If such a cell is
|
|
defined by a latitude and longitude pair the size of the cell needs to be
|
|
setup. This can be done by the `precision` parameter of the filter. This
|
|
parameter can be set to an integer value which sets the length of the geohash
|
|
prefix. Instead of setting a geohash length directly it is also possible to
|
|
define the precision as distance, in example `"precision": "50m"`. (See
|
|
<<distance-units>>.)
|
|
|
|
The `neighbor` option of the filter offers the possibility to filter cells
|
|
next to the given cell.
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
GET /_search
|
|
{
|
|
"query": {
|
|
"bool" : {
|
|
"must" : {
|
|
"match_all" : {}
|
|
},
|
|
"filter" : {
|
|
"geohash_cell": {
|
|
"pin": {
|
|
"lat": 13.4080,
|
|
"lon": 52.5186
|
|
},
|
|
"precision": 3,
|
|
"neighbors": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
// CONSOLE
|
|
// TEST[continued]
|
|
|
|
[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.
|