Elasticsearch Mastering GeoPoint Data Types in Elasticsearch

By Opster Team

Updated: Nov 5, 2023

| 2 min read

Quick links

Overview

Elasticsearch, a robust search and analytics engine, offers a wide range of data types to cater to diverse data handling needs. One such data type is geo_point, which is specifically designed to index latitude and longitude coordinates. This article delves into the intricacies of the geo_point data type, its use cases, and how to effectively implement it in Elasticsearch. If you want to learn about the error parsing geopoint and how to solve this exception, check out this guide.

The geo_point data type in Elasticsearch is used for indexing geographic location data, such as coordinates (latitude and longitude). This data type is instrumental in executing geospatial queries, including geo-distance, geo-bounding box, geo-polygon, and geo-shape queries. It supports multiple formats for input, including string, array, object, and geohash.

Use Cases of geo_point Data Type

The geo_point data type finds its application in various domains that require location-based data analysis. For instance, it is used in real-time tracking systems, location-based recommendations, geofencing, and spatial data analysis. It can also be used to visualize geographical data distribution using Kibana, Elasticsearch’s data visualization plugin.

Implementing geo_point Data Type in Elasticsearch

To use the geo_point data type, you need to define it in your index mapping. Here’s an example of how to define a geo_point field:

PUT /my_index
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      }
    }
  }
}

In this example, ‘location’ is a geo_point field. Once the mapping is defined, you can index documents containing geo_point data. Here’s an example of how to index a document with geo_point data:

PUT /my_index/_doc/1
{
  "text": "Geo-point as an object",
  "location": { 
    "lat": 41.12,
    "lon": -71.34
  }
}

In this example, the ‘location’ field is defined as an object with ‘lat’ and ‘lon’ properties.

Executing Geospatial Queries

Once the geo_point data is indexed, you can execute various geospatial queries. For instance, you can use the geo-distance query to find documents within a certain distance from a central point. Here’s an example:

GET /my_index/_search
{
  "query": {
    "bool" : {
      "must" : {
        "match_all" : {}
      },
      "filter" : {
        "geo_distance" : {
          "distance" : "200km",
          "location" : {
            "lat" : 40,
            "lon" : -70
          }
        }
      }
    }
  }
}

In this example, the query returns all documents within a 200km radius of the specified location.

Similarly, you can use the geo-bounding box query to find documents within a defined rectangular area. Here’s an example:

GET /my_index/_search
{
  "query": {
    "geo_bounding_box" : {
      "location" : {
        "top_left" : {
          "lat" : 42,
          "lon" : -72
        },
        "bottom_right" : {
          "lat" : 40,
          "lon" : -74
        }
      }
    }
  }
}

In this example, the query returns all documents within the defined bounding box.

Conclusion

In conclusion, the geo_point data type in Elasticsearch is a powerful tool for handling and analyzing geographical data. By understanding its implementation and use cases, you can leverage its capabilities to enhance your data analysis and visualization tasks