top query multiple fields aggs agg nosql elasticsearch

nosql - multiple - Sum Query en Elasticsearch



filter agg elasticsearch (1)

Soy bastante nuevo en Elasticsearch. Intento escribir una consulta que se agrupe por un campo y calcule una suma. En SQL, mi consulta se vería así: SELECT lane, SUM(routes) FROM lanes GROUP BY lane

Tengo esta información que se ve así en ES:

{ "_index": "kpi", "_type": "mroutes_by_lane", "_id": "TUeWFEhnS9q1Ukb2QdZABg", "_score": 1.0, "_source": { "warehouse_id": 107, "date": "2013-04-08", "lane": "M05", "routes": 4047 } }, { "_index": "kpi", "_type": "mroutes_by_lane", "_id": "owVmGW9GT562_2Alfru2DA", "_score": 1.0, "_source": { "warehouse_id": 107, "date": "2013-04-08", "lane": "M03", "routes": 4065 } }, { "_index": "kpi", "_type": "mroutes_by_lane", "_id": "JY9xNDxqSsajw76oMC2gxA", "_score": 1.0, "_source": { "warehouse_id": 107, "date": "2013-04-08", "lane": "M05", "routes": 3056 } }, { "_index": "kpi", "_type": "mroutes_by_lane", "_id": "owVmGW9GT345_2Alfru2DB", "_score": 1.0, "_source": { "warehouse_id": 107, "date": "2013-04-08", "lane": "M03", "routes": 5675 } }, ...

Quiero esencialmente ejecutar la misma consulta en ES como lo hice en SQL, por lo que mi resultado sería algo así como (en json por supuesto): M05: 7103, M03: 9740


En elasticsearch, puedes lograrlo usando los términos stats facet :

{ "query" : { "match_all" : { } }, "facets" : { "lane_routes_stats" : { "terms_stats" : { "key_field" : "lane", "value_field" : "routes", "order": "term" } } } }