5

Elasticsearch में एक अभिभावक बच्चों संरचना एक orderorder_revision के साथ बच्चों मैं quantity की राशि दिखा price का हिस्टोग्राम उत्पन्न करना चाहते हैं का प्रतिनिधित्व करने के बाद प्रति नवीनतम बच्चों का योग।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

नोट, हालांकि, जब कोई नया संशोधन आता है, तो आपको पिछले नवीनतम संशोधन को नवीनतम "अद्यतन" में अपडेट करना भी याद रखना होगा। – Val

+0

आपके नियोजन के लिए धन्यवाद ... इस सवाल में उल्लेख नहीं किया गया है कि नवीनतम को चिह्नित करना वास्तविक विकल्प नहीं है, इसके अलावा मुझे समय-समय पर कदम उठाने में भी सक्षम होने के लिए इस कार्यक्षमता को विस्तारित करने की आवश्यकता होगी ... लेकिन जैसा कि मुझे यह नहीं लगता ईएस के साथ वास्तव में संभव है, इसलिए यदि कुछ और नहीं आता है तो मैं आपका जवाब स्वीकार करूंगा ... –