Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Geo Distance Queries in Elasticsearch

Introduction

Geo Distance Queries are a powerful feature in Elasticsearch that allow you to find documents within a certain distance from a specific point. They are particularly useful for applications that deal with location-based data, such as finding nearby restaurants, stores, or any other point of interest.

Prerequisites

To follow along with this tutorial, you will need:

  • Basic understanding of Elasticsearch
  • Elasticsearch installed and running
  • Some data with geo-coordinates indexed in Elasticsearch

Setting Up Geo-Coordinates

Before you can perform geo distance queries, you need to index documents with geo-coordinates. Elasticsearch provides a special data type called geo_point for this purpose.

Example mapping with a geo_point field:

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

Indexing Documents

Let's index some documents with geo-coordinates:

Example documents:

POST /my_index/_doc/1
{
  "name": "Central Park",
  "location": {
    "lat": 40.785091,
    "lon": -73.968285
  }
}
POST /my_index/_doc/2
{
  "name": "Times Square",
  "location": {
    "lat": 40.758896,
    "lon": -73.985130
  }
}

Performing a Geo Distance Query

To find documents within a certain distance from a specific point, you can use the geo_distance query. Here's an example:

Find documents within 2km of Times Square:

GET /my_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "geo_distance": {
          "distance": "2km",
          "location": {
            "lat": 40.758896,
            "lon": -73.985130
          }
        }
      }
    }
  }
}

Expected output:

{
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": null,
    "hits": [
      {
        "_index": "my_index",
        "_id": "2",
        "_score": null,
        "_source": {
          "name": "Times Square",
          "location": {
            "lat": 40.758896,
            "lon": -73.985130
          }
        }
      }
    ]
  }
}

Advanced Geo Distance Queries

Elasticsearch also supports more advanced geo distance queries. For example, you can specify the distance in different units such as miles, meters, or even nautical miles:

Find documents within 1 mile of Times Square:

GET /my_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "geo_distance": {
          "distance": "1mi",
          "location": {
            "lat": 40.758896,
            "lon": -73.985130
          }
        }
      }
    }
  }
}

Conclusion

Geo Distance Queries in Elasticsearch are a powerful tool for working with location-based data. By using the geo_distance query, you can easily find documents within a specified distance from a given point. This tutorial covered the basics of setting up geo-coordinates, indexing documents, and performing geo distance queries.