Cómo realizar una agregación de canalización sin devolver todos los depósitos en Elasticsearch

Estoy usando Elasticsearch 2.3 y estoy tratando de realizar un cálculo de dos pasos usando una agregación de canalización. Solo estoy interesado en el resultado final de mi agregación de canalización, pero Elasticsearch devuelve toda la información de los depósitos.

Como tengo una gran cantidad de cubos (decenas o cientos de millones), esto es prohibitivo. Desafortunadamente, no puedo encontrar una manera de decirle a Es que no devuelva toda esta información.

Aquí hay un ejemplo de juguete. Tengo un indicetest-index con un tipo de documentoobj. obj tiene dos campos,key yvalues.

curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
  "value": 100,
  "key": "foo"
}'

curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
  "value": 20,
  "key": "foo"
}'

curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
  "value": 50,
  "key": "bar"
}'

curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
  "value": 60,
  "key": "bar"
}'

curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
  "value": 70,
  "key": "bar"
}'

Quiero obtener el valor promedio (sobre todokeys) del mínimovalue deobjs teniendo lo mismokeys. Un promedio de mínimos.

Elasticsearch me permite hacer esto:

curl -XPOST 'http://10.10.0.7:9200/test-index/obj/_search' -d '{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggregations": {
    "key_aggregates": {
      "terms": {
        "field": "key",
        "size": 0
      },
      "aggs": {
        "min_value": {
          "min": {
            "field": "value"
          }
        }
      }
    },
    "avg_min_value": {
      "avg_bucket": {
        "buckets_path": "key_aggregates>min_value"
      }
    }
  }
}'

Pero esta consulta devuelve el mínimo para cada depósito, aunque no lo necesito:

{
  "took": 21,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 0,
    "hits": [

    ]
  },
  "aggregations": {
    "key_aggregates": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "bar",
          "doc_count": 2,
          "min_value": {
            "value": 50
          }
        },
        {
          "key": "foo",
          "doc_count": 2,
          "min_value": {
            "value": 20
          }
        }
      ]
    },
    "avg_min_value": {
      "value": 35
    }
  }
}

¿Hay alguna manera de deshacerse de toda la información que contiene?"buckets": [...]? Solo me interesaavg_min_value.

Esto puede no parecer un problema en este ejemplo de juguete, pero cuando el número de diferenteskeys no es grande (decenas o cientos de millones), la respuesta de la consulta es prohibitivamente grande y me gustaría podarla.

¿Hay alguna manera de hacer esto con Elasticsearch? ¿O estoy modelando mis datos incorrectamente?

NB: no es aceptable agregar previamente mis datos por clave, ya quematch_all parte de mi consulta podría ser reemplazada por filtros complejos y desconocidos.

NB2: cambiandosize a un número no negativo en miterms la agregación no es aceptable porque cambiaría el resultado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta