मोंगो-कनेक्टर का उद्देश्य मोंगो डेटाबेस को किसी अन्य लक्ष्य प्रणाली, जैसे ईएस, सोलर या अन्य मोंगो डीबी के साथ सिंक्रनाइज़ करना है। सिंक्रोनाइज़िंग का अर्थ है 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"
}
}
]
}