2017-04-01 3 views
0

Ich versuche, alle JSON in meine ElasticSearch zu importieren. Ich habe versucht curl Befehl für diesen Zweck, aber von keinem Nutzen, wie es beginnt, Parsing-Fehler zu geben.
Das ist, was ich versucht:Wie kann ich ElasticSearch mit Logstash oder Curl füttern?

curl -XPOST "http://localhost:9200/test" -d "@test.json" 
curl -XPOST "http://localhost:9200/test/_bulk" -d "@test.json" 
curl -XPOST "http://localhost:9200/test/_bulk" --data-binary "@test.json" 
curl -s -XPOST "http://localhost:9200/test/_bulk" --data-binary "@test.json" 

Und viele andere Versuche. Aber was ich habe, ist Parsing error. Daher würde gerne wissen, was ist der Weg nach draußen, um alle meine Datensätze elastisch zu suchen?
Auch wenn jemand mir helfen kann, es mit logstash zu lösen, dann wird es eine große Hilfe sein. Bitte lassen Sie mich den bestmöglichen Vorschlag wissen.
Hier sind die Beispieldaten in einem JSON und es ist wahrscheinlich mit einem Zeilenumbruch getrennt. Hier Sample Data
ist der Fehler:

{ 
    "error" : { 
    "root_cause" : [ 
     { 
     "type" : "parse_exception", 
     "reason" : "Failed to derive xcontent" 
     } 
    ], 
    "type" : "parse_exception", 
    "reason" : "Failed to derive xcontent" 
    }, 
    "status" : 400 
} 

Antwort

2

Sie benötigen json wie dies zu ändern:

{ "index" : { "_index" : "test", "_type" : "type" } } 
{"data":...} 
{ "index" : { "_index" : "test", "_type" : "type" } } 
{"data":...} 
{ "index" : { "_index" : "test", "_type" : "type" } } 
{"data":...} 

Dann können Sie laufen:

curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/_bulk --data-binary "@test.json" 

Lesen Sie mehr über Bulk API.

Wenn Sie dies mit Logstash tun möchten, können Sie einen stdin input mit einem json filter verwenden, dann einen elasticsearch output. So etwas wie (nicht getestet):

input { 
    stdin { } 
} 

filter { 
    json { 
    source => "message" 
    } 

    mutate { 
    remove_field => [ "message" ] 
    } 
} 

output { 
    elasticsearch { 
    } 
} 

Dann starten:

cat test.json | bin/logstash -f logstash.conf 

Ich hoffe, das hilft.

+0

Kein logstash wird das tun – dadoonet

+0

BTW Wenn Sie Ihre Datei in mehrere Dateien, wie ein JSON-Dokument pro Datei teilen, können Sie https://github.com/dadoonet/fscrawler Projekt verwenden. – dadoonet

+0

Es gibt diese Option: https://github.com/dadoonet/fscrawler#indexing-json-docs – dadoonet

Verwandte Themen