type query array json elasticsearch

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.



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.



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.