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?
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.
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
Nous avons fabriqué un petit outil pour ce genre de chose https://github.com/taskrabbit/elasticsearch-dump
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.
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 .
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.
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
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.
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
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
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