web-dev-qa-db-fra.com

Importer/indexer un fichier JSON dans Elasticsearch

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

$ 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 aussi essayé quelque chose comme ça, mais sans succès:

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

Comment importer un fichier .json? Dois-je suivre certaines étapes pour que le mappage soit correct?

67
Shawn Roller

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 schéma, vous n'avez donc pas nécessairement besoin d'un mapping. 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 standard analyzer .

Si vous souhaitez interagir avec Elasticsearch via la ligne de commande, consultez le elasticshell , qui devrait être un peu plus pratique que curl.

73
javanna

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

Si vous fournissez un fichier texte à curl, vous devez utiliser le fichier --data-binary flag à la place de plain -d. Ce dernier ne conserve pas les retours à la ligne.

Exemple: 

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

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

13
Evan

Ajout à 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.

7
Ram Pratap

il suffit d’obtenir un facteur à partir de https://www.getpostman.com/docs/environments lui donne l’emplacement du fichier avec/test/test/1/_bulk? pretty commande .  enter image description here

6
Piyush Mittal

Vous utilisez 

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

Si 'demandes' est un fichier JSON, vous devez le changer en 

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

Avant cela, si votre fichier json n’est pas indexé, vous devez insérer une ligne d’indexation 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 (par exemple, le didacticiel de Shakespeare), téléchargez l'exemple de fichier json utilisé et consultez-le. Devant chaque objet json (chaque ligne individuelle) se trouve 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 bloc. Les fichiers JSON simples ne fonctionneront pas.

4
MLS

Je suis l'auteur de 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 vous pourrez ensuite charger des fichiers JSON dans elasticsearch en publiant:

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

Je viens de faire en sorte que je suis dans le même répertoire que le fichier JSON, puis simplement couru cette

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 vous trouvez dans le même répertoire et que vous l'exécutez de cette manière ..___ Remarque: product/default/dans la commande est spécifique à mon environnement. vous pouvez l'omettre ou le remplacer par tout ce qui vous concerne.

3
Gajendra D Ambi

Une chose que je n’ai vue personne mentionner: le fichier JSON doit comporter 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 fonctionne, et il ne vous dira pas pourquoi

3
Greg Dougherty

si vous utilisez VirtualBox et UBUNTU ou si vous utilisez simplement UBUNTU, alors 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
sudarshan

J'ai écrit du code pour exposer l'API Elasticsearch via une API de système de fichiers.

C'est une bonne idée pour une exportation/importation claire de données par exemple.

J'ai créé prototype-asticdriver . Il est basé sur Fuse

 demo

0
Yaroslav Gaponov