/ / ElasticSearch - Aggregations: bucket di filtraggio e ordinamento - json, elasticsearch

ElasticSearch - Aggregations: bucket di filtraggio e selezione - json, elasticsearch

Uso di ElasticSearch 5.2

Ad esempio userò un database che rappresenta tutte le persone nel mondo.

Esempio di richiesta: ottieni lo stipendio medio di una persona, raggruppato per paese, per tutti di età superiore ai 30 anni. (La risposta dovrebbe contenere i primi 10 paesi con il loro stipendio medio)

Passi che ho preso per costruire la mia query di aggregazione:

  1. Filtrare il set di dati non elaborato (filter: age > 30)
  2. Aggregato su "country"
  3. Usa metrica media sul campo "salary"

Il problema che sto affrontando è che posso applicare un filtro prima di aggregarlo o ordinare i bucket, ma sembra che ES non mi consenta di fare entrambe le cose?
In altre parole: non posso applicare il mio "order"query su"myInnerAggregation"perché è preceduto da"myFilterAggregation"

GET myIndex/_search
{
"size":0,
"aggs": {
"myAggregation": {
"terms": {
"size":10,
"field": "country",
"order": [
{
"myInnerAggregation": "desc"
// I cannot specify "myInnerAggregation" here, only
// "myFilterAggregation" (because it"s out of scope I guess)
}
]
},
"aggs": {
"myFilterAggregation": {
"filter": { /* age > 30 (filter syntax is not the problem)*/},
"aggs": {
"myInnerAggergation": {
"avg": {
"field": "salary"
}
}
}
}
}
}

} }

Ho visto che ES 6.1+ supporta "bucket_sort", che probabilmente risolverebbe questo problema, ma non posso credere che una semplice aggregazione come questa non possa essere gestita da ES 5.2?

risposte:

0 per risposta № 1

Questo dovrebbe fare il trucco:

"order": [
{
"MyFilterAggregation>MyInnerAggregation": "desc"
}
]

0 per risposta № 2

Prova a spostare il filtro su query parte della richiesta. Non devi dichiarare il tuo filtro come aggregazione, le aggregazioni rispettano i filtri definiti nel query parte della tua richiesta. Speriamo in questo modo di risolvere il problema.