Geohash Cell Filter

edit

The geohash_cell filter 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 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 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 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.

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

Caching

edit

The result of the filter is not cached by default. The _cache parameter can be set to true to turn caching on. By default the filter uses the resulting geohash cells as a cache key. This can be changed by using the _cache_key option.