geohash_prefix

edit

Geohashes are a form of lat/lon encoding which divides the earth up into a grid. Each cell in this grid is represented by a geohash string. Each cell in turn can be further subdivided into smaller cells which are represented by a longer string. So the longer the geohash, the smaller (and thus more accurate) the cell is.

While the geohash option enables indexing the geohash that corresponds to the lat/lon point, at the specified precision, the geohash_prefix option will also index all the enclosing cells as well.

For instance, a geohash of drm3btev3e86 will index all of the following terms: [ d, dr, drm, drm3, drm3b, drm3bt, drm3bte, drm3btev, drm3btev3, drm3btev3e, drm3btev3e8, drm3btev3e86 ].

The geohash prefixes can be used with the geohash_cell query to find points within a particular geohash, or its neighbours:

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "location": {
          "type": "geo_point",
          "geohash_prefix": true,
          "geohash_precision": 6
        }
      }
    }
  }
}

PUT my_index/my_type/1
{
  "location": {
    "lat": 41.12,
    "lon": -71.34
  }
}

GET my_index/_search?fielddata_fields=location.geohash
{
  "query": {
    "geohash_cell": {
      "location": {
        "lat": 41.02,
        "lon": -71.48
      },
      "precision": 4, 
      "neighbors": true 
    }
  }
}