En este ejemplo, vamos a entender cómo utilizar la geolocalización de ElasticSearch. Agregaremos documentos con geolocalización utilizando geo_point y buscaremos luego esos documentos mediante coordenadas.
La geolocalización de ElasticSearch es una herramienta muy útil que puede servirte por ejemplo para buscar comercios, clientes, etc, que están cerca de dónde se encuentra un usuario en un punto específico.
Cuáles son los pasos para crear un índice con geolocalización
- Creas un índice con un POST y la propiedad properties:location
- Creas un documento con un POST completando la propiedad location
- Realizas la búsqueda con un GET con un filtro de distance y location
Como crear el índice de geolocalización en Elasticsearch
Lo primero que necesitas es crear un índice en ElasticSearch con geolocalización.
El índice se llamará establishment y lo vas a definir con la propiedad geo_point a fin de que tenga el soporte de geolocalización.
Definir el PUT para crear un índice con geolocalización y ejecutarlo. Observa el type geo_point que está definido dentro de properties:location
curl --location --request PUT 'http://localhost:9200/establishment' \
--header 'Content-Type: application/json' \
--data-raw '{
"mappings": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
Como agregar documentos a elastic con geolocalización
En el índice establishment, creamos un documento con ID 1 e indicamos su localización.
Haciendo un PUT al index agregas un documento con las coordenadas de geolocalización.
Observa aquí, que dentro de location indican las coordenadas en latitud y longitud que tiene ese índice.
curl --location --request PUT 'http://localhost:9200/establishment/_doc/1' \
--header 'Content-Type: application/json' \
--data-raw '{
"text": "Sports Shop ABC",
"location": {
"lat": -31.397561,
"lon": -64.235415
}
}'
Aquí solo te muestro una sola inserción para simplificar, pero es conveniente que insertes varios documentos en distintas coordenadas (cerca y lejos de un punto) para visualizar mejor este ejemplo.
Buscar documentos en elasticsearch con coordenadas de geolocalización
Luego puedes realizar búsquedas por cercanía utilizando kilómetros desde un punto de origen.
Observa nuevamente los filtros que usamos para la búsqueda por geo_distance .
Utilizando la distancia hasta donde deseamos buscar en distance y el punto desde el cual deseamos realizar la búsqueda en location .
curl --location --request GET 'http://localhost:9200/establishment/_search' \
--header 'Content-Type: application/json' \
--data-raw '{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "10km",
"location" : {
"lat" : -31.397948,
"lon" : -64.254007
}
}
}
}
}
}'
Conclusión
En este breve ejemplo vimos cómo crear un documento que contenga coordenadas de geolocalización. Utilizamos para ello la propiedad geo_point para crear un documento y luego buscarlo por cercanía.
Existen otros tipos de busquedas que puedes examinar tambien, como la geo_shape que pueden proveerte otras formas de búsqueda por geolocalización.
Referencias:
Índices con geo_point: Datatype geo-point
Búsqueda por geo-distance utilizando la query geo_point: Search geo-point