wake-up-neo.com

Fehler beim Massenauftrag wirft Fehler in der Elasticsearch 6.1.1

Ich habe kürzlich ein Upgrade auf Elasticsearch Version 6.1.1 durchgeführt und kann nun keine Dokumente aus einer Json-Datei massenweise indizieren. Wehn ich mache es inline, es funktioniert gut. Hier sind die Inhalte des Dokuments:

{"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}

Wenn ich diesen Befehl ausführen,

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

Ich erhalte diesen Fehler:

"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

Es funktioniert gut, wenn ich die Daten inline und in elasticsearch 5.x sende. Ich habe versucht, Zeilenumbrüche sowie das Zeilenumbruchzeichen am Ende der Datei einzufügen. Scheint nicht zu funktionieren.

7
Judy T Raj

Fügen Sie empty line am Ende der JSON-Datei hinzu, speichern Sie die Datei und versuchen Sie dann, den folgenden Befehl auszuführen

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

Ich hoffe es funktioniert gut für dich.

Der Fehler ist ziemlich klar:

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

Sie müssen also einfach am Ende Ihrer customers_full.json-Datei einen Zeilenumbruch hinzufügen, und Sie sind in Ordnung.

5
Val

Wie das Dokument sagt: Verwenden Sie das Flag --data-binary anstelle von plain -d. Letzteres behält keine Zeilenumbrüche bei und formatiert nicht den Json . Dieses Problem trat aufgrund der JSON-Formatierung auf.

3
Utsav

Ich stieß auf das gleiche Problem und verbrachte Stunden damit, Zeilenumbrüche hinzuzufügen und zu entfernen, bevor jemand darauf hinwies, dass ich den Dateinamen falsch eingetippt habe. Beachten Sie, dass curl den gleichen Fehler ausgibt, wenn die Datei nicht wirklich vorhanden ist.

2
Raya Fratkina

Ich hatte ein ähnliches Problem beim Arbeiten mit Elasticsearch 7..

So habe ich es gelöst.

  1. Suchen Sie das .json Datei, sagen products.json Datei.
  2. Doppelklick zum Öffnen des .json Datei in Ihrem Texteditor.
  3. Scrolle zum Ende des .json Datei und drücken Sie dann die EINGABETASTE auf Ihrer Tastatur.
  4. Schließe .json Datei. Dies erstellt eine neue Zeile am Ende von .json Datei.
  5. Kehren Sie zu Ihrem Terminal zurück und führen Sie den folgenden Befehl aus.

N/B: Für den folgenden Befehl wird .json Dateiname ist products.json was ich importiere in http://localhost:9200/ecommerce/product

curl -H "Content-type: application/json" -XPOST "http://localhost:9200/ecommerce/product/_bulk?pretty" --data-binary "@products.json"

Das ist alles.

Ich hoffe das hilft

1
Promise Preston

Sie müssen --data-binary anstelle von -d in Ihrer Curl-Anforderung verwenden. Siehe https://www.elastic.co/guide/de/elasticsearch/reference/current/docs-bulk.html

1
Karim

Für alle, die Briefträger verwenden, um Anfragen an ElasticSearch zu richten

Drücken Sie einfach die Eingabetaste, um eine leere neue Zeile zu erstellen!

Und voila, Problem gelöst

1
bnahayo

sie müssen nur die json-Datei öffnen und dann zum Ende der Datei gehen (Strg + Ende).

0
user6589750

Dies funktionierte in meinem lokalen Setup.

curl -H "Inhaltstyp: application/json" -XPOST " http: // localhost: 9200/customer/personal/_bulk? pretty " --data-binary @ "generated.json"

0
meol

Das hat bei mir funktioniert:

curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@C:\Program Files\Elastic\Elasticsearch\7.2.0\accounts.json"
0
Rajat Goel

Drücken Sie die Eingabetaste am Ende der Zeile in der Json-Datei und führen Sie den Befehl erneut aus.

curl -H "Inhaltstyp: application/x-ndjson" -XPOST 'localhost: 9200/customers/personal/_bulk? pretty & refresh' --data-binary @ "generated.json"

0