No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Consultas de rango y agregaciones

14/16
Recursos

Aportes 8

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

  • Con "_source": indicamos los campos a mostrar.
  • Agrupa las consultas que de tipo range, que están contenidas en un valor inicio (gte, gt) y fin (lte, lt)
  • Las agregaciones son métricas que se devuelven sobre una consulta.
GET /indice/_search
{
    "aggs" : {
        "campoPromedio": { 
						"avg" : { 
							"field" : "campo", 
							"missing": 3.0
							} 
				},
        "campoMaxima": { "max" : { "field" : "campo" } },
        "campoMinima": { "min" : { "field" : "campo" } }
    }
}
  • aggs, indicar consulta de agregaciones.
  • avg, valor promedio; max, valor máximo; min, valor mínimo
  • missing, establece valor por defecto a campos que que no tienen valor.

Consultas de rango
Devuelve documentos que contienen términos dentro de un rango proporcionado.

Range Queries - Elastic Search Documentation

Agregaciones
Una agregación es un indicador que permite interpretar nuestros datos y nos permiten responder preguntas del caso de negocio como por ejemplo:

¿Cuál es la puntuación promedio de los restaurantes entre el 2019 y el 2020?
¿Cuál es la categoría de restaurante mayoritaria?
¿Cual es el número de platos ofrecidos en promedio de los restaurantes?

Elasticsearch organiza las agregaciones en tres categorías:

  • “Metrics” que calculan métricas, como una suma o un promedio, a partir de valores de campo.
  • “Buckets” que agrupan documentos en cubos, también llamados bins, en función de valores de campo, rangos u otros criterios.
  • Pipelines" que toman entradas de otras agregaciones en lugar de documentos o campos.

Aggregations - Elastic Search Documentation

Por si no quieres ver los tipos con sus documentos en el salida del query dentro de un body JSON puedes insertar la keyword

// el size igual a cero nos quitara los documentos en la salida y solo nos mostrara el resultado del calculos que hagamos sobre ellos
"size": 0
"aggs": {...}

Buen dia, agradezco por favor alguien que me puedo orientar con lo siguiente:
Estoy usando kibana_sample_data_ecommerce , cuyos documentos tienen un mapeo como este.

Y quiero obtener un comportamiento diario básico de los datos de esta manera:

Hasta donde sé, tengo que dividir mis datos dos veces, primero diariamente y luego en el intervalo que deseo (1h en este caso). Después de eso, tengo que sumar las ocurrencias en ese rango de tiempo (el pequeño) y hacer una suma acumulativa durante todo el día para cada día. Para obtener algo como esto:

Esta es la consulta que estoy realizando con rangos y agregaciones:

Después de hacer eso, solo tengo que obtener "“extended stats” (estadísticas extendidas) iterando la lista de horas para todos los días, es decir:
.
Pero este último paso me está volviendo loco porque este proceso me da un nested buckets (cubos anidados), para cada intervalo de tiempo …** Entonces, la cuestión es cómo puedo hacer una agregación de estadísticas extendida sobre los datos del mes, pero solo en cada ventana de tiempo todos los días ?** Muchas gracias

Comparto mi query haciendo un AND de los ranges que quiero buscar usando los campos de calificacion y de fecha:

QUERY :

{
    // con la keyword _source le idremos excatly que campos queremos buscar dentro de nuestro query de respuesta
    "_source": ["nombre", "calificacion", "ultima_modificacion_plato1.fecha1"],
    // hacemos el query con el rango fijo de las calificaciones de un restaurante
    "query": {
        "bool":{
            "must": [
                {
                    "range": {
                        "calificacion": {"gt": 2.0, "lte": 6.0}
                    }
                },
                {
                    "range": {
                        "ultima_modificacion_plato1.fecha1": {"gt": "2018-01-01", "lte": "2020-12-31"}
                    }
                }
            ]
        }
    }
}
{
    "aggs": {
        "CalificacionPromedio": { "avg": {"field": "calificacion", "missing": 3.0} },
        "CalificacionMaxima": { "max": {"field": "calificacion"} },
        "CalificacionMinima": { "min": {"field": "calificacion"} }
    }
}
{
    "_source": ["nombre", "calification"],
    "query": {
        "range": {
            "calification": {
                "gt": 1.0,
                "lte": 5.0
            }
        }
    }
}

La sintaxis de las agregaciones es muy parecido a la sintaxis de mongodb.