La búsqueda geoespacial en Elasticsearch permite realizar consultas basadas en la ubicación geográfica de los datos. Este tipo de búsqueda es esencial para aplicaciones que necesitan manejar datos espaciales, como servicios de mapas, aplicaciones de entrega, y análisis de datos geográficos.
Conceptos Clave
Antes de profundizar en la búsqueda geoespacial, es importante entender algunos conceptos clave:
- Coordenadas Geográficas: Representan una ubicación en la Tierra usando latitud y longitud.
- Tipos de Datos Geoespaciales: Elasticsearch soporta varios tipos de datos geoespaciales, como
geo_point
ygeo_shape
. - Consultas Geoespaciales: Permiten buscar documentos basados en su ubicación geográfica.
Tipos de Datos Geoespaciales
geo_point
El tipo geo_point
se utiliza para representar una ubicación geográfica mediante una latitud y una longitud.
geo_shape
El tipo geo_shape
se utiliza para representar formas geográficas complejas, como polígonos, líneas y círculos.
Indexando Datos Geoespaciales
Ejemplo con geo_point
POST /my_index/_doc/1 { "name": "Central Park", "location": { "lat": 40.785091, "lon": -73.968285 } }
Ejemplo con geo_shape
POST /my_index/_doc/2 { "name": "Manhattan", "location": { "type": "polygon", "coordinates": [ [ [-73.981, 40.768], [-73.981, 40.774], [-73.973, 40.774], [-73.973, 40.768], [-73.981, 40.768] ] ] } }
Consultas Geoespaciales
Consulta de Distancia
Busca documentos dentro de una distancia específica de un punto.
GET /my_index/_search { "query": { "bool": { "filter": { "geo_distance": { "distance": "2km", "location": { "lat": 40.785091, "lon": -73.968285 } } } } } }
Consulta de Bounding Box
Busca documentos dentro de un rectángulo definido por dos puntos.
GET /my_index/_search { "query": { "bool": { "filter": { "geo_bounding_box": { "location": { "top_left": { "lat": 40.774, "lon": -73.981 }, "bottom_right": { "lat": 40.768, "lon": -73.973 } } } } } } }
Consulta de Polígono
Busca documentos dentro de un polígono definido por una serie de puntos.
GET /my_index/_search { "query": { "bool": { "filter": { "geo_polygon": { "location": { "points": [ { "lat": 40.774, "lon": -73.981 }, { "lat": 40.774, "lon": -73.973 }, { "lat": 40.768, "lon": -73.973 }, { "lat": 40.768, "lon": -73.981 } ] } } } } } }
Ejercicios Prácticos
Ejercicio 1: Indexar y Buscar por Distancia
-
Indexar un documento con una ubicación geográfica:
POST /places/_doc/1 { "name": "Statue of Liberty", "location": { "lat": 40.689247, "lon": -74.044502 } }
-
Buscar lugares dentro de 5 km de la Estatua de la Libertad:
GET /places/_search { "query": { "bool": { "filter": { "geo_distance": { "distance": "5km", "location": { "lat": 40.689247, "lon": -74.044502 } } } } } }
Ejercicio 2: Indexar y Buscar por Polígono
-
Indexar un documento con una forma geográfica:
POST /places/_doc/2 { "name": "Central Park", "location": { "type": "polygon", "coordinates": [ [ [-73.981, 40.768], [-73.981, 40.774], [-73.973, 40.774], [-73.973, 40.768], [-73.981, 40.768] ] ] } }
-
Buscar lugares dentro del polígono de Central Park:
GET /places/_search { "query": { "bool": { "filter": { "geo_polygon": { "location": { "points": [ { "lat": 40.774, "lon": -73.981 }, { "lat": 40.774, "lon": -73.973 }, { "lat": 40.768, "lon": -73.973 }, { "lat": 40.768, "lon": -73.981 } ] } } } } } }
Resumen
En esta sección, hemos cubierto los conceptos básicos de la búsqueda geoespacial en Elasticsearch, incluyendo los tipos de datos geoespaciales (geo_point
y geo_shape
), cómo indexar datos geoespaciales y cómo realizar consultas geoespaciales. Estas habilidades son esenciales para trabajar con datos geográficos y pueden ser aplicadas en una variedad de aplicaciones del mundo real.
En el siguiente módulo, exploraremos temas avanzados como la creación de plugins personalizados y el uso de aprendizaje automático en Elasticsearch.
Curso de Elasticsearch
Módulo 1: Introducción a Elasticsearch
- ¿Qué es Elasticsearch?
- Instalando Elasticsearch
- Conceptos Básicos: Nodos, Clústeres e Índices
- Arquitectura de Elasticsearch
Módulo 2: Empezando con Elasticsearch
Módulo 3: Técnicas Avanzadas de Búsqueda
Módulo 4: Modelado de Datos y Gestión de Índices
- Mapeo y Analizadores
- Plantillas de Índices
- Alias y Reindexación
- Gestión del Ciclo de Vida del Índice
Módulo 5: Rendimiento y Escalabilidad
- Optimizando el Rendimiento de Búsqueda
- Escalando Elasticsearch
- Monitoreo y Mantenimiento
- Respaldo y Restauración
Módulo 6: Seguridad y Control de Acceso
- Asegurando Elasticsearch
- Autenticación y Autorización de Usuarios
- Control de Acceso Basado en Roles
- Auditoría y Cumplimiento
Módulo 7: Integraciones y Ecosistema
- Elasticsearch con Logstash
- Elasticsearch con Kibana
- Elasticsearch con Beats
- Elasticsearch con Otras Herramientas