La requête ci-dessous est utilisée pour connaître le dernier enregistrement de vente pour chaque combinaison de magasin et de ville. Ensuite, j'utilise Java pour calculer le nombre de prix<=100, le nombre de 100<prix<200 et le nombre de prix>=200. Calculez ensuite la moyenne du prix pour chaque ville.
Je veux savoir puis-je y parvenir dans la chaîne de requête Elasticsearch ?
{
"query": {
"match_all": {}
},
"aggs": {
"city_name": {
"terms": {
"field": "city_name"
},
"aggs": {
"store_name": {
"terms": {
"field": "store_name"
},
"aggs": {
"entry_time": {
"max": {
"field": "entry_time"
}
},
"price": {
"top_hits": {
"size": 1
}
}
}
}
}
}
}
}
'
l'exemple de données ressemble à:
{
"_index": "storestatistics_2022_04_11t11_46_01",
"_type": "storestatistics",
"_id": "dankdka",
"_score": 1.0,
"_source": {
"city_name": "NY",
"store_name": "ziyan",
"price": 120,
"user": "xtx",
"entry_time": 1649792100000
...
}
}
Solution du problème
Au lieu d'utiliser top_hits
et de calculer les décomptes dans votre application Java, vous pouvez simplement utiliser l' range
agrégation et laisser ES le faire :
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{ "to": 100.0 },
{ "from": 100.0, "to": 200.0 },
{ "from": 200.0 }
]
}
}
Aucun commentaire:
Enregistrer un commentaire