2013-05-30 6 views
5

मैं ईएस में नेस्टेड दस्तावेज़ों का उपयोग कर रहा हूं। मैंने एक इकाई के अंदर घोंसला लगाया है और मैं नेस्टेड क्वेरी के साथ सरणी फ़िल्टर करने में सक्षम होना चाहता हूं (न केवल रूट/पैरेंट दस्तावेज़ को फ़िल्टर करें बल्कि नेस्टेड सरणी भी फ़िल्टर करें)।प्रतिक्रिया में नेस्टेड सरणी को कैसे फ़िल्टर करें?

नेस्टेड फ़िल्टर रूट दस्तावेज़ फ़िल्टर करने में सक्षम हैं। उदाहरण के लिए, यदि मेरे पास इंडेक्स 'ब्लॉग' और टाइप ब्लॉग 'ब्लॉग' है और ब्लॉग दस्तावेज़ के अंदर मेरे पास {"टाइप": "नेस्टेड"} मैपिंग्स में संपत्ति 'टिप्पणियां' (टिप्पणियों की सरणी) है, तो उदाहरण के लिए मैं चाहता हूं उन ब्लॉगों को फ़िल्टर करने के लिए जिनके पास टिप्पणियां हैं जिनके शीर्षक 'आज' (उदाहरण के लिए मिलान क्वेरी के साथ) हैं, लेकिन प्रत्येक ब्लॉग में मैं केवल उन टिप्पणियों को दिखाना चाहता हूं जिनमें शीर्षक में 'आज' शामिल है।

मुझे पता है कि कैसे नेस्टेड फ़िल्टरवर्क। इस उद्देश्य के लिए बाल-अभिभावक संबंध भी अच्छा नहीं है क्योंकि मूल दस्तावेज़ के हिस्से के रूप में प्रतिक्रिया में कोई बाल दस्तावेज नहीं है।

क्या यह सीधे लोचदार में ऐसा करने का कोई तरीका है, आवेदन के लिए अतिरिक्त तर्क जोड़ने के बिना, जो प्रदर्शन को प्रभावित कर सकता है? या क्या वहां है और इसे अगले संस्करणों में कुछ नेस्टेड क्वेरी/फ़िल्टर में नया विकल्प जोड़ने की योजना है? ब्लॉग द्वारा

फिल्टर:

 
..... 
"blogs" :[ 
    { 
     "id":1000, 
     "content":"hello world!!!", 
     "author:"evan", 
     "createTime":"2013-05-31", 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"}, 
        {"author":"tom", id:"2", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"oliver", id:"3", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"Jonesie", id:"4", "content":"test test","createTime":"2013-05-29"} 
      ] 
    }, 
    { 
     "id":1001, 
     "content":"test data", 
     "author:"jack", 
     "createTime":"2013-05-30", 
      "comments" : [ 
        {"author":"Zach", id:"11", "content":"test data 1","createTime":"2013-05-31"}, 
        {"author":"tom", id:"21", "content":"test data 2","createTime":"2013-05-31"}, 
        {"author":"oliver", id:"31", "content":"test test 3","createTime":"2013-05-28"}, 
        {"author":"Jonesie", id:"41", "content":"test test 4","createTime":"2013-05-27"} 
      ] 
    } 
] 
..... 

मैं की तरह क्वेरी चलाने के लिए करना चाहते हैं:

धन्यवाद

... जोड़ने

उदाहरण के लिए, इस दस्तावेज़ के पर एक नजर है। createTime == '2013-05-31' और फ़िल्टर blogs.comments.createTime == '2013-05-31'

की उम्मीद:

 
..... 
"blogs" :[ 
    { 
     "id":1000 
     "content":"hello world!!!", 
     "author::"evan", 
     "createTime":"2013-05-31" 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"} 
      ] 
    } 
] 
.... 

धन्यवाद

+1

आपको अपने प्रश्न का कुछ परीक्षण डेटा जोड़ सकते हैं? यह बिल्कुल स्पष्ट नहीं है कि आपकी डेटा संरचना कैसी दिखती है। – imotov

उत्तर

1

संक्षेप में: आप नहीं कर सकते। आपको नेस्टेड दस्तावेज़ों को अपने कोड में फ़िल्टर करने की आवश्यकता है।

यह एक ज्ञात मुद्दा है:

"क्वेरी के लिए नेस्टेड डॉक्स मिलान बेनकाब और प्रकार" https://github.com/elasticsearch/elasticsearch/issues/1383: "। प्रति हिट नेस्टेड आंतरिक वस्तुओं मिलान लौटें"

https://github.com/elasticsearch/elasticsearch/issues/3022

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