5

başına son çocuk toplamı.Elasticsearch Toplama: Ben <code>quantity</code> toplamını gösteren <code>price</code> histogramını oluşturmak istediğiniz bir <code>order</code><code>order_revision</code> çocuklara temsil Elasticsearch bir üst-çocuk yapıya sahip ebeveyn

{ 
    "_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 
    } 
} 

Aşağıdaki toplama temel olarak çalışır, ancak tüm devam eden düzeltmelerin toplamını döndürür.

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

son versiyonda sadece her düzenin (/ yeni timestamp en yüksek olan) son revizyon için quantity alanların toplamı dönmelidir. order_id tarafından gruplandırılan ve yalnızca en son çocuğu seçen böyle bir toplamadan nasıl emin olacağımı tam olarak bilmiyorum, bu ebeveyn-çocuk yapısının bu verileri modellemek için en iyisi olduğundan emin değilim.

+0

Sipariş başına yaklaşık olarak kaç revizyonunuz var? 1-2 büyüklüğünde veya 10-20 büyüklüğünde mi konuşuyoruz? – Val

+0

Yaklaşık 10 .... olurdu. –

cevap

0

En kolay uygulama, belgede en son düzeltme etiketine ("latest": true) sahip olmaktır. Daha sonra, yalnızca en son düzeltmeleri filtrelemek için bir sorgu veya filter topluluğunun eklenmesiyle ilgili basit bir sorun haline gelir.

+0

Yine de, yeni bir revizyon geldiğinde, önceki en son revizyonu "en son": false 'olarak güncellemeyi hatırlamanız gerekir. – Val

+0

Teşekkürler için teşekkürler ... En sonun işaretlenmesinin gerçek bir seçenek olmadığı sorusuna da değinmedim, ayrıca bu işlevselliği genişletmek için ayrıca zaman içinde geri adım atmam gerekecek ... Ama bunu düşünmüyorum ES ile gerçekten mümkün, bu yüzden başka bir şey gelmezse cevabını kabul ediyorum ... –

İlgili konular