En aquest tema, explorarem com Elasticsearch gestiona i realitza cerques geoespacials. La geo-cerca és una funcionalitat poderosa que permet indexar i cercar dades basades en ubicacions geogràfiques. Aquest tipus de cerca és especialment útil en aplicacions que necessiten treballar amb dades de localització, com ara aplicacions de mapes, serveis de lliurament, i aplicacions de xarxes socials.
Conceptes Clau
Abans de començar amb els exemples pràctics, és important entendre alguns conceptes clau relacionats amb la geo-cerca en Elasticsearch:
- Geo-point: Un tipus de camp que emmagatzema coordenades geogràfiques (latitud i longitud).
- Geo-shape: Un tipus de camp que emmagatzema formes geogràfiques més complexes, com ara polígons i línies.
- Geo-distance: Una consulta que permet cercar documents dins d'una certa distància d'un punt geogràfic.
- Geo-bounding box: Una consulta que permet cercar documents dins d'una caixa delimitadora geogràfica.
- Geo-polygon: Una consulta que permet cercar documents dins d'un polígon geogràfic.
Indexant Dades Geoespacials
Creació d'un Índex amb un Camp Geo-point
Per començar, crearem un índex amb un camp location
de tipus geo_point
.
PUT /places { "mappings": { "properties": { "name": { "type": "text" }, "location": { "type": "geo_point" } } } }
Indexant Documents amb Coordenades Geogràfiques
Ara, indexarem alguns documents amb coordenades geogràfiques.
POST /places/_doc/1 { "name": "Central Park", "location": { "lat": 40.785091, "lon": -73.968285 } } POST /places/_doc/2 { "name": "Eiffel Tower", "location": { "lat": 48.858844, "lon": 2.294351 } }
Realitzant Cerques Geoespacials
Consulta Geo-distance
Aquesta consulta retorna documents dins d'una certa distància d'un punt geogràfic.
GET /places/_search { "query": { "bool": { "filter": { "geo_distance": { "distance": "10km", "location": { "lat": 40.785091, "lon": -73.968285 } } } } } }
Consulta Geo-bounding Box
Aquesta consulta retorna documents dins d'una caixa delimitadora geogràfica.
GET /places/_search { "query": { "bool": { "filter": { "geo_bounding_box": { "location": { "top_left": { "lat": 40.915255, "lon": -74.25909 }, "bottom_right": { "lat": 40.496044, "lon": -73.700272 } } } } } } }
Consulta Geo-polygon
Aquesta consulta retorna documents dins d'un polígon geogràfic.
GET /places/_search { "query": { "bool": { "filter": { "geo_polygon": { "location": { "points": [ { "lat": 40.915255, "lon": -74.25909 }, { "lat": 40.496044, "lon": -74.25909 }, { "lat": 40.496044, "lon": -73.700272 }, { "lat": 40.915255, "lon": -73.700272 } ] } } } } } }
Exercicis Pràctics
Exercici 1: Crear un Índex amb Geo-shape
- Crea un índex anomenat
regions
amb un campboundary
de tipusgeo_shape
. - Indexa un document que representi una regió amb un polígon geogràfic.
Solució
PUT /regions { "mappings": { "properties": { "name": { "type": "text" }, "boundary": { "type": "geo_shape" } } } } POST /regions/_doc/1 { "name": "Region A", "boundary": { "type": "polygon", "coordinates": [ [ [-73.972, 40.764], [-73.981, 40.764], [-73.981, 40.773], [-73.972, 40.773], [-73.972, 40.764] ] ] } }
Exercici 2: Realitzar una Consulta Geo-shape
- Realitza una consulta per trobar documents dins d'un polígon geogràfic específic.
Solució
GET /regions/_search { "query": { "bool": { "filter": { "geo_shape": { "boundary": { "shape": { "type": "polygon", "coordinates": [ [ [-73.972, 40.764], [-73.981, 40.764], [-73.981, 40.773], [-73.972, 40.773], [-73.972, 40.764] ] ] }, "relation": "within" } } } } } }
Resum
En aquest tema, hem après com Elasticsearch gestiona i realitza cerques geoespacials. Hem vist com crear índexs amb camps geo_point
i geo_shape
, com indexar documents amb coordenades geogràfiques, i com realitzar diverses consultes geoespacials. Aquestes habilitats són essencials per treballar amb dades de localització en Elasticsearch.
En el proper tema, explorarem com crear i utilitzar plugins personalitzats a Elasticsearch.
Curs d'Elasticsearch
Mòdul 1: Introducció a Elasticsearch
- Què és Elasticsearch?
- Instal·lant Elasticsearch
- Conceptes Bàsics: Nodes, Clústers i Índexs
- Arquitectura d'Elasticsearch
Mòdul 2: Començant amb Elasticsearch
Mòdul 3: Tècniques Avançades de Cerca
Mòdul 4: Modelatge de Dades i Gestió d'Índexs
Mòdul 5: Rendiment i Escalabilitat
- Optimitzant el Rendiment de la Cerca
- Escalant Elasticsearch
- Monitorització i Manteniment
- Còpia de Seguretat i Restauració
Mòdul 6: Seguretat i Control d'Accés
- Assegurant Elasticsearch
- Autenticació i Autorització d'Usuaris
- Control d'Accés Basat en Rols
- Auditoria i Compliment
Mòdul 7: Integracions i Ecosistema
- Elasticsearch amb Logstash
- Elasticsearch amb Kibana
- Elasticsearch amb Beats
- Elasticsearch amb Altres Eines