2014-05-22 6 views
18

मैं एक मौजूदा अनुक्रमित दस्तावेज़ को अद्यतन करने का प्रयास कर रहा हूं। मैंने टैग, शीर्षक और मालिक फ़ील्ड को अनुक्रमित किया है। अब जब उपयोगकर्ता शीर्षक बदलता है, तो मुझे इंडेक्स के अंदर दस्तावेज़ ढूंढना और अपडेट करना होगा।मैं NEST का उपयोग कर ElasticSearch अनुक्रमणिका के अंदर मौजूदा दस्तावेज़ को कैसे अपडेट करूं?

क्या मुझे पूरे दस्तावेज़ या केवल शीर्षक फ़ील्ड को अपडेट और प्रतिस्थापित करना चाहिए?

public void UpdateDoc(ElasticsearchDocument doc) 
{ 
Uri localhost = new Uri("http://localhost:9200"); 
var setting = new ConnectionSettings(localhost); 
setting.SetDefaultIndex("movies"); 
var client = new ElasticClient(setting); 

IUpdateResponse resp = client.Update<ElasticsearchDocument, IndexedDocument>(
            d => d.Index("movies") 
             .Type(doc.Type) 
             .Id(doc.Id), doc); 
} 

यह अभी काम नहीं करता है। उपरोक्त कोड एक वाक्यविन्यास त्रुटि उत्पन्न करता है। क्या किसी को भी ElasticSearch के C# NEST क्लाइंट का उपयोग करके ऐसा करने का सही तरीका पता है?

उत्तर

15

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

// Create partial document with a dynamic 
    dynamic updateDoc = new System.Dynamic.ExpandoObject(); 
    updateDoc.Title = "My new title"; 

    var response = client.Update<ElasticsearchDocument, object>(u => u 
     .Index("movies") 
     .Id(doc.Id) 
     .Document(updateDoc) 
    ); 

आप NEST Update Unit Tests from the GitHub Source में अपडेट भेजने के लिए तरीके का अधिक उदाहरण मिल सकते हैं।

var task = client.UpdateAsync<ElasticsearchDocument>(
        new DocumentPath<ElasticsearchDocument>(doc), u => 
         u.Index(indexName).Doc(doc)); 
+0

updateDoc.Title = "मेरा नया शीर्षक"; सही नहीं है, यह वाक्यविन्यास त्रुटि देता है। मैं – kheya

+0

गतिशील MyDynamic = new System.Dynamic.ExpandoObject(); के कुछ अलग-अलग तरीकों का प्रयास करूंगा; यह है कि मैंने इसे कैसे किया – kheya

+0

आप 'doc.Id' कैसे प्राप्त करते हैं? क्या मुझे पहले दस्तावेज़ के लिए पूछना है? – JedatKinports

3
नेस्ट 2 एक POCO कि पहले से ही एक आईडी क्षेत्र शामिल हैं अद्यतन करने के लिए के लिए

dynamic updateFields = new ExpandoObject(); 
updateFields.IsActive = false; 
updateFields.DateUpdated = DateTime.UtcNow; 

await _client.UpdateAsync<ElasticSearchDoc, dynamic>(new DocumentPath<ElasticSearchDoc>(id), u => u.Index(indexName).Doc(updateFields)) 
8

असल में नेस्ट 2 के लिए यह है:

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