2013-04-16 31 views
3

我對Elasticsearch相當陌生。我試圖編寫一個查詢,按字段進行分組並計算總和。在SQL中,我的查詢應該是這樣的: SELECT lane, SUM(routes) FROM lanes GROUP BY laneElasticsearch中的求和查詢

我有這樣的數據,看起來像這樣在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 
    } 
}, 
... 

我想基本上運行相同的查詢在ES和我一樣在SQL,所以,我的結果會是這樣的(當然在JSON):M05: 7103, M03: 9740

回答

6

在elasticsearch,您可以通過使用terms stats facet實現這一點:

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

謝謝imotov。如何對統計結果進行排序?我想按車道字段進行排序,它是'facets.lane_routes_stats.terms.term' –

+0

所有排序選項都在我鏈接到我的答案的文檔中描述。我也用一個例子更新了答案。 – imotov