es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ELASTICSEARCH – Agregaciones de total de doc_count

Estoy buscando una manera de sumar el total de una agregación que he definido en la consulta.
Por ejemplo:

  {
      "name" : false,
      "surname" : false

  },
  {
      "name" : false,
      "surname" : false
  }

Consulta:

GET index/_search?size=0
{"query": {
  "bool": {
    "must": [
      {"term": {"name": false}},
      {"term": {"surname": false}}
    ]
  }
},
  "aggs": {
    "name": {
      "terms": {
        "field": "name"
      }
    },
    "surname": {
      "terms": {
        "field": "surname"
      }
    }
  }
}

La consulta devuelve el valor de cada campo “name” y “surname” con el valor “false”.

  "aggregations" : {
    "name" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : 0,
          "key_as_string" : "false",
          "doc_count" : 2 <---------
        }
      ]
    },
    "surname" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : 0,
          "key_as_string" : "false",
          "doc_count" : 2 <---------
        }
      ]
    }
  }
}

¿Es posible devolver la suma total de doc_count, de modo que en esta situación sería “doc_count” : 2 + “doc_count” : 2 == 4?

He estado intentando hacerlo con un script pero como son valores booleanos no funciona.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible retornar la suma total de doc_count para la agregación especificada. Puedes utilizar el parámetro “size” para establecer el número de buckets devueltos en la respuesta de la agregación en 0, y luego utilizar la agregación “total” para retornar la suma de doc_count para todos los buckets. Aquí tienes un ejemplo de consulta:

    GET index/_search
    {
      "query": {
        "bool": {
          "must": [
            {"term": {"name": false}},
            {"term": {"surname": false}}
          ]
        }
      },
      "aggs": {
        "name": {
          "terms": {"field": "name", "size": 0}
        },
        "surname": {
          "terms": {"field": "surname", "size": 0}
        },
        "total_doc_count": {
          "sum": {"script": "_value.doc_count"}
        }
      }
    }
    

    En esta consulta, hemos agregado una nueva agregación llamada “total_doc_count” que utiliza la agregación “sum” para sumar el doc_count de todos los buckets. El parámetro “script” en la agregación “sum” se utiliza para acceder al valor de doc_count para cada bucket. El parámetro “size” para las agregaciones “name” y “surname” se ha establecido en 0 para evitar que se devuelva cualquier bucket en la respuesta.

    Cuando ejecutes esta consulta, deberías obtener una respuesta de agregación que incluya el total de doc_count para todos los registros coincidentes:

    "aggregations" : {
      "total_doc_count" : {
        "value" : 4.0
      }
    }
    

    Ten en cuenta que si estás trabajando con campos booleanos, es posible que necesites utilizar un tipo de agregación diferente o un script personalizado para calcular el recuento total. Por ejemplo, podrías utilizar una agregación “filters” con dos cláusulas de filtro para “name:false” y “surname:false” para obtener el recuento para cada campo, y luego sumarlos utilizando un script.

Comments are closed.