2013-04-12 8 views
5

उदाहरण मौजूद नहीं है Upsert के लिए है:Elasticsearch अद्यतन एपीआई अगर एक क्षेत्र

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{ 
    "script" : "ctx._source.counter += count", 
    "params" : { 
     "count" : 4 
    }, 
    "upsert" : { 
     "counter" : 1 
    } 
}' 

जो करता है, तो दस्तावेज़ पहले से मौजूद नहीं है काम करता है।

कहें कि मैं एक ऐसा फ़ील्ड अपडेट करना चाहता हूं जो आवश्यक रूप से मौजूद न हो, लेकिन दस्तावेज़ मौजूद है। उदाहरण के लिए, दस्तावेज़ में अभी तक काउंटर फ़ील्ड नहीं हो सकता है।

मैं ऐसा करने के लिए कैसे जा सकता हूं?

उत्तर

9

यदि क्षेत्र मौजूद है की जाँच करने के अद्यतन स्क्रिप्ट का उपयोग कर सकते हैं:

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{ 
    "script" : "if(ctx._source.containsKey(\"counter\")){ ctx._source.counter += count; } else { ctx._source.counter = 1; }", 
    "params" : { 
     "count" : 4 
    }, 
    "upsert" : { 
     "counter" : 1 
    } 
}' 
+0

बढ़िया! क्या आपको पता है कि क्या ऐसी कोई साइट है जो वास्तव में एमवीईएल भाषा की व्याख्या करेगी? मैंने इसे सीखने के लिए अपनी पूरी कोशिश की, लेकिन कोई सभ्य संसाधन नहीं मिला। http://mvel.codehaus.org/Language+Guide+for+2.0 भयानक है और कुछ भी नहीं – eran

+1

यह सबसे अच्छा संसाधन है जिसे मैं जानता हूं। मेरी सलाह [जावास्क्रिप्ट प्लगइन] स्थापित करने के लिए होगी (https://github.com/elasticsearch/elasticsearch-lang-javascript) और जावास्क्रिप्ट पर अपनी स्क्रिप्टिंग भाषा के रूप में स्विच करें। – imotov

+0

स्क्रिप्टिंग भाषा के बारे में elasticsearch दस्तावेज़ से: 'स्क्रिप्टिंग मॉड्यूल डिफ़ॉल्ट ग्रोवी द्वारा उपयोग किया जाता है (पहले 1.3.x और पहले में mvel) ' –

0

अपडेट अनुरोध का सबसे सरल रूप रूप doc पैरामीटर, बस हो जाता है जो के साथ विलय कर एक आंशिक दस्तावेज़ स्वीकार करता है मौजूदा दस्तावेज़। ऑब्जेक्ट्स एक साथ विलय कर रहे हैं, मौजूदा स्केलर फ़ील्ड ओवरराइट किए गए हैं, और नए फ़ील्ड जोड़े गए हैं। Partial Updates to Documents

उदाहरण के लिए, देखें

(1) सिर्फ एक क्षेत्र के साथ एक नया दस्तावेज़ बनाएं, field1

curl -XPOST localhost:9200/myidx/mytp/myid?pretty -d '{ 
    "field1" : 1 
}' 

आपका दस्तावेज़ है,

"_source" : { 
    "field1" : 1 
} 

(2) आंशिक अद्यतन एक गैर -existing क्षेत्र, field2

curl -XPOST localhost:9200/myidx/mytp/myid/_update?pretty -d '{ 
    "doc" : { 
     "field2" : 2 
    } 
}' 

आपका दस्तावेज़ है,

"_source" : { 
    "field1" : 1, 
    "field2" : 2 
} 

(3) बेशक, आप मौजूदा अद्यतन कर सकते हैं और गैर मौजूदा क्षेत्रों simutaneously

curl -XPOST localhost:9200/myidx/mytp/myid/_update?pretty -d '{ 
    "doc" : { 
     "field2" : 200, 
     "field3" : 3 
    } 
}' 

आपका दस्तावेज़ है,

"_source" : { 
    "field1" : 1, 
    "field2" : 200, 
    "field3" : 3 
} 
संबंधित मुद्दे