Importer / Indexer un fichier JSON dans Elasticsearch

Je suis nouveau sur Elasticsearch et saisis des données manuellement jusqu’à ce jour. 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 l’indexer dans Elasticsearch. J’ai essayé quelque chose comme ça sans succès:

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

Comment importer un fichier .json? Y a-t-il des mesures à prendre en premier pour garantir que le mappage est correct?

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 sans schemal, vous n’avez donc pas nécessairement besoin d’un mapping. Si vous envoyez le fichier json tel quel et que vous utilisez le mappage par défaut, chaque champ sera indexé et analysé à l’aide de l’ parsingur standard .

Si vous souhaitez interagir avec elasticsearch via la ligne de commande, vous pouvez jeter un coup d’œil aux elasticshell qui devraient être un peu plus faciles que curl.

Pour 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 utiliser l’indicateur –data-binary au lieu de plain -d. Ce dernier ne conserve pas les nouvelles lignes.

Exemple:

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

Nous avons créé un petit outil pour ce type de chose https://github.com/taskrabbit/elasticsearch-dump

Ajouter à la réponse de KenH

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

Vous pouvez remplacer @requests par @complete_path_to_json_file

Remarque: @ est important avant le chemin du fichier

Il suffit de demander à postman de https://www.getpostman.com/docs/environments de lui indiquer l’emplacement du fichier avec la commande / test / test / 1 / _bulk? pretty. entrer la description de l'image ici

Vous utilisez

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

Si ‘retrait’ est un fichier json, vous devez le changer pour

 $ 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 une ligne d’index avant chaque ligne du fichier json. Vous pouvez le faire avec JQ. Voir le lien ci-dessous: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html

Accédez aux didacticiels d’elasticsearch (exemple: tutoriel shakespeare) et téléchargez l’exemple de fichier json utilisé et consultez-le. En face de chaque object 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.

Je suis l’auteur d’elasticsearch_loader
J’ai écrit ESL pour ce problème précis.

Vous pouvez le télécharger avec pip:

 pip install elasticsearch-loader 

Et puis vous pourrez charger des fichiers json dans elasticsearch en émettant:

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

Une chose que personne n’a mentionnée: le fichier JSON doit avoir une ligne spécifiant l’index auquel appartient la ligne suivante, pour chaque ligne du fichier JSON “pur”.

C’EST À DIRE

 {"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 marche et ça ne vous dira pas pourquoi

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 

Je viens de m’assurer que je suis dans le même répertoire que le fichier json et ensuite 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écutez-le de cette façon. Remarque: product / default / dans la commande est quelque chose de spécifique à mon environnement. vous pouvez l’omettre ou le remplacer par tout ce qui vous concerne.