MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्या मोंगो-कनेक्टर इलास्टिक्स खोज में डालने से पहले फ़ील्ड जोड़ने का समर्थन करता है?

मोंगो-कनेक्टर का उद्देश्य मोंगो डेटाबेस को किसी अन्य लक्ष्य प्रणाली, जैसे ईएस, सोलर या अन्य मोंगो डीबी के साथ सिंक्रनाइज़ करना है। सिंक्रोनाइज़िंग का अर्थ है 1:1 प्रतिकृति, इसलिए ऐसा कोई तरीका नहीं है जिससे मुझे पता हो कि मोंगो-कनेक्टर प्रतिकृति के दौरान दस्तावेज़ों को समृद्ध कर सकता है (और यह इसका इरादा भी नहीं है)।

हालांकि, ES 5 में हम जल्द ही का उपयोग करने में सक्षम होंगे। नोड्स निगलना जिसमें हम प्रोसेसिंग पाइपलाइन जिसका लक्ष्य दस्तावेज़ों को अनुक्रमित करने से पहले समृद्ध करना है।

अपडेट करें

को संशोधित करने का शायद एक तरीका है। formatters.py फ़ाइल।

transform_value में मैं जियोपॉइंट को संभालने के लिए एक केस जोड़ूंगा :

    if isinstance(value, dict):
        return self.format_document(value)
    elif isinstance(value, list):
        return [self.transform_value(v) for v in value]

    # handle Geopoint class
    elif isinstance(value, Geopoint):
        return self.format.document({'lat': value['lat'], 'lon': value['lon']})

    ...

अपडेट 2

आइए transform_element समारोह (लाइन 104 पर):

def transform_element(self, key, value):
    try:
        # add these next two lines
        if key == 'GeoPoint':
            value = {'lat': value['lat'], 'lon': value['lon']}
        # do not modify the initial code below
        new_value = self.transform_value(value)
        yield key, new_value
    except ValueError as e:
        LOG.warn("Invalid value for key: %s as %s"
                 % (key, str(e)))

3 अपडेट करें

एक और चीज जो आप आजमा सकते हैं वह है एक रूपांतरण . इसका कारण मैंने पहले उल्लेख नहीं किया है कि इसे ES 2.0 में बहिष्कृत कर दिया गया था, लेकिन ES 5.0 में आपके पास अंतर्ग्रहण नोड्स होंगे और आप निकालें प्रोसेसर

आप अपने मानचित्रण को इस प्रकार परिभाषित कर सकते हैं:

PUT my_index2
{
  "mappings": {
    "my_type2": {
      "transform": {
        "script": "ctx._source.geopoint.remove('alt'); ctx._source.geopoint.remove('valid')"
      },
      "properties": {
        "geopoint": {
          "type": "geo_point"
        }
      }
    }
  }
}

नोट:script.inline:true . जोड़कर सुनिश्चित करें कि डायनेमिक स्क्रिप्टिंग सक्षम करें करने के लिए elasticsearch.yml और अपने ES नोड को पुनरारंभ करें।

क्या होने जा रहा है कि alt फ़ील्ड अभी भी संग्रहीत _source . में दिखाई देगी लेकिन इसे अनुक्रमित नहीं किया जाएगा, और इसलिए, कोई त्रुटि नहीं होनी चाहिए।

ES 5 के साथ, आप बस एक निकालें . के साथ एक पाइपलाइन बनाएँगे प्रोसेसर, इस तरह:

PUT _ingest/pipeline/geo-pipeline
{
  "description" : "remove unsupported altitude field",
  "processors" : [
    {
      "remove" : {
        "field": "geopoint.alt"
      }
    }
  ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. arrayFilters के साथ फ़िल्टर किए गए पोजिशनल ऑपरेटर का उपयोग करके अपडेट कैसे लागू करें

  2. नेवला ढूँढता हैवनऔर अद्यतन एकाधिक फ़ील्ड अपडेट कर रहा है

  3. क्या MongoDB WiredTiger इंजन का उपयोग पूर्व-एकत्रित रिपोर्ट के लिए किया जा सकता है? (एमएमएपीवी1 के समान)

  4. IntelliJ में काम नहीं कर रहे ग्रैडल निर्भरताएं

  5. MongoDB में एकाधिक अनुक्रमणिका छोड़ते समय "इंडेक्स नाम एक स्ट्रिंग होना चाहिए" को ठीक करें