json - query - elasticsearch type int
Importar/indexar un archivo JSON en Elasticsearch (10)
Soy nuevo en Elasticsearch y he estado ingresando datos manualmente hasta este punto. Por ejemplo, he hecho algo como esto:
$ curl -XPUT ''http://localhost:9200/twitter/tweet/1'' -d ''{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}''
Ahora tengo un archivo .json y quiero indexar esto en Elasticsearch. He intentado algo como esto sin éxito:
curl -XPOST ''http://jfblouvmlxecs01:9200/test/test/1'' -d lane.json
¿Cómo importo un archivo .json? ¿Hay pasos que debo tomar primero para garantizar que el mapeo sea correcto?
Agregando a la respuesta de KenH
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Puede reemplazar @requests
con @complete_path_to_json_file
Nota: @
es importante antes de la ruta del archivo
Algo que no he visto mencionar a nadie: el archivo JSON debe tener una línea que especifique el índice al que pertenece la línea siguiente, para cada línea del archivo JSON "puro".
ES DECIR
{"index":{"_index":"shakespeare","_type":"act","_id":0}}
{"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
Sin eso, nada funciona, y no te dirá por qué
El comando correcto si quieres usar un archivo con curl es este:
curl -XPOST ''http://jfblouvmlxecs01:9200/test/test/1'' -d @lane.json
elasticsearch no tiene esquemas, por lo tanto, no necesita necesariamente un mapeo. Si envía el json tal como está y utiliza el mapeo predeterminado, cada campo será indexado y analizado utilizando el analizador estándar .
Si desea interactuar con elasticsearch a través de la línea de comando, es posible que desee echarle un vistazo a la elasticshell que debería ser un poco más práctica que el rizo.
Hicimos una pequeña herramienta para este tipo de cosas https://github.com/taskrabbit/elasticsearch-dump
Me aseguré de estar en el mismo directorio que el archivo json y luego simplemente ejecuté esto
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json
Entonces, si también se asegura de estar en el mismo directorio y ejecutarlo de esta manera. Nota: product / default / en el comando es algo específico de mi entorno. puedes omitirlo o reemplazarlo por lo que sea relevante para ti.
Según los documentos actuales, http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html :
Si proporciona una entrada de archivo de texto para curl, debe usar el indicador --data-binary en lugar de plain -d. Este último no conserva nuevas líneas.
Ejemplo:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Si está utilizando VirtualBox y UBUNTU en él o simplemente está utilizando UBUNTU, puede ser útil
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
Soy el autor de elasticsearch_loader
Escribí ESL para este problema exacto.
Puedes descargarlo con pip:
pip install elasticsearch-loader
Y luego podrá cargar archivos json en elasticsearch emitiendo:
elasticsearch_loader --index incidents --type incident json file1.json file2.json
Tu estas usando
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Si ''requests'' es un archivo json, entonces tiene que cambiar esto a
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json
Ahora, antes de esto, si su archivo json no está indexado, debe insertar una línea de índice antes de cada línea dentro del archivo json. Puedes hacer esto con JQ. Consulte el siguiente enlace: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html
Vaya a los tutoriales de elasticsearch (por ejemplo, el tutorial de Shakespeare) y descargue la muestra del archivo json utilizada y échele un vistazo. Delante de cada objeto json (cada línea individual) hay una línea de índice. Esto es lo que está buscando después de usar el comando jq. Este formato es obligatorio para usar la API masiva, los archivos plain json no funcionarán.
solo consigue que el cartero de https://www.getpostman.com/docs/environments le proporcione la ubicación del archivo con el comando / test / test / 1 / _bulk? pretty.