ইলাস্টিকসার্কে একটি জেএসওএন ফাইল আমদানি / সূচক করুন


90

আমি ইলাস্টিকসার্কে নতুন এবং এখন অবধি ম্যানুয়ালি ডেটা প্রবেশ করছিলাম। উদাহরণস্বরূপ আমি এই জাতীয় কিছু করেছি:

$ 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 ফাইল আমদানি করব? ম্যাপিংটি সঠিক কিনা তা নিশ্চিত করার জন্য প্রথমে আমার কী পদক্ষেপ নিতে হবে?


উত্তর:


89

কার্ল সহ কোনও ফাইল ব্যবহার করতে চাইলে সঠিক কমান্ডটি হ'ল:

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

ইলাস্টিক অনুসন্ধানটি স্কিমহীন, অতএব আপনার অগত্যা কোনও ম্যাপিংয়ের দরকার নেই। আপনি যদি জসনকে যেমনটি প্রেরণ করেন এবং আপনি ডিফল্ট ম্যাপিং ব্যবহার করেন তবে প্রতিটি ক্ষেত্রকে মান বিশ্লেষক ব্যবহার করে সূচিযুক্ত এবং বিশ্লেষণ করা হবে ।

আপনি কমান্ড লাইন মাধ্যমে Elasticsearch সাথে যোগাযোগ করার জন্য চান, আপনি কটাক্ষপাত আছে করতে পারেন elasticshell যা কার্ল চেয়ে একটি সামান্য বিট handier হওয়া উচিত।

2019-07-10: লক্ষ করা উচিত যে কাস্টম ম্যাপিংয়ের ধরণগুলি অবচিত এবং ব্যবহার করা উচিত নয়। কোনটি সূচকটি ছিল এবং কোনটি "টেস্ট" নামকরণ দুটোকেই বিভ্রান্তিকর বলে মনে হচ্ছে তা সহজ করার জন্য আমি উপরের url তে টাইপটি আপডেট করেছি।


4
আমি আমার পক্ষে কাজ করি না, যখন আমি আপনার আদেশটি টাইপ করি তখন কনসোল কোনও ডেটা সরবরাহ করে না।
Konrad

4
@ কনরাড আপনি কি প্রতিস্থাপন jfblouvmlxecs01করেছেন localhost, তাই না?
এহতেশ চৌধুরী

4
ক্লওয়েন - "@" জর্সন ফাইল থেকে ডেটা লোড করতে কার্লকে বলে।
অলিভার

4
হাই, আমি স্থিতিস্থাপক অনুসন্ধানেও নতুন anyone
স্বাহীদ

4
জসন ফাইল কোথায় সঞ্চয় করবেন?
AV94

27

বর্তমান দস্তাবেজগুলি অনুসারে, https://www.elastic.co/guide/en/elasticsearch/references/current/docs-bulk.html :

যদি আপনি কার্ল করতে পাঠ্য ফাইলের ইনপুট সরবরাহ করে থাকেন তবে আপনাকে অবশ্যই প্লেইন-ডি-এর পরিবর্তে --ডাটা-বাইনারি পতাকা ব্যবহার করতে হবে। পরেরটি নিউলাইনগুলি সংরক্ষণ করে না।

উদাহরণ:

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

4
মনে রাখবেন যে _বুলক লোড জেসন ফাইলটি কোনও বৈধ জেএসন ফাইল বৈধ নয়; সিনট্যাক্স _বুল্ক এপিআই লিঙ্কে সরবরাহ করা হয়েছে। এছাড়াও, আপনাকে এই উদাহরণগুলিতে নির্দেশিত হিসাবে একটি _id সরবরাহ করতে হবে না; _id বাদ দিলে একটি স্বয়ংক্রিয় উত্পাদিত _id সরবরাহ করা হবে।
স্টিভ টারভার

17

এই ধরণের জিনিসটির জন্য আমরা একটি ছোট সরঞ্জাম তৈরি করেছি https://github.com/taskrabbit/elasticsearch-dump


6
প্রদত্ত উদাহরণগুলি এখানে জিজ্ঞাসা করা প্রশ্নটি কভার করে না। যদি আমরা ইনপুট হিসাবে জসন ফাইল এবং আউটপুট হিসাবে ইলাস্টিক অনুসন্ধান ইউআরএল দিই তা কি কাজ করবে?
jgr0

আমি জসনে সূচক রফতানি করতে এটি ব্যবহার করছি। ধন্যবাদ
কৃষ্ণ চৈতন্য গোপালুনি

নিম্নলিখিত কমান্ড ব্যবহার করুন। elasticdump --input=/path/to/file.json --output=http://'username:password'@localhost:9200/indexname --type=data'username:password@'আপনার প্রয়োজন না হলে সরান ।
কৃষ্ণ চৈতন্য গোপালুনি

11

আমি ইলাস্টিকসার্চ_লোডার লেখক
এই সঠিক সমস্যার জন্য আমি ইএসএল লিখেছি।

আপনি এটি পিপ দিয়ে ডাউনলোড করতে পারেন:

pip install elasticsearch-loader

এবং তারপরে আপনি ইস্যু করে জসন ফাইলগুলি স্থিতিস্থাপক অনুসন্ধানে লোড করতে সক্ষম হবেন:

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 (HTTP সংযোগপুল (হোস্ট = 'লোকালহোস্ট', পোর্ট = 9200): পড়ার সময় শেষ হয়েছে। (সময়সীমাটি পড়ুন = 10.0)) প্রসেসিংয়ের সময়
চিয়েল

এটি কাজ করে না এই বিষয়টি ছাড়াও আপনি ইউআরএল এবং পোর্ট কোথায় নির্দিষ্ট করবেন?
চিয়েল

আপনি গিটহাব পৃষ্ঠাটি elasticsearch_loader --helpদেখতে বা সম্পূর্ণ সহায়তার বার্তাটি দেখতে চালাতে পারেন। আপনি হোস্টটি: পোর্ট দিয়ে নির্দিষ্ট করতে পারেন--es-host http://hostname:port
মোশেজাদা

ভাল লাগল সেটি বাদে--type অপ্রয়োজনীয় হয়ে যেমন Elasticsearch 6 সংস্করণ ধরনের সরিয়ে ফেলা হবে elastic.co/guide/en/elasticsearch/reference/6.0/...
Vlad টি

9

একটি জিনিস যা আমি কাউকে উল্লেখ করতে দেখিনি: JSON ফাইলে অবশ্যই "খাঁটি" জেএসএন ফাইলের প্রতিটি লাইনের জন্য সূচকটি নির্দিষ্ট করে একটি লাইন থাকতে হবে line

আইই

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

এটি ছাড়া কোনও কিছুই কার্যকর হয় না এবং এটি আপনাকে বলবে না


8

কেনএইচের উত্তরে যুক্ত করা হচ্ছে

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

আপনি প্রতিস্থাপন করতে পারেন @requestsসঙ্গে@complete_path_to_json_file

দ্রষ্টব্য: @ফাইল পাথের আগে গুরুত্বপূর্ণ


আপনি কি পথের জন্য কিছু উদাহরণ দিতে পারেন? আমি "@ সি: \ অ্যাকাউন্টস.জসন" দিচ্ছি এবং সেখানে রেখে দিচ্ছি, এটি এটি সনাক্ত করতে সক্ষম নয়
পীযূষ মিত্তাল

4
এটি @ "সি: \ অ্যাকাউন্টস.জসন" হওয়া উচিত
রাম প্রতাপ

so -H "কনটেন্ট-টাইপ: অ্যাপ্লিকেশন / জেসন"
ছায়া কিপ

8

আমি ঠিক নিশ্চিত করেছিলাম যে আমি জাসন ফাইলের মতো একই ডিরেক্টরিতে আছি এবং তারপর কেবল এটি চালিয়েছি

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 / _বুল্ক? সুন্দর কমান্ডের সাহায্যে ফাইলের অবস্থান দেয় give এখানে চিত্র বর্ণনা লিখুন


4
error "ত্রুটি": "ইউরি [/ পরীক্ষা / পরীক্ষা / 1 / _বুলক? সুন্দর] এবং পদ্ধতি [পোস্ট]" এর জন্য কোনও হ্যান্ডলার পাওয়া যায় নি "}
চিয়েল

error "ত্রুটি": "সামগ্রী-ধরণের শিরোনাম [পাঠ্য / সমতল] সমর্থিত নয়", "স্থিতি": 406}
এক্স X এল

5

আপনি ব্যবহার করছেন

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

যদি 'অনুরোধগুলি' কোনও জাসন ফাইল হয় তবে আপনার এটিতে পরিবর্তন করতে হবে

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

এখন এর আগে, যদি আপনার জসন ফাইলটি সূচী না করা হয়, আপনাকে জসন ফাইলের ভিতরে প্রতিটি লাইনের আগে একটি সূচক লাইন প্রবেশ করতে হবে। আপনি জিকিউ দিয়ে এটি করতে পারেন। নীচের লিঙ্কটি দেখুন: http://kevinmarsh.com/2014/10/23/ using-jq-to-import-json-into-elasticsearch.html

ইলাস্টিকসर्च টিউটোরিয়ালগুলিতে যান (উদাহরণস্বরূপ শেক্সপিয়ার টিউটোরিয়াল) এবং ব্যবহৃত জসন ফাইলের নমুনা ডাউনলোড করুন এবং এটি দেখুন। প্রতিটি জসন বস্তুর (প্রতিটি স্বতন্ত্র লাইন) সামনে একটি সূচক লাইন থাকে। আপনি jq কমান্ড ব্যবহার করার পরে এটি সন্ধান করছেন। এই ফর্ম্যাটটি বাল্ক এপিআই, প্লেইন জসন ফাইলগুলি কাজ করবে না ব্যবহার বাধ্যতামূলক।


2

ইলাস্টিকসার্চ 7.7 অনুসারে, আপনাকে সামগ্রীর ধরণটিও উল্লেখ করতে হবে:

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

1
  • আপনি যদি ইলাস্টিক অনুসন্ধান 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

0

আপনি যদি এতে ভার্চুয়ালবক্স এবং ইউবুন্টু ব্যবহার করছেন বা আপনি কেবল ইউবন্টু ব্যবহার করছেন তবে এটি কার্যকর হতে পারে

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

আপনি যদি ইলাস্টিকসার্কে কোনও জসন ফাইল আমদানি করতে চান এবং একটি সূচক তৈরি করতে চান তবে এই পাইথন স্ক্রিপ্টটি ব্যবহার করুন।

import json
from elasticsearch import Elasticsearch

es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
i = 0
with open('el_dharan.json') as raw_data:
    json_docs = json.load(raw_data)
    for json_doc in json_docs:
            i = i + 1
            es.index(index='ind_dharan', doc_type='doc_dharan', id=i, body=json.dumps(json_doc))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.