Saya baru mengenal Elasticsearch dan telah memasukkan data secara manual hingga saat ini. Misalnya saya telah melakukan sesuatu seperti ini:
$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}'
Sekarang saya memiliki file .json dan saya ingin mengindeksnya ke Elasticsearch. Saya sudah mencoba sesuatu seperti ini juga, tetapi tidak berhasil:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json
Bagaimana cara mengimpor file .json? Apakah ada langkah-langkah yang harus saya ambil terlebih dahulu untuk memastikan pemetaan sudah benar?
json
elasticsearch
Shawn Roller
sumber
sumber
Jawaban:
Perintah yang tepat jika Anda ingin menggunakan file dengan curl adalah ini:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/_doc/1' -d @lane.json
Elasticsearch tidak memiliki skema, oleh karena itu Anda tidak perlu pemetaan. Jika Anda mengirim json apa adanya dan Anda menggunakan pemetaan default, setiap bidang akan diindeks dan dianalisis menggunakan penganalisis standar .
Jika Anda ingin berinteraksi dengan Elasticsearch melalui baris perintah, Anda mungkin ingin melihat elasticshell yang seharusnya sedikit lebih praktis daripada curl.
10-07-2019: Perlu diperhatikan bahwa jenis pemetaan khusus sudah tidak digunakan lagi dan tidak boleh digunakan. Saya memperbarui tipe di url di atas untuk memudahkan melihat mana yang merupakan indeks dan mana yang merupakan tipe karena keduanya bernama "test" membingungkan.
sumber
jfblouvmlxecs01
denganlocalhost
, kan?Sesuai dokumen saat ini, https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html :
Contoh:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
sumber
Kami membuat alat kecil untuk hal semacam ini https://github.com/taskrabbit/elasticsearch-dump
sumber
elasticdump --input=/path/to/file.json --output=http://'username:password'@localhost:9200/indexname --type=data
. Hapus'username:password@'
jika Anda tidak perlu.Saya penulis elasticsearch_loader
Saya menulis ESL untuk masalah ini.
Anda dapat mendownloadnya dengan pip:
pip install elasticsearch-loader
Dan kemudian Anda akan dapat memuat file json ke elasticsearch dengan menerbitkan:
elasticsearch_loader --index incidents --type incident json file1.json file2.json
sumber
index
baris wajib sebelum setiap dokumen.elasticsearch_loader --help
untuk melihat pesan bantuan lengkap. Anda dapat menentukan host: port dengan--es-host http://hostname:port
--type
menjadi mubazir karena Elasticsearch menghapus jenis dalam 6 versi elastic.co/guide/en/elasticsearch/reference/6.0/…Satu hal yang belum pernah saya lihat siapa pun menyebutkan: file JSON harus memiliki satu baris yang menentukan indeks milik baris berikutnya, untuk setiap baris dari file JSON "murni".
YAITU
{"index":{"_index":"shakespeare","_type":"act","_id":0}} {"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
Tanpa itu, tidak ada yang berhasil, dan tidak akan memberi tahu Anda alasannya
sumber
Menambah jawaban KenH
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Anda bisa mengganti
@requests
dengan@complete_path_to_json_file
Catatan:
@
penting sebelum jalur filesumber
Saya hanya memastikan bahwa saya berada di direktori yang sama dengan file json dan kemudian menjalankan ini
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json
Jadi jika Anda juga pastikan Anda berada di direktori yang sama dan menjalankannya dengan cara ini. Catatan: produk / default / dalam perintah adalah sesuatu yang spesifik untuk lingkungan saya. Anda dapat menghilangkan atau menggantinya dengan apa pun yang relevan bagi Anda.
sumber
dapatkan saja tukang pos dari https://www.getpostman.com/docs/environments berikan lokasi file dengan perintah / test / test / 1 / _bulk? pretty.
sumber
Anda menggunakan
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Jika 'request' adalah file json maka Anda harus mengubahnya menjadi
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json
Sekarang sebelum ini, jika file json Anda tidak diindeks, Anda harus memasukkan baris indeks sebelum setiap baris di dalam file json. Anda dapat melakukan ini dengan JQ. Lihat tautan di bawah ini: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html
Buka tutorial elasticsearch (contoh tutorial shakespeare) dan unduh contoh file json yang digunakan dan lihatlah. Di depan setiap objek json (setiap baris) terdapat garis indeks. Inilah yang Anda cari setelah menggunakan perintah jq. Format ini wajib untuk menggunakan API massal, file json biasa tidak akan berfungsi.
sumber
Pada Elasticsearch 7.7, Anda juga harus menentukan jenis konten:
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/_bulk --data-binary @<absolute path to JSON file>
sumber
Jika Anda menggunakan elastic search 7.7 atau versi di atasnya, ikuti perintah di bawah ini.
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk? pretty&refresh" --data-binary @"/Users/waseem.khan/waseem/elastic/account.json"
Di jalur file di atas adalah
/Users/waseem.khan/waseem/elastic/account.json
.Jika Anda menggunakan versi elastis search 6.x maka Anda dapat menggunakan perintah di bawah ini.
curl -X POST localhost:9200/bank/_bulk?pretty&refresh --data-binary @"/Users/waseem.khan/waseem/elastic/account.json" -H 'Content-Type: application/json'
Catatan : Pastikan di file .json Anda di akhir Anda akan menambahkan satu baris kosong jika tidak Anda akan mendapatkan pengecualian di bawah.
"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
sumber
jika Anda menggunakan VirtualBox dan UBUNTU di dalamnya atau Anda hanya menggunakan UBUNTU maka ini bisa bermanfaat
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
sumber
Saya menulis beberapa kode untuk mengekspos API Elasticsearch melalui API Sistem File.
Sebaiknya, misalnya, ekspor / impor data yang jelas.
Saya membuat prototipe elasticdriver . Ini didasarkan pada FUSE
sumber
Jika Anda ingin mengimpor file json ke Elasticsearch dan membuat indeks, gunakan skrip Python ini.
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))
sumber