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
regionsamb un campboundaryde 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
