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.
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:
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:
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.