Geohash Cell Query

edit

The geohash_cell query provides access to a hierarchy of geohashes. By defining a geohash cell, only geopoints within this cell will match this filter.

To get this filter working 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 geopoint field that’s going to be filtered by setting the geohash_prefix option:

{
    "mappings" : {
        "location": {
            "properties": {
                "pin": {
                    "type": "geo_point",
                    "geohash": true,
                    "geohash_prefix": true,
                    "geohash_precision": 10
                }
            }
        }
    }
}

The geohash cell can be 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 set up. 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 neighbors option of the filter offers the possibility to filter cells next to the given cell.

{
    "bool" : {
        "must" : {
            "match_all" : {}
        },
        "filter" : {
            "geohash_cell": {
                "pin": {
                    "lat": 13.4080,
                    "lon": 52.5186
                },
                "precision": 3,
                "neighbors": true
            }
        }
    }
}