इलस्टिक्स खोज में एक JSON फ़ाइल आयात / अनुक्रमित करें


89

मैं एलीटसर्च के लिए नया हूं और इस बिंदु तक मैन्युअल रूप से डेटा दर्ज कर रहा हूं। उदाहरण के लिए मैंने कुछ इस तरह किया है:

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elastic Search"
}'

मेरे पास अब एक .json फ़ाइल है और मैं इसे एलीस्टेक खोज में अनुक्रमित करना चाहता हूं। मैंने भी कुछ इस तरह की कोशिश की है, लेकिन कोई सफलता नहीं:

curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json

मैं -json फ़ाइल कैसे आयात करूं? क्या मैपिंग सही है यह सुनिश्चित करने के लिए मुझे पहले कदम उठाने की आवश्यकता है?


जवाबों:


88

यदि आप कर्ल के साथ किसी फ़ाइल का उपयोग करना चाहते हैं तो सही कमांड यह है:

curl -XPOST 'http://jfblouvmlxecs01:9200/test/_doc/1' -d @lane.json

एलेस्टिक्स खोज स्कीमलेस है, इसलिए आपको मैपिंग की आवश्यकता नहीं है। यदि आप जैसन को भेजते हैं, जैसा कि यह है और आप डिफ़ॉल्ट मैपिंग का उपयोग करते हैं, तो हर क्षेत्र को मानक विश्लेषक का उपयोग करके अनुक्रमित और विश्लेषण किया जाएगा ।

यदि आप कमांड लाइन के माध्यम से इलास्टिसर्च के साथ बातचीत करना चाहते हैं, तो आप उस इलास्टिक्स पर एक नज़र डालना चाहते हैं जो कर्ल की तुलना में थोड़ा आसान होना चाहिए।

2019-07-10: ध्यान दिया जाना चाहिए कि कस्टम मैपिंग प्रकारों को पदावनत किया जाता है और उनका उपयोग नहीं किया जाना चाहिए। मैंने ऊपर दिए गए url में टाइप को अपडेट किया ताकि यह देखना आसान हो जाए कि कौन सा इंडेक्स था और "टेस्ट" नाम के दोनों प्रकार का टाइप भ्रमित करने वाला था।


1
मैं आपके लिए काम नहीं करता, जब मैं आपका आदेश टाइप करता हूं तो कंसोल कोई डेटा प्रदान नहीं करता है।
कोनराड

2
@Konrad आप के jfblouvmlxecs01साथ बदल दिया localhost, है ना?
एहतेश चौधरी

2
clwen - "@" कर्ल को json फाइल से डेटा लोड करने के लिए कहता है।
ओलिवर

1
नमस्ते मैं भी लोचदार खोज में नया हूँ किसी को भी कृपया मुझे gudie कर सकते हैं जहां इन .json फ़ाइलों को स्टोर करने के लिए?
11

2
Json फाइल कहाँ स्टोर करें?
AV94

26

वर्तमान डॉक्स के अनुसार, https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulb.html :

यदि आप कर्ल को पाठ फ़ाइल इनपुट प्रदान कर रहे हैं, तो आपको सादे-बाइनरी फ्लैग का उपयोग करना चाहिए बजाय सादे -d के। उत्तरार्द्ध newlines संरक्षित नहीं करता है।

उदाहरण:

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests

1
ध्यान दें कि _bulk लोड json फ़ाइल मान्य json फ़ाइल मान्य नहीं है; सिंटैक्स _bulk API लिंक में दिया गया है। इसके अलावा, आपको इन उदाहरणों में संकेत के रूप में एक _id प्रदान करने की आवश्यकता नहीं है; _id छूटने पर एक ऑटो-जेनरेट _id प्रदान किया जाएगा।
स्टीव टेरवर

16

हमने इस तरह की चीज़ के लिए एक छोटा सा उपकरण बनाया https://github.com/taskrabbit/elasticsearch-dump


6
दिए गए उदाहरण यहां पूछे गए प्रश्न को कवर नहीं करते हैं। अगर हम json फाइल को इनपुट के रूप में और लोचदार सर्च यूआरएल को आउटपुट के रूप में देते हैं तो यह काम करेगा?
jgr0

11

मैं elasticsearch_loader का लेखक
हूं मैंने इस सटीक समस्या के लिए ईएसएल लिखा था।

आप इसे पाइप से डाउनलोड कर सकते हैं:

pip install elasticsearch-loader

और फिर आप जारी करके elasticsearch में json फ़ाइलों को लोड करने में सक्षम होंगे:

elasticsearch_loader --index incidents --type incident json file1.json file2.json

यह अच्छा है! यह indexप्रत्येक दस्तावेज़ से पहले अनिवार्य लाइन जोड़ता है ।
dr0i

2018-10-04 11: 51: 40.395741 ERROR प्रयास [1/1] को अपवाद मिला, यह एक स्थायी डेटा हानि है, कोई और अधिक पुनर्प्रयास नहीं 2018-10-04 11: 51: 40.395741 वॉर्न चंक 0 अपवाद (कनेक्शन टाइमआउट) - ReadTimeoutError (HTTPConnectionPool (host = 'localhost', port = 9200): समय-समय पर (टाइमआउट = 10.0 पढ़ें)) प्रोसेसिंग करते समय
चील

इस तथ्य के अलावा कि यह काम नहीं करता है, आप URL और पोर्ट कहां निर्दिष्ट करते हैं?
चील

elasticsearch_loader --helpपूर्ण सहायता संदेश देखने के लिए आप GitHub पृष्ठ पर जा सकते हैं या चला सकते हैं। आप मेजबान को निर्दिष्ट कर सकते हैं: पोर्ट के साथ--es-host http://hostname:port
मोशेज़ादा

अच्छा लगा। सिवाय इसके कि --typeएलिनाटिक्स खोज बेमानी हो जाती है क्योंकि एलिस्टरिक्स 6 संस्करण में प्रकारों को निकालता है

8

केनह के जवाब में जोड़ना

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests

आप बदल सकते हैं @requestsसाथ@complete_path_to_json_file

नोट: @फ़ाइल पथ से पहले महत्वपूर्ण है


क्या आप पथ के लिए कुछ उदाहरण दे सकते हैं मैं "@c: \ accounts.json" दे रहा हूं और इसे वहां भी रख रहा हूं, फिर भी इसका पता लगाने में सक्षम नहीं है
पीयूष मित्तल

4
यह @ "c: \ accounts.json" होना चाहिए
राम प्रताप

हैडर फ्लैग जोड़ें जैसे -H "कंटेंट-टाइप: एप्लीकेशन / जसन"
Shady Kip

8

एक बात जो मैंने किसी का उल्लेख नहीं देखा है: JSON फ़ाइल में "शुद्ध" JSON फ़ाइल की प्रत्येक पंक्ति के लिए अगली पंक्ति के सूचकांक को निर्दिष्ट करने वाली एक पंक्ति होनी चाहिए।

अर्थात

{"index":{"_index":"shakespeare","_type":"act","_id":0}}
{"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}

इसके बिना, कुछ भी काम नहीं करता है, और यह आपको नहीं बताएगा कि क्यों


8

मैंने अभी यह सुनिश्चित किया है कि मैं json फ़ाइल के समान निर्देशिका में हूं और फिर बस इसे चलाया

curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json

इसलिए यदि आप भी सुनिश्चित करें कि आप उसी निर्देशिका में हैं और इसे इस तरह से चलाएं। नोट: उत्पाद / डिफ़ॉल्ट / कमांड में मेरे वातावरण के लिए कुछ विशिष्ट है। आप इसे छोड़ सकते हैं या जो भी आपके लिए प्रासंगिक है, उसे बदल सकते हैं।


6

बस https://www.getpostman.com/docs/en एन्वायरनमेंट से पोस्टमैन प्राप्त करें , इसे / परीक्षण / परीक्षण / 1 / _bulk! सुंदर कमांड के साथ फ़ाइल स्थान दें। यहाँ छवि विवरण दर्ज करें


2
{"त्रुटि": "कोई हैंडलर uri [/ test / test / 1 / _bulk? सुंदर] और विधि [POST]" के लिए नहीं मिला
Chiel

{"त्रुटि": "सामग्री-प्रकार हेडर [पाठ / सादा] समर्थित नहीं है", "स्थिति": 406}
X.

5

आप उपयोग कर रहे हैं

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests

अगर 'रिक्वेस्ट' एक जोंस फाइल है तो आपको इसे बदलना होगा

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json

अब इससे पहले, यदि आपकी json फाइल इंडेक्स नहीं हुई है, तो आपको json फाइल के अंदर प्रत्येक लाइन से पहले एक इंडेक्स लाइन डालनी होगी। आप इसे JQ के साथ कर सकते हैं। नीचे दिए गए लिंक देखें: http://kevinmarsh.com/2014/10/23/use-jq-to-import-json-into-elasticsearch.html

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


1

एलिस्टिक्स खोज 7.7 के अनुसार, आपको सामग्री प्रकार भी निर्दिष्ट करना होगा:

curl -s -H "Content-Type: application/json" -XPOST localhost:9200/_bulk --data-binary @<absolute path to JSON file>

0

अगर आप इसमें VirtualBox और UBUNTU का उपयोग कर रहे हैं या आप बस UBUNTU का उपयोग कर रहे हैं तो यह उपयोगी हो सकता है

wget https://github.com/andrewvc/ee-datasets/archive/master.zip
sudo apt-get install unzip (only if unzip module is not installed)
unzip master.zip
cd ee-datasets
java -jar elastic-loader.jar http://localhost:9200 datasets/movie_db.eloader

0

मैंने एक फाइलसिस्टम एपीआई के माध्यम से एलिटिक्स खोज एपीआई को उजागर करने के लिए कुछ कोड लिखे।

उदाहरण के लिए डेटा के स्पष्ट निर्यात / आयात के लिए यह अच्छा विचार है।

मैंने प्रोटोटाइप इलास्टिकड्राइव बनाया । यह FUSE पर आधारित है

डेमो


0
  • यदि आप लोचदार खोज 7.7 या इसके बाद के संस्करण का उपयोग कर रहे हैं तो नीचे दिए गए आदेश का पालन करें।

    curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk? pretty&refresh" --data-binary @"/Users/waseem.khan/waseem/elastic/account.json"

  • ऊपर फ़ाइल पथ है /Users/waseem.khan/waseem/elastic/account.json

  • यदि आप लोचदार खोज 6.x संस्करण का उपयोग कर रहे हैं तो आप नीचे दिए गए आदेश का उपयोग कर सकते हैं।

curl -X POST localhost:9200/bank/_bulk?pretty&refresh --data-binary @"/Users/waseem.khan/waseem/elastic/account.json" -H 'Content-Type: application/json'

नोट : अपनी .json फ़ाइल में यह सुनिश्चित करें कि आप अंत में एक खाली लाइन जोड़ देंगे अन्यथा आप अपवाद से नीचे मिलेंगे।

"error" : {
"root_cause" : [
  {
    "type" : "illegal_argument_exception",
    "reason" : "The bulk request must be terminated by a newline [\n]"
  }
],
"type" : "illegal_argument_exception",
"reason" : "The bulk request must be terminated by a newline [\n]"
},
`enter code here`"status" : 400
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.