json elasticsearch सर्वर में एक जेसन फ़ाइल(100 दस्तावेज शामिल हैं) आयात करने का कोई तरीका है?




bigdata artificial-intelligence (8)

आयात करें, लेकिन आप ES API का उपयोग कर दस्तावेज़ों को अनुक्रमित कर सकते हैं।

आप प्रत्येक पंक्ति को लोड करने के लिए इंडेक्स एपीआई का उपयोग कर सकते हैं (फ़ाइल को पढ़ने और कर्ल कॉल करने के लिए किसी प्रकार का कोड इस्तेमाल करके) या इंडेक्स थोक एपीआई को लोड करने के लिए आप सभी का उपयोग कर सकते हैं। मान लें कि आपकी डेटा फ़ाइल को इसके साथ काम करने के लिए स्वरूपित किया जा सकता है।

यहां और पढ़ें: ईएस एपीआई

यदि आप शैल के साथ सहज महसूस करते हैं (परीक्षण नहीं किया गया है) तो एक साधारण शेल स्क्रिप्ट चाल चलती है:

while read line
do
curl -XPOST 'http://localhost:9200/<indexname>/<typeofdoc>/' -d "$line"
done <myfile.json

कुल मिलाकर, मैं शायद पाइथन या तो पाई या लोचदार-खोज क्लाइंट का उपयोग करूंगा।

github पर pyes
लोचदार खोज पायथन ग्राहक

Stream2es भी तेजी से डेटा को लोड करने के लिए बहुत उपयोगी है और इसमें फ़ाइल को बस स्ट्रीम करने का कोई तरीका हो सकता है। (मैंने फ़ाइल का परीक्षण नहीं किया है, लेकिन इसे एएस परफ परीक्षण के लिए विकिपीडिया दस्तावेज़ लोड करने के लिए उपयोग किया है)

क्या elasticsearch सर्वर में JSON फ़ाइल (100 दस्तावेज़ शामिल हैं) आयात करने का कोई तरीका है? मैं एएस-सर्वर में एक बड़ी जेसन फ़ाइल आयात करना चाहता हूं ..


आप Elasticsearch Gatherer प्लगइन का उपयोग कर सकते हैं

Elasticsearch के लिए gatherer प्लगइन स्केलेबल डेटा लाने और अनुक्रमण के लिए एक ढांचा है। सामग्री एडेप्टर गैथेरर ज़िप अभिलेखागार में कार्यान्वित किए जाते हैं जो एक विशेष प्रकार के प्लगइन हैं जिन्हें लोचदार खोज नोड्स पर वितरित किया जा सकता है। वे नौकरी के अनुरोध प्राप्त कर सकते हैं और उन्हें स्थानीय कतार में निष्पादित कर सकते हैं। नौकरी राज्यों को एक विशेष सूचकांक में बनाए रखा जाता है।

यह प्लगइन विकास में है।

मील का पत्थर 1 - नोड्स के लिए gatherer ज़िप को तैनात करें

मील का पत्थर 2 - नौकरी विनिर्देश और निष्पादन

मील का पत्थर 3 - जेडीबीसी नदी को जेडीबीसी गेटरर में भेजना

मील का पत्थर 4 - लोड / कतार लंबाई / नोड नाम, क्रॉन नौकरियों द्वारा गैटरर जॉब वितरण

मील का पत्थर 5 - अधिक gatherers, अधिक सामग्री एडेप्टर

संदर्भ https://github.com/jprante/elasticsearch-gatherer


आप esbulk , एक तेज़ और सरल थोक esbulk उपयोग कर सकते हैं:

$ esbulk -index myindex file.ldj

यहां एक asciicast जो इसे प्रोजेक्ट गुटेनबर्ग डेटा को लगभग 11 के asciicast लोड कर रहा है।

अस्वीकरण: मैं लेखक हूँ।


जैसा कि पहले से ही डडूनेट का उल्लेख किया गया है, थोक एपीआई शायद जाने का रास्ता है। थोक प्रोटोकॉल के लिए अपनी फ़ाइल को बदलने के लिए, आप jq उपयोग कर सकते हैं।

फ़ाइल मानते हुए केवल दस्तावेज़ ही हैं:

$ echo '{"foo":"bar"}{"baz":"qux"}' | 
jq -c '
{ index: { _index: "myindex", _type: "mytype" } },
. '

{"index":{"_index":"myindex","_type":"mytype"}}
{"foo":"bar"}
{"index":{"_index":"myindex","_type":"mytype"}}
{"baz":"qux"}

और यदि फ़ाइल में शीर्ष स्तर की सूची में दस्तावेज़ शामिल हैं तो उन्हें पहले अनचाहे होना होगा:

$ echo '[{"foo":"bar"},{"baz":"qux"}]' | 
jq -c '
.[] |
{ index: { _index: "myindex", _type: "mytype" } },
. '

{"index":{"_index":"myindex","_type":"mytype"}}
{"foo":"bar"}
{"index":{"_index":"myindex","_type":"mytype"}}
{"baz":"qux"}

jq's -c ध्वज सुनिश्चित करता है कि प्रत्येक दस्तावेज़ स्वयं ही एक रेखा पर है।

यदि आप सीधे पाइप को पाइप करना चाहते हैं, तो आप --data-binary @- , और न केवल --data-binary @- का उपयोग करना चाहेंगे, अन्यथा कर्ल फिर से न्यूलाइन को पट्टी कर देगा।


एक तरीका है कि एक बाश स्क्रिप्ट बनाना जो थोक प्रविष्टि करता है:

curl -XPOST http://127.0.0.1:9200/myindexname/type/_bulk?pretty=true --data-binary @myjsonfile.json

सम्मिलित करने के बाद, गिनती प्राप्त करने के लिए यह आदेश चलाएं:

curl http://127.0.0.1:9200/myindexname/type/_count

Stream2es आईएमओ का सबसे आसान तरीका है।

उदाहरण के लिए जेएसओएन दस्तावेजों की एक सूची वाली "some.json" फ़ाइल मानते हुए, प्रति पंक्ति एक:

curl -O download.elasticsearch.org/stream2es/stream2es; chmod +x stream2es
cat some.json | ./stream2es stdin --target "http://localhost:9200/my_index/my_type

आपको थोक एपीआई का उपयोग करना चाहिए। ध्यान दें कि प्रत्येक जेसन दस्तावेज़ से पहले आपको हेडर लाइन जोड़नी होगी।

$ cat requests
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests; echo
{"took":7,"items":[{"create":{"_index":"test","_type":"type1","_id":"1","_version":1,"ok":true}}]}

जेक एक हल्के और लचीला कमांड लाइन जेएसओएन प्रोसेसर है।

उपयोग:

cat file.json | jq -c '.[] | {"index": {"_index": "bookmarks", "_type": "bookmark", "_id": .id}}, .' | curl -XPOST localhost:9200/_bulk --data-binary @-

हम फ़ाइल फ़ाइल.जेसन ले रहे हैं और कॉम्पैक्ट आउटपुट बनाने के लिए पहली बार जेसी के साथ अपनी सामग्री को पाइप कर रहे हैं। यहां गले लगाना है: हम इस तथ्य का लाभ उठा रहे हैं कि जेक न ​​केवल एक बल्कि इनपुट की प्रति पंक्ति एकाधिक वस्तुओं का निर्माण कर सकता है। प्रत्येक पंक्ति के लिए, हम नियंत्रण जेएसओएन लोचदार खोज की जरूरत बना रहे हैं (हमारी मूल वस्तु से आईडी के साथ) और दूसरी पंक्ति बनाना जो सिर्फ हमारे मूल JSON ऑब्जेक्ट (।) है।

इस बिंदु पर हमारे पास हमारे JSON ने जिस तरह से Elasticsearch की थोक एपीआई की अपेक्षा की है, प्रारूपित किया है, इसलिए हम इसे केवल पाइप करने के लिए पाइप करते हैं जो इसे Elasticsearch पर पोस्ट करता है!

केविन मार्श को क्रेडिट जाता है





elasticsearch-plugin