103 votes

Importer/Indexer un fichier JSON dans Elasticsearch

Je suis nouveau dans Elasticsearch et j'ai saisi les données manuellement jusqu'à présent. 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 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 d'abord prendre des mesures pour m'assurer que le mappage est correct ?

103voto

javanna Points 24751

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

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

Elasticsearch est sans schéma, donc vous n'avez 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 la fonction analyseur standard .

Si vous souhaitez interagir avec Elasticsearch par le biais de la ligne de commande, vous pouvez jeter un coup d'œil à l'application coquille élastique qui devrait être un peu plus maniable que le curl.

2019-07-10 : Il convient de noter que la coutume Types de cartographie est déprécié et ne doit pas être utilisé. J'ai mis à jour le type dans l'url ci-dessus pour qu'il soit plus facile de voir lequel était l'index et lequel était le type, car avoir les deux nommés "test" était déroutant.

30voto

KenH Points 480

Selon les documents actuels, https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html :

Si vous fournissez un fichier texte en entrée à curl, vous devez utiliser l'option --data-binary au lieu du simple -d. Ce dernier ne préserve pas les nouvelles lignes.

Exemple :

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

20voto

Evan Points 1045

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

20voto

Greg Dougherty Points 474

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".

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.

13voto

MosheZada Points 512

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 ensuite vous pourrez charger des fichiers json dans elasticsearch en émettant :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X