Je suis nouveau sur Elasticsearch et j'ai saisi des 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 essayé quelque chose comme ça aussi, mais sans succès:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json
Comment importer un fichier .json? Dois-je prendre des mesures en premier pour m'assurer que le mappage est correct?
json
elasticsearch
Shawn Roller
la source
la source
Réponses:
La bonne commande si vous souhaitez utiliser un fichier avec curl est la suivante:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/_doc/1' -d @lane.json
Elasticsearch est sans schéma, vous n'avez donc 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 l' analyseur standard .
Si vous souhaitez interagir avec Elasticsearch via la ligne de commande, vous pouvez consulter le elasticshell qui devrait être un peu plus pratique que curl.
2019-07-10: Il convient de noter que les types de mappage personnalisés sont obsolètes et ne doivent pas être utilisés. J'ai mis à jour le type dans l'url ci-dessus pour qu'il soit plus facile de voir quel était l'index et quel était le type, car les deux étaient nommés "test" était déroutant.
la source
jfblouvmlxecs01
parlocalhost
, non?Selon la documentation actuelle, https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html :
Exemple:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
la source
Nous avons créé un petit outil pour ce type de chose https://github.com/taskrabbit/elasticsearch-dump
la source
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 puis vous pourrez charger des fichiers json dans elasticsearch en émettant:
elasticsearch_loader --index incidents --type incident json file1.json file2.json
la source
index
ligne obligatoire avant chaque document.elasticsearch_loader --help
pour afficher le message d'aide complet. Vous pouvez spécifier l'hôte: port avec--es-host http://hostname:port
--type
devient redondant car Elasticsearch supprime les types dans la version 6 élastique.coAjout à 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 fichierla source
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".
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 ça, rien ne fonctionne, et ça ne te dira pas pourquoi
la source
Je viens de m'assurer que je suis dans le même répertoire que le fichier json, puis je l'ai simplement exécuté
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.
la source
il suffit d'obtenir postman sur https://www.getpostman.com/docs/environments, donnez-lui l'emplacement du fichier avec la commande / test / test / 1 / _bulk? pretty.
la source
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 une ligne d'index avant chaque ligne à l'intérieur du fichier json. Vous pouvez le faire avec JQ. Reportez-vous au lien ci-dessous: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html
Accédez aux didacticiels elasticsearch (exemple le didacticiel shakespeare) et téléchargez l'exemple de fichier json utilisé et jetez-y un œil. 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 bloc, les fichiers json simples ne fonctionneront pas.
la source
Depuis Elasticsearch 7.7, vous devez également spécifier le type de contenu:
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/_bulk --data-binary @<absolute path to JSON file>
la source
si vous utilisez VirtualBox et UBUNTU dedans 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
la source
J'ai écrit du code pour exposer l'API Elasticsearch via une API Filesystem.
C'est une bonne idée pour une exportation / importation claire des données par exemple.
J'ai créé un prototype de pilote élastique . Il est basé sur FUSE
la source
Si vous utilisez la version 7.7 ou supérieure de la recherche élastique, suivez la commande ci-dessous.
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk? pretty&refresh" --data-binary @"/Users/waseem.khan/waseem/elastic/account.json"
Le chemin du fichier ci-dessus est
/Users/waseem.khan/waseem/elastic/account.json
.Si vous utilisez la version 6.x de la recherche élastique, vous pouvez utiliser la commande ci-dessous.
curl -X POST localhost:9200/bank/_bulk?pretty&refresh --data-binary @"/Users/waseem.khan/waseem/elastic/account.json" -H 'Content-Type: application/json'
Remarque : assurez-vous que dans votre fichier .json à la fin, vous ajouterez une ligne vide, sinon vous obtiendrez l'exception ci-dessous.
"error" : { "root_cause" : [ { "type" : "illegal_argument_exception", "reason" : "The bulk request must be terminated by a newline [\n]" } ], "type" : "illegal_argument_exception", "reason" : "The bulk request must be terminated by a newline [\n]" }, `enter code here`"status" : 400
la source