Soy nuevo en Elasticsearch y he estado ingresando datos manualmente hasta este momento. 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 indexarlo en Elasticsearch. También intenté algo como esto, pero no tuve éxito:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json
¿Cómo importo un archivo .json? ¿Hay pasos que deba tomar primero para asegurarme de que el mapeo sea correcto?
json
elasticsearch
Rodillo de Shawn
fuente
fuente
Respuestas:
El comando correcto si desea usar un archivo con curl es este:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/_doc/1' -d @lane.json
Elasticsearch no tiene esquema, por lo que no necesariamente necesita un mapeo. Si envía el json como está y usa el mapeo predeterminado, cada campo se indexará y analizará usando el analizador estándar .
Si desea interactuar con Elasticsearch a través de la línea de comandos, es posible que desee echar un vistazo a elasticshell que debería ser un poco más útil que curl.
2019-07-10: Debe tenerse en cuenta que los tipos de mapeo personalizados están en desuso y no deben usarse. Actualicé el tipo en la URL anterior para que sea más fácil ver cuál era el índice y cuál era el tipo, ya que tener ambos nombres "prueba" era confuso.
fuente
jfblouvmlxecs01
conlocalhost
, ¿verdad?Según los documentos actuales, https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html :
Ejemplo:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
fuente
Hicimos una pequeña herramienta para este tipo de cosas https://github.com/taskrabbit/elasticsearch-dump
fuente
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
fuente
index
línea obligatoria antes de cada documento.elasticsearch_loader --help
para ver el mensaje de ayuda completo. Puede especificar el host: puerto con--es-host http://hostname:port
--type
vuelve redundante ya que Elasticsearch elimina los tipos en la versión 6 elastic.co/guide/en/elasticsearch/reference/6.0/…Añadiendo a la respuesta de KenH
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Puedes reemplazar
@requests
con@complete_path_to_json_file
Nota:
@
es importante antes de la ruta del archivo.fuente
Una cosa que no he visto a nadie mencionar: el archivo JSON debe tener una línea que especifique el índice al que pertenece la siguiente línea, 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é
fuente
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 usted también, asegúrese de estar en el mismo directorio y ejecútelo de esta manera. Nota: producto / predeterminado / en el comando es algo específico de mi entorno. puede omitirlo o reemplazarlo con lo que sea relevante para usted.
fuente
simplemente obtén al cartero de https://www.getpostman.com/docs/environments dale la ubicación del archivo con el comando / test / test / 1 / _bulk? pretty.
fuente
Tu estas usando
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Si 'solicitudes' es un archivo json, entonces debe cambiarlo 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. Puede hacer esto con JQ. Consulte el enlace a continuación: 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 el archivo json de muestra utilizado y échele un vistazo. Delante de cada objeto json (cada línea individual) hay una línea de índice. Esto es lo que busca después de usar el comando jq. Este formato es obligatorio para usar la API masiva, los archivos json simples no funcionarán.
fuente
A partir de Elasticsearch 7.7, también debe especificar el tipo de contenido:
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/_bulk --data-binary @<absolute path to JSON file>
fuente
si está usando VirtualBox y UBUNTU en él o simplemente está usando UBUNTU, entonces 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
fuente
Escribí un código para exponer la API de Elasticsearch a través de una API del sistema de archivos.
Es una buena idea, por ejemplo, para una exportación / importación clara de datos.
He creado el prototipo elasticdriver . Se basa en FUSE
fuente
Si está utilizando la búsqueda elástica 7.7 o una versión superior, siga el siguiente comando.
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk? pretty&refresh" --data-binary @"/Users/waseem.khan/waseem/elastic/account.json"
En la ruta del archivo anterior es
/Users/waseem.khan/waseem/elastic/account.json
.Si está utilizando la versión 6.x de búsqueda elástica, puede utilizar el siguiente comando.
curl -X POST localhost:9200/bank/_bulk?pretty&refresh --data-binary @"/Users/waseem.khan/waseem/elastic/account.json" -H 'Content-Type: application/json'
Nota : asegúrese de que en su archivo .json al final agregará una línea vacía; de lo contrario, obtendrá la siguiente excepción.
"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
fuente