Elasticsearch - Como utilizar la geolocalización

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"
            }
        }
    }
}

Elastic search 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.

Elastic search Geo point

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
                    }
                }
            }
        }
    }
}'

Elastic search Geo point

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

Hi! If you find my posts helpful, please support me by inviting me for a coffee :)