J'ai des documents avec cette structure:
{
FIELD1:string,
FIELD2:
[ {SUBFIELD:number}, {SUBFIELD:number}...]
}
Je veux trier le résultat de la somme des nombres dans FIELD2.SUBFIELDs:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
Si je fais cela, j'obtiens des compartiments non triés, mais je veux des compartiments triés par valeur "a2". Comment puis-je faire ceci? Je vous remercie!
Tu l'as presque eu. Il vous suffit d'ajouter une propriété order
à votre a1
agrégations de termes, comme ceci:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0,
"order": {"a2": "desc"} <--- add this
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
Brillant de Val https://stackoverflow.com/users/4604579/val
Fondamentalement, la même chose, mais voici ce qui a fonctionné pour moi de trouver la plus grande "taille" pour chaque "nom", et d'afficher les 25 premiers plus grands:
{
"size": 0,
"aggs": {
"agg1": {
"terms": {
"field": "name.keyword",
"order": {
"agg2": "desc"
},
"size": 25
},
"aggs": {
"agg2": {
"max": {
"field": "size"
}
}
}
}
}
}