Bird
Raised Fist0
Elasticsearchquery~5 mins

Geo-point and geo-shape types in Elasticsearch

Choose your learning style10 modes available
Introduction

Geo-point and geo-shape types let you store and search locations and shapes on maps easily.

You want to find places near a specific location, like restaurants near you.
You need to store areas like city boundaries or park shapes.
You want to filter search results by distance or area on a map.
You want to visualize data points or shapes on a map in your app.
Syntax
Elasticsearch
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      },
      "area": {
        "type": "geo_shape"
      }
    }
  }
}

geo_point stores a single point with latitude and longitude.

geo_shape stores complex shapes like polygons or lines.

Examples
A geo-point stored as a string with latitude and longitude.
Elasticsearch
{
  "location": "40.12,-71.34"
}
A geo-point stored as an object with separate latitude and longitude.
Elasticsearch
{
  "location": {
    "lat": 40.12,
    "lon": -71.34
  }
}
A geo-shape storing a polygon with coordinates.
Elasticsearch
{
  "area": {
    "type": "polygon",
    "coordinates": [
      [
        [-71.34, 40.12],
        [-71.35, 40.13],
        [-71.36, 40.12],
        [-71.34, 40.12]
      ]
    ]
  }
}
Sample Program

This example shows how to define geo-point and geo-shape fields in the mapping and how to index a document with a location point and an area polygon.

Elasticsearch
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      },
      "area": {
        "type": "geo_shape"
      }
    }
  }
}

// Example document to index
{
  "location": {
    "lat": 40.12,
    "lon": -71.34
  },
  "area": {
    "type": "polygon",
    "coordinates": [
      [
        [-71.34, 40.12],
        [-71.35, 40.13],
        [-71.36, 40.12],
        [-71.34, 40.12]
      ]
    ]
  }
}
OutputSuccess
Important Notes

Geo-points are best for single locations like a store or event.

Geo-shapes are useful for areas like parks, districts, or routes.

Coordinates in geo-shapes use [longitude, latitude] order, which is different from geo-points.

Summary

Geo-point stores one location with latitude and longitude.

Geo-shape stores complex shapes like polygons or lines.

Use these types to search and filter data by location or area on maps.

Practice

(1/5)
1.

What is the main difference between geo_point and geo_shape types in Elasticsearch?

easy
A. geo_point stores a single location; geo_shape stores complex shapes like polygons.
B. geo_point stores polygons; geo_shape stores single points.
C. geo_point is used for text data; geo_shape is used for numbers.
D. geo_point stores multiple points; geo_shape stores only lines.

Solution

  1. Step 1: Understand geo_point type

    geo_point stores a single geographic location using latitude and longitude coordinates.
  2. Step 2: Understand geo_shape type

    geo_shape stores complex geographic shapes such as polygons, lines, or multi-points.
  3. Final Answer:

    geo_point stores a single location; geo_shape stores complex shapes like polygons. -> Option A
  4. Quick Check:

    Single point vs complex shape = C [OK]
Hint: Remember: point = one spot, shape = many spots connected [OK]
Common Mistakes:
  • Confusing points with polygons
  • Thinking geo_point stores multiple points
  • Mixing data types with geo types
2.

Which of the following is the correct way to define a geo_point field in an Elasticsearch mapping?

{
  "properties": {
    "location": {
      "type": "?"
    }
  }
}
easy
A. "geo_shape"
B. "geo_point"
C. "point_geo"
D. "location_point"

Solution

  1. Step 1: Recall Elasticsearch geo types

    Elasticsearch uses "geo_point" as the type name for single geographic points.
  2. Step 2: Match the correct type in mapping

    The mapping must specify "type": "geo_point" to store latitude and longitude.
  3. Final Answer:

    "geo_point" -> Option B
  4. Quick Check:

    Mapping type for point = "geo_point" [OK]
Hint: Use exact type names: geo_point for points [OK]
Common Mistakes:
  • Using incorrect type names like geo_shape for points
  • Typos in type string
  • Confusing field name with type
3.

Given this Elasticsearch document indexed with a geo_point field location:

{ "location": { "lat": 40.7128, "lon": -74.0060 } }

Which query will correctly find documents within 10km of this point?

medium
A. { "range": { "location": { "gte": "10km" } } }
B. { "geo_shape": { "location": { "shape": { "type": "point", "coordinates": [40.7128, -74.0060] }, "relation": "within" } } }
C. { "term": { "location": "40.7128,-74.0060" } }
D. { "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } }

Solution

  1. Step 1: Identify correct query type for geo_point

    For geo_point, geo_distance query finds documents within a distance from a point.
  2. Step 2: Check query syntax and parameters

    { "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } uses geo_distance with correct distance and point coordinates.
  3. Final Answer:

    { "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } -> Option D
  4. Quick Check:

    geo_distance query = { "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } [OK]
Hint: Use geo_distance for points, geo_shape for polygons [OK]
Common Mistakes:
  • Using geo_shape query on geo_point field
  • Wrong coordinate order in geo_shape
  • Using term or range queries for geo data
4.

What is wrong with this Elasticsearch mapping for a geo_shape field named area?

{
  "properties": {
    "area": {
      "type": "geo_point"
    }
  }
}

The data to be stored is a polygon shape.

medium
A. The type should be geo_shape to store polygons.
B. The field name area is invalid for geo data.
C. The mapping must include coordinates property.
D. The type geo_point supports polygons by default.

Solution

  1. Step 1: Check field type for polygon data

    Polygons require geo_shape type, not geo_point.
  2. Step 2: Identify mapping error

    Mapping uses geo_point which only supports single points, so it cannot store polygons.
  3. Final Answer:

    The type should be geo_shape to store polygons. -> Option A
  4. Quick Check:

    Polygon needs geo_shape type = D [OK]
Hint: Polygons need geo_shape, not geo_point [OK]
Common Mistakes:
  • Using geo_point for polygon shapes
  • Assuming field name affects type
  • Adding coordinates in mapping instead of data
5.

You want to store a city boundary as a polygon and find all points inside it. Which Elasticsearch setup is correct?

{
  "mappings": {
    "properties": {
      "city_boundary": { "type": "?" },
      "user_location": { "type": "?" }
    }
  }
}

Choose the correct types for city_boundary and user_location.

hard
A. "geo_shape" for both city_boundary and user_location
B. "geo_point" for city_boundary and "geo_shape" for user_location
C. "geo_shape" for city_boundary and "geo_point" for user_location
D. "geo_point" for both city_boundary and user_location

Solution

  1. Step 1: Determine type for city boundary polygon

    City boundary is a polygon, so it requires geo_shape type.
  2. Step 2: Determine type for user location point

    User location is a single point, so it requires geo_point type.
  3. Step 3: Match types to fields

    Assign geo_shape to city_boundary and geo_point to user_location.
  4. Final Answer:

    "geo_shape" for city_boundary and "geo_point" for user_location -> Option C
  5. Quick Check:

    Polygon = geo_shape, Point = geo_point [OK]
Hint: Polygon needs geo_shape; point needs geo_point [OK]
Common Mistakes:
  • Swapping types between polygon and point
  • Using geo_point for polygons
  • Using geo_shape for single points unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard