Geo-point and geo-shape types in Elasticsearch - Time & Space Complexity
When working with geo-point and geo-shape types in Elasticsearch, it is important to understand how query time grows as the number of locations or shapes increases.
We want to know how the search time changes when we add more geographic data.
Analyze the time complexity of the following Elasticsearch geo query.
GET /places/_search
{
"query": {
"geo_shape": {
"location": {
"shape": {
"type": "polygon",
"coordinates": [[[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]]
},
"relation": "within"
}
}
}
}
This query finds documents where the geo-shape field "location" is within the given polygon.
In this geo-shape query, Elasticsearch checks each document's shape against the query polygon.
- Primary operation: Checking spatial relation between shapes.
- How many times: Once per document in the index.
As the number of documents with geo-shapes grows, the number of shape comparisons grows roughly the same.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 shape checks |
| 100 | 100 shape checks |
| 1000 | 1000 shape checks |
Pattern observation: The work grows linearly as more geo-shapes are stored.
Time Complexity: O(n)
This means the query time grows in direct proportion to the number of geo-shape documents.
[X] Wrong: "Geo queries always run instantly no matter how many shapes there are."
[OK] Correct: Each shape must be checked, so more shapes mean more work and longer query times.
Understanding how geo queries scale helps you explain performance in real projects and shows you can think about data size effects clearly.
What if we added a spatial index like an R-tree? How would the time complexity change?
Practice
What is the main difference between geo_point and geo_shape types in Elasticsearch?
Solution
Step 1: Understand
geo_pointtypegeo_pointstores a single geographic location using latitude and longitude coordinates.Step 2: Understand
geo_shapetypegeo_shapestores complex geographic shapes such as polygons, lines, or multi-points.Final Answer:
geo_pointstores a single location;geo_shapestores complex shapes like polygons. -> Option AQuick Check:
Single point vs complex shape = C [OK]
- Confusing points with polygons
- Thinking geo_point stores multiple points
- Mixing data types with geo types
Which of the following is the correct way to define a geo_point field in an Elasticsearch mapping?
{
"properties": {
"location": {
"type": "?"
}
}
}Solution
Step 1: Recall Elasticsearch geo types
Elasticsearch uses "geo_point" as the type name for single geographic points.Step 2: Match the correct type in mapping
The mapping must specify "type": "geo_point" to store latitude and longitude.Final Answer:
"geo_point" -> Option BQuick Check:
Mapping type for point = "geo_point" [OK]
- Using incorrect type names like geo_shape for points
- Typos in type string
- Confusing field name with type
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?
Solution
Step 1: Identify correct query type for geo_point
Forgeo_point,geo_distancequery finds documents within a distance from a point.Step 2: Check query syntax and parameters
{ "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } usesgeo_distancewith correct distance and point coordinates.Final Answer:
{ "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } -> Option DQuick Check:
geo_distance query = { "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } [OK]
- Using geo_shape query on geo_point field
- Wrong coordinate order in geo_shape
- Using term or range queries for geo data
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.
Solution
Step 1: Check field type for polygon data
Polygons requiregeo_shapetype, notgeo_point.Step 2: Identify mapping error
Mapping usesgeo_pointwhich only supports single points, so it cannot store polygons.Final Answer:
The type should begeo_shapeto store polygons. -> Option AQuick Check:
Polygon needs geo_shape type = D [OK]
- Using geo_point for polygon shapes
- Assuming field name affects type
- Adding coordinates in mapping instead of data
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.
Solution
Step 1: Determine type for city boundary polygon
City boundary is a polygon, so it requiresgeo_shapetype.Step 2: Determine type for user location point
User location is a single point, so it requiresgeo_pointtype.Step 3: Match types to fields
Assigngeo_shapetocity_boundaryandgeo_pointtouser_location.Final Answer:
"geo_shape" for city_boundary and "geo_point" for user_location -> Option CQuick Check:
Polygon = geo_shape, Point = geo_point [OK]
- Swapping types between polygon and point
- Using geo_point for polygons
- Using geo_shape for single points unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
