2015-03-05 13 views
8

मान लीजिए मैं नेस्टेड दस्तावेज़ के साथ एक सूचकांक है कि इस तरह दिखता है:मैं लोचदार खोज में फ़िल्टर किए गए नेस्टेड दस्तावेज़ों को कैसे एकत्र कर सकता हूं?

{ 
    "id" : 1234 
    "cars" : [{ 
      "id" : 987 
      "name" : "Volkswagen" 
     }, { 
      "id": 988 
      "name" : "Tesla" 
     } 
    ] 
} 

मैं अब "कार" दस्तावेजों है कि एक विशेष मापदंड को पूरा करता है, उदा की गिनती एकत्रीकरण प्राप्त करना चाहते हैं जो एक खोज क्वेरी से मेल खाता है।

{ 
    "query" : { 
    "nested" : { 
     "path" : "cars", 
     "query" : { 
     "query_string" : { 
      "fields" : ["cars.name"], 
      "query" : "Tes*" 
     } 
     } 
    } 
    }, 
    "aggregations" : { 
    "cars" :{ 
     "nested" : { 
     "path" : "cars" 
     }, 
     "aggs" : { 
     "cars" : { 
      "terms" : { 
      "field" : "cars.id" 
      } 
     } 
     } 
    } 
    } 
} 

मैं केवल कारों की आईडी जिसका नाम "Tes" के साथ शुरू के साथ एक एकत्रीकरण परिणाम प्राप्त करने के लिए यहाँ उम्मीद थी: मेरी प्रारंभिक प्रयास के बाद क्वेरी था। हालांकि, इसके बजाय एकत्रीकरण उन सभी कारों का उपयोग करता है जो शीर्ष-स्तरीय दस्तावेज़ में हैं जिनमें मेल खाने वाले घोंसले वाले दस्तावेज़ भी शामिल हैं। यही है, उपर्युक्त उदाहरण में "वोक्सवैगन" भी गिना जाएगा क्योंकि शीर्ष-स्तरीय दस्तावेज़ में एक कार भी होती है जो मेल खाता है।

मैं मिलान किए गए नेस्टेड दस्तावेज़ों का एकत्रीकरण कैसे प्राप्त कर सकता हूं?

उत्तर

9

मतलब समय मैं यह समझ गए होंगे में:

"aggregations" : { 
    "cars" :{ 
     "nested" : { 
     "path" : "cars" 
     }, 
     "aggs" : { 
     "cars-filter" : { 
      "filter" : { 
      "query" : { 
       "query_string" : { 
       "fields" : ["cars.name"], 
       "query" : "Tes*" 
       } 
      } 
      }, 
      "aggs" : { 
      "cars" : { 
       "terms" : { 
       "field" : "cars.id" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
+0

क्या आप वाकई इस कोड काम करता हैं: यह एक फिल्टर एकत्रीकरण प्राप्त करने के लिए तो जैसे शब्दों एकत्रीकरण के आसपास जोड़ा जाना चाहिए? मुझे एक ही समस्या का सामना करना पड़ रहा है, लेकिन जब मैं आपका कोड आज़माता हूं तो मुझे [क्वेरी] " –

+0

के लिए पंजीकृत एक 'parsing_exception'" कोई [क्वेरी] मिलता है, यह निश्चित रूप से काम करता है जब मैंने यह क्वेरी बनाई, लेकिन ईएस हैन का क्वेरी प्रारूप' टी हमेशा पीछे संगत रहा। आईआईआरसी मैंने ES1.x के लिए यह प्रश्न लिखा है, नए संस्करण इसे स्वीकार नहीं कर सकते हैं। – Tiddo

+0

हां, @ टिडो - मुझे आपके जैसा ही प्रतिक्रिया मिलती है। वर्तमान संस्करण के लिए यह कैसे नहीं देख सकता है। अगर आपको इसके साथ कहीं भी मिला तो मुझे बताएं। – danieljames

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