j'essaie depuis quelques temps de faire une moyenne. En gros sum(element1) / count(element2). Ceci via kibana.
Je suis tombé sur un article (https://github.com/elastic/kibana/issues/2504) qui semble dire (mon anglais n'est pas au top ) que ceci est impossible car elasticsearch ne le permet pas. Il faut faire les deux requêtes coté serveur et renvoyer la division dans un second temps.
Existe-t-il une alternative (par exemple avec un script) pour le faire en une requête ?
Le soucis avec avg c'est que tu peux le faire uniquement sur un champs et
pas sur une combinaison de champs.
Par exemple, un document contient une "personne", un "nombre" et une
"date". Un avg me fera une moyenne du "nombre" par rapport à chaque
document et non par rapport à l'unique count de "personne" comme je
souhaiterais.
A moins que je me trompe et qu'il est possible de faire ce type de requête !
Si si tu as bien compris
Tu peux faire ça :
"aggs": {
"group_by": {
"terms": {
"field": "personne"
},
"aggs": {
"moyenne": {
"avg": {
"field": "nombre"
}
}
}
}
mais pas ça :
"aggs": {
"group_by": {
"cardinality": {
"field": "personne"
},
"aggs": {
"moyenne": {
"avg": {
"field": "nombre"
}
}
}
}
comme cardinality est experimental, ça ne doit pas être intégré à elastic... Pour le moment cela renvoit uniquement le unique count, sans la moyenne.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.