web-dev-qa-db-fra.com

La demande en bloc génère une erreur dans elasticsearch 6.1.1

J'ai récemment mis à niveau vers la version 6.1.1 d'elasticsearch et je ne parviens plus à indexer des documents à partir d'un fichier JSON. Wehn je le fais en ligne, cela fonctionne bien. Voici le contenu du document:

{"index" : {}}
{"name": "Carlson Barnes", "age": 34}
{"index":{}}
{"name": "Sheppard Stein","age": 39}
{"index":{}}
{"name": "Nixon Singleton","age": 36}
{"index":{}}
{"name": "Sharron Sosa","age": 33}
{"index":{}}
{"name": "Kendra Cabrera","age": 24}
{"index":{}}
{"name": "Young Robinson","age": 20}

Quand je lance cette commande,

curl -XPUT 'localhost:9200/subscribers/ppl/_bulk?pretty' -H 'Content-Type: application/json' -d @customers_full.json

Je reçois cette erreur:

"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]"
  },
  "status" : 400

Cela fonctionne bien si j'envoie les données en ligne et dans elasticsearch 5.x. J'ai essayé d'ajouter des nouvelles lignes ainsi que le caractère de nouvelle ligne à la fin du fichier. Ne semble pas fonctionner.

7
Judy T Raj

Ajoutez empty line à la fin du fichier JSON et enregistrez le fichier, puis essayez d'exécuter la commande ci-dessous.

curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'

J'espère que cela fonctionne bien pour vous.

15

L'erreur est assez claire:

The bulk request must be terminated by a newline [\n]

Donc, vous devez simplement ajouter une nouvelle ligne à la fin de votre fichier customers_full.json et tout ira bien.

5
Val

Comme le dit le document: utilisez le drapeau --data-binary au lieu de plain -d. Ce dernier ne conserve pas les retours à la ligne et ne formate pas le json . J'ai rencontré ce problème à cause du formatage JSON.

3
Utsav

J'ai rencontré le même problème et passé des heures à ajouter et à supprimer des nouvelles lignes avant que quelqu'un m'indique que j'ai mal saisi le nom du fichier ... Notez donc que curl génèrera la même erreur si le fichier n'est pas présent, ce qui rend ce processus extrêmement déroutant.

2
Raya Fratkina

Vous devez utiliser --data-binary au lieu de -d dans votre requête curl. Veuillez consulter https://www.elastic.co/guide/fr/elasticsearch/reference/current/docs-bulk.html

1
Karim

vous avez juste besoin d'ouvrir le fichier json, puis d'aller à la fin du fichier (Ctrl + end), puis entrez s'il vous plaît pour casser une nouvelle ligne.

0
user6589750

Appuyez sur Entrée, fin de la ligne dans le fichier json, puis réexécutez la commande.

curl -H "Type de contenu: application/x-ndjson" -XPOST 'localhost: 9200/customers/personal/_bulk? pretty & refresh' --data-binary @ "généré.json"

0