5

在Elasticsearch中擁有父子結構,代表orderorder_revision子女我想要生成price的柱狀圖,其中顯示quantity的總和。Elasticsearch聚合:每個父代的最新兒童總和

{ 
    "_type": "order", 
    "_id": "1063220887", 
    "_score": 1, 
    "_source": { 
    "order_id": "1063220887", 
    "product_id": "10446350", 
    "timestamp": 1462713302000 
    } 
} 

{ 
    "_type": "order_revision", 
    "_id": "10234234", 
    "_parent": "1063220887", 
    "_source": { 
    "price": 9, 
    "quantity": 3, 
    "revision": 361, 
    "timestamp": 1462712196000 
    } 
} 

下面的聚合基本上工作,但返回所有存在的修訂的總和。

{ 
    "aggs": { 
     "orders": { 
     "filter": { 
      "has_parent": { 
      "parent_type": "order" 
      } 
     }, 
     "aggs": { 
      "quantity_per_price": { 
      "histogram": { 
       "field": "price", 
       "interval": 1 
      } 
      "aggs": { 
       "sum": {"field": quantity"} 
      } 
      } 
     } 
     } 
    } 
    } 

在最終版本應該只返回quantity字段的總和爲最新版本(最高/最新timestamp)每一份訂單的。 我不完全確定如何拿出這樣一個聚合,它由order_id分組,並只選擇最新的孩子,我不知道如果這個父子結構是最好的模型這個數據。

+0

每個訂單大約有多少次修訂?我們正在談論1-2或更高的數量,如10-20 +? – Val

+0

大概是10 .... –

回答

0

最簡單的實施方式是在文檔中標記最新版本("latest": true)。然後它成爲一個簡單的問題添加查詢或filter聚合過濾只有最新的修訂。

+0

但是請注意,當新版本進入時,還需要記住將以前的最新版本更新爲'「latest」:false'。 – Val

+0

感謝您的合作......沒有提到標記最新的不是真正的選擇,此外我還需要擴展此功能以便能夠及時退後......但是因爲我不這麼認爲ES真的有可能,所以如果沒有別的東西進來,我會接受你的回答。 –