2015-09-01 12 views
6

के साथ काम नहीं करता है, मैं नेस्टेड फ़ील्ड के साथ काम करने के लिए लोचदार पृथक्करण + फ़िल्टर नहीं कर सकता। डेटा स्कीमा (प्रासंगिक भाग) इस तरह है:लोचदार खोज एकीकरण नेस्टेड-प्रकार के फ़ील्ड

"mappings": { 
    "rb": { 
    "properties": { 
     "project": { 
     "type": "nested", 
     "properties": { 
      "age": { 
      "type": "long" 
      }, 
      "name": { 
      "type": "string", 
      "index": "not_analyzed" 
      } 
     } 
     }  
    } 
    } 
} 

अनिवार्य रूप से "rb" वस्तु एक नेस्टेड क्षेत्र "परियोजना" जो दो और फ़ील्ड हैं कहा जाता है - "नाम" और "उम्र"। क्वेरी मैं चल रहा हूँ:

"aggs": { 
    "root": { 
    "aggs": { 
     "group": { 
     "aggs": { 
      "filtered": { 
      "aggs": { 
       "order": { 
       "percentiles": { 
        "field": "project.age", 
        "percents": ["50"] 
       } 
       } 
      }, 
      "filter": { 
       "range": { 
       "last_updated": { 
        "gte": "2015-01-01", 
        "lt": "2015-07-01" 
       } 
       } 
      } 
      } 
     }, 
     "terms": { 
      "field": "project.name", 
      "min_doc_count": 5, 
      "order": { 
      "filtered>order.50": "asc" 
      }, 
      "shard_size": 10, 
      "size": 10 
     } 
     } 
    }, 
    "nested": { 
     "path": "project" 
    } 
    } 
} 

इस क्वेरी कम से कम 5 के साथ शीर्ष 10 परियोजनाओं (project.name क्षेत्र) जो आज फिल्टर, उनकी औसत उम्र के अनुसार क्रमबद्ध मेल खाते हैं, परियोजनाओं अनदेखी निर्माण करने के लिए माना जाता है डेटाबेस में उल्लेख है । मध्यस्थ की गणना केवल फ़िल्टर (दिनांक सीमा) से मेल खाने वाली परियोजनाओं के लिए की जानी चाहिए।

डेटाबेस में सौ से अधिक हजार वस्तुओं के बावजूद, यह क्वेरी खाली सूची उत्पन्न करती है। कोई त्रुटि नहीं, बस खाली प्रतिक्रिया। मैंने इसे ES 1.6 और ES 2.0-beta दोनों पर आजमाया है।

उत्तर

7

मैंने आपकी समेकन क्वेरी को फिर से व्यवस्थित किया है और मुझे कुछ परिणाम दिखाए जा सकते हैं। मुख्य बिंदु टाइप है क्योंकि आप nested प्रकार के आसपास एकत्र कर रहे हैं, मैंने एग्रीगेशन last_updated फ़ील्ड पर लिया और इसे पहले समेकन के रूप में पदानुक्रम में स्थानांतरित कर दिया। फिर nestedproject फ़ील्ड पर अंत में आता है और अंततः terms और percentile पर आता है।

ऐसा लगता है कि यह बहुत अच्छी तरह से काम करता है। प्रयास करें।

{ 
    "size": 0, 
    "aggs": { 
    "filtered": { 
     "filter": { 
     "range": { 
      "last_updated": { 
      "gte": "2015-01-01", 
      "lt": "2015-07-01" 
      } 
     } 
     }, 
     "aggs": { 
     "root": { 
      "nested": { 
      "path": "project" 
      }, 
      "aggs": { 
      "group": { 
       "terms": { 
       "field": "project.name", 
       "min_doc_count": 5, 
       "shard_size": 10, 
       "order": { 
        "order.50": "asc" 
       }, 
       "size": 10 
       }, 
       "aggs": { 
       "order": { 
        "percentiles": { 
        "field": "project.age", 
        "percents": [ 
         "50" 
        ] 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

यह काम करता है! वास्तव में मुझे 10 मान वापस पाने के लिए shard_size 100 तक बढ़ाना पड़ा। क्या आप समझते हैं कि मेरा मूल संस्करण क्यों काम नहीं करता? क्या यह ईएस में एक प्रतिबंध है कि यह नेस्टेड फ़ील्ड के अंदर फ़िल्टर का समर्थन नहीं करता है? – extesy

+1

'नेस्टेड' समेकन के अंदर आप केवल नेस्टेड फ़ील्ड का संदर्भ दे सकते हैं। इसके अलावा, यह 'last_updated' के आधार पर पहले डेटा को फ़िल्टर करने और केवल नेस्टेड डेटा पर काम करने के लिए अधिक समझ में आता है। – Val

+0

@ वैल - क्या आप कृपया मुझे बता सकते हैं कि मैं इसे बहुउद्देशीय बाल्टी के लिए कैसे कर सकता हूं? अलग प्रश्न - http://stackoverflow.com/questions/43451667/elasticsearch-ordering-aggregation-by-nested-aggregation-on-nested-field –

संबंधित मुद्दे