Importer / indexer un fichier JSON dans Elasticsearch

Je suis nouveau sur Elasticsearch et j'ai entré des données manuellement jusqu'à ce point. Par exemple j'ai fait quelque chose comme ceci:

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

J'ai maintenant un .fichier json et je veux indexer cela dans Elasticsearch. J'ai essayé quelque chose comme ça aussi, mais pas de succès:

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

Comment puis-je importer un .fichier json? Y a-t-il des mesures que je dois prendre en premier pour m'assurer que le mappage est correct?

61
demandé sur Chiel 2013-04-11 01:18:48

10 réponses

La bonne commande si vous voulez utiliser un fichier avec curl est la suivante:

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

Elasticsearch est schemaless, donc vous n'avez pas nécessairement besoin d'un mappage. Si vous envoyez le json tel quel et que vous utilisez le mappage par défaut, chaque champ sera indexé et analysé à l'aide de analyseur standard.

Si vous voulez interagir avec Elasticsearch via la ligne de commande, vous pouvez jeter un oeil à elasticshell qui devrait être un peu plus pratique que curl.

68
répondu javanna 2018-10-04 10:03:23

Selon les documents actuels, http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html :

Si vous fournissez une entrée de fichier texte à curl, vous devez -- drapeau data-binary au lieu de plain-D. Ce dernier ne conserve pas les retours à la ligne.

Exemple:

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
23
répondu KenH 2014-11-13 00:36:25

, Nous avons fait un petit outil pour ce genre de chose https://github.com/taskrabbit/elasticsearch-dump

13
répondu Evan 2014-11-18 03:32:50

Ajouter à la réponse de KenH

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

, Vous pouvez remplacer @requests avec @complete_path_to_json_file

Remarque: @ est important avant le chemin du fichier

6
répondu Ram Pratap 2016-05-18 17:50:04

Juste obtenir facteur de https://www.getpostman.com/docs/environments Donnez-lui l'emplacement du fichier avec / test / test / 1 / _bulk?jolie commande. entrez la description de l'image ici

6
répondu Piyush Mittal 2016-10-12 04:35:40

Vous utilisez

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

Si 'requests' est un fichier json, vous devez le changer en

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

Maintenant, avant cela, si votre fichier json n'est pas indexé, vous devez insérer un index de la ligne avant chaque ligne dans le fichier json. Vous pouvez le faire avec JQ. Consultez ci-dessous le lien: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html

Allez dans les tutoriels elasticsearch (exemple le tutoriel shakespeare) et téléchargez l'exemple de fichier JSON utilisé et avoir un coup d'oeil. Devant chaque objet json (chaque ligne individuelle), il y a une ligne d'index. C'est ce que vous recherchez après avoir utilisé la commande jq. Ce format est obligatoire pour utiliser L'API en vrac, les fichiers JSON simples ne fonctionneront pas.

4
répondu MLS 2017-06-14 05:33:27

Je suis l'auteur de elasticsearch_loader
J'ai écrit ESL pour ce problème exact.

Vous pouvez le télécharger avec pip:

pip install elasticsearch-loader

Et puis vous serez en mesure de charger des fichiers json dans elasticsearch en émettant:

elasticsearch_loader --index incidents --type incident json file1.json file2.json
4
répondu MosheZada 2018-03-16 20:29:06

Une chose que je n'ai vu personne mentionner: le fichier JSON doit avoir une ligne spécifiant l'index auquel appartient la ligne suivante, pour chaque ligne du fichier JSON "pur".

I. E.

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

Sans cela, rien ne fonctionne, et il ne vous dira pas pourquoi

3
répondu Greg Dougherty 2017-05-01 14:40:08

Si vous utilisez VirtualBox et UBUNTU ou si vous utilisez simplement UBUNTU, cela peut être utile

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
1
répondu sudarshan 2014-02-24 10:35:14

Je me suis juste assuré que je suis dans le même répertoire que le fichier json, puis j'ai simplement exécuté ce

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

Donc, si vous aussi, assurez-vous que vous êtes dans le même répertoire et exécuter de cette façon. Remarque: produit// par défaut dans la commande est quelque chose de spécifique à mon environnement. vous pouvez l'omettre ou le remplacer par tout ce qui vous concerne.

1
répondu Gajendra D Ambi 2018-05-05 11:42:32