Las agregaciones en Elasticsearch son una poderosa herramienta para analizar y resumir datos. Permiten realizar cálculos y obtener estadísticas sobre los documentos indexados, lo que es esencial para obtener insights y tomar decisiones basadas en datos. En este tema, exploraremos los conceptos básicos de las agregaciones, los diferentes tipos de agregaciones disponibles y cómo utilizarlas en tus consultas.

Conceptos Básicos de Agregaciones

Las agregaciones en Elasticsearch se pueden dividir en dos categorías principales:

  1. Agregaciones de Matriz (Bucket Aggregations): Agrupan documentos en "buckets" (cubos) basados en ciertos criterios.
  2. Agregaciones de Métricas (Metric Aggregations): Calculan métricas sobre los documentos agrupados.

Estructura de una Consulta de Agregación

Una consulta de agregación en Elasticsearch se estructura de la siguiente manera:

{
  "aggs": {
    "nombre_de_la_agregacion": {
      "tipo_de_agregacion": {
        "campo": "nombre_del_campo"
      }
    }
  }
}

Tipos de Agregaciones

Agregaciones de Matriz

  1. Agregación de Términos (Terms Aggregation): Agrupa documentos que contienen el mismo valor en un campo específico.

    {
      "aggs": {
        "popular_colors": {
          "terms": {
            "field": "color"
          }
        }
      }
    }
    
  2. Agregación de Rango (Range Aggregation): Agrupa documentos en rangos definidos.

    {
      "aggs": {
        "price_ranges": {
          "range": {
            "field": "price",
            "ranges": [
              { "to": 50 },
              { "from": 50, "to": 100 },
              { "from": 100 }
            ]
          }
        }
      }
    }
    
  3. Agregación de Histograma (Histogram Aggregation): Agrupa documentos en intervalos de valores numéricos.

    {
      "aggs": {
        "price_histogram": {
          "histogram": {
            "field": "price",
            "interval": 50
          }
        }
      }
    }
    

Agregaciones de Métricas

  1. Agregación de Promedio (Avg Aggregation): Calcula el promedio de un campo numérico.

    {
      "aggs": {
        "average_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
    
  2. Agregación de Suma (Sum Aggregation): Calcula la suma de un campo numérico.

    {
      "aggs": {
        "total_sales": {
          "sum": {
            "field": "sales"
          }
        }
      }
    }
    
  3. Agregación de Máximo (Max Aggregation): Encuentra el valor máximo de un campo numérico.

    {
      "aggs": {
        "max_price": {
          "max": {
            "field": "price"
          }
        }
      }
    }
    
  4. Agregación de Mínimo (Min Aggregation): Encuentra el valor mínimo de un campo numérico.

    {
      "aggs": {
        "min_price": {
          "min": {
            "field": "price"
          }
        }
      }
    }
    

Ejemplo Práctico

Supongamos que tenemos un índice de productos y queremos obtener el precio promedio de los productos, así como la distribución de productos por categoría.

{
  "aggs": {
    "average_price": {
      "avg": {
        "field": "price"
      }
    },
    "category_distribution": {
      "terms": {
        "field": "category.keyword"
      }
    }
  }
}

Explicación del Ejemplo

  • average_price: Calcula el precio promedio de todos los productos.
  • category_distribution: Agrupa los productos por categoría y cuenta el número de productos en cada categoría.

Ejercicios Prácticos

Ejercicio 1: Agregación de Términos

Crea una consulta que agrupe los documentos por el campo brand y cuente el número de documentos en cada grupo.

Solución:

{
  "aggs": {
    "brand_distribution": {
      "terms": {
        "field": "brand.keyword"
      }
    }
  }
}

Ejercicio 2: Agregación de Rango

Crea una consulta que agrupe los documentos en rangos de precios: menos de 100, entre 100 y 200, y más de 200.

Solución:

{
  "aggs": {
    "price_ranges": {
      "range": {
        "field": "price",
        "ranges": [
          { "to": 100 },
          { "from": 100, "to": 200 },
          { "from": 200 }
        ]
      }
    }
  }
}

Ejercicio 3: Agregación de Promedio

Crea una consulta que calcule el precio promedio de los productos en cada categoría.

Solución:

{
  "aggs": {
    "categories": {
      "terms": {
        "field": "category.keyword"
      },
      "aggs": {
        "average_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

Conclusión

Las agregaciones en Elasticsearch son una herramienta esencial para el análisis de datos. Permiten agrupar, filtrar y calcular métricas sobre los documentos indexados, proporcionando insights valiosos. En este tema, hemos cubierto los conceptos básicos de las agregaciones, los diferentes tipos disponibles y cómo utilizarlas en tus consultas. Con esta base, estarás preparado para explorar y utilizar agregaciones más avanzadas en tus proyectos de Elasticsearch.

© Copyright 2024. Todos los derechos reservados