Ich bin neu bei Elasticsearch und habe bis zu diesem Zeitpunkt Daten manuell eingegeben. Zum Beispiel habe ich so etwas gemacht:
$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}'
Ich habe jetzt eine .json-Datei und möchte diese in Elasticsearch indizieren. Ich habe so etwas auch versucht, aber keinen Erfolg:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json
Wie importiere ich eine .json-Datei? Gibt es Schritte, die ich zuerst ausführen muss, um sicherzustellen, dass die Zuordnung korrekt ist?
json
elasticsearch
Shawn Roller
quelle
quelle
Antworten:
Der richtige Befehl, wenn Sie eine Datei mit Curl verwenden möchten, lautet:
Elasticsearch ist schemenlos, daher benötigen Sie nicht unbedingt eine Zuordnung. Wenn Sie den JSON so senden, wie er ist, und die Standardzuordnung verwenden, wird jedes Feld mit dem Standardanalysator indiziert und analysiert .
Wenn Sie mit Elasticsearch über die Befehlszeile zu interagieren möchten, können Sie einen Blick auf das haben elasticshell die ein wenig handlicher als curl sein sollte.
2019-07-10: Es ist zu beachten, dass benutzerdefinierte Zuordnungstypen veraltet sind und nicht verwendet werden sollten. Ich habe den Typ in der obigen URL aktualisiert, um leichter erkennen zu können, welcher der Index und welcher der Typ war, da beide mit dem Namen "Test" verwirrend waren.
quelle
jfblouvmlxecs01
mitlocalhost
, nicht wahr?Laut den aktuellen Dokumenten https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html :
Beispiel:
quelle
Wir haben ein kleines Tool für diese Art von Dingen erstellt: https://github.com/taskrabbit/elasticsearch-dump
quelle
Ich bin der Autor von elasticsearch_loader.
Ich habe ESL für genau dieses Problem geschrieben.
Sie können es mit pip herunterladen:
Und dann können Sie JSON-Dateien in elasticsearch laden, indem Sie Folgendes ausgeben:
quelle
index
Vor jedem Dokument wird die obligatorische Zeile hinzugefügt.elasticsearch_loader --help
um die vollständige Hilfemeldung anzuzeigen. Sie können den Host angeben: Port mit--es-host http://hostname:port
--type
überflüssig wird, wenn Elasticsearch Typen in Version 6 entfernt. Elastic.co/guide/en/elasticsearch/reference/6.0/…Hinzufügen zu KenHs Antwort
Sie können ersetzen
@requests
mit@complete_path_to_json_file
Hinweis:
@
ist vor dem Dateipfad wichtigquelle
Ich habe nur sichergestellt, dass ich mich im selben Verzeichnis wie die JSON-Datei befinde, und diese dann einfach ausgeführt
Wenn Sie also auch sicherstellen, dass Sie sich im selben Verzeichnis befinden, führen Sie es auf diese Weise aus. Hinweis: Produkt / Standard / im Befehl ist spezifisch für meine Umgebung. Sie können es weglassen oder durch das ersetzen, was für Sie relevant ist.
quelle
Holen Sie sich einfach den Postboten von https://www.getpostman.com/docs/environments und geben Sie den Speicherort der Datei mit dem Befehl / test / test / 1 / _bulk? hübsch an.
quelle
Eines habe ich noch nicht erwähnt: Die JSON-Datei muss eine Zeile enthalten, die den Index angibt, zu dem die nächste Zeile gehört, und zwar für jede Zeile der "reinen" JSON-Datei.
IE
Ohne das funktioniert nichts und es wird Ihnen nicht sagen warum
quelle
Du benutzt
Wenn 'Anfragen' eine JSON-Datei ist, müssen Sie dies in ändern
Wenn Ihre JSON-Datei nicht indiziert ist, müssen Sie zuvor vor jeder Zeile in der JSON-Datei eine Indexzeile einfügen. Sie können dies mit JQ tun. Siehe folgenden Link: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html
Gehen Sie zu den Elasticsearch-Tutorials (Beispiel zum Shakespeare-Tutorial), laden Sie das verwendete JSON-Dateibeispiel herunter und sehen Sie es sich an. Vor jedem JSON-Objekt (jeder einzelnen Zeile) befindet sich eine Indexzeile. Dies ist, wonach Sie suchen, nachdem Sie den Befehl jq verwendet haben. Dieses Format ist obligatorisch, um die Bulk-API zu verwenden. Einfache JSON-Dateien funktionieren nicht.
quelle
Wenn Sie VirtualBox und UBUNTU verwenden oder einfach UBUNTU verwenden, kann dies hilfreich sein
quelle
Ich habe Code geschrieben, um die Elasticsearch-API über eine Dateisystem-API verfügbar zu machen.
Es ist beispielsweise eine gute Idee, Daten eindeutig zu exportieren / importieren.
Ich habe einen Prototyp eines elastischen Treibers erstellt . Es basiert auf FUSE
quelle
Ab Elasticsearch 7.7 müssen Sie auch den Inhaltstyp angeben:
quelle