2016-07-29 13 views
2

Hier ist ein Szenario, dem ich gegenüberstehe, und ich bin im Zweifel, ob die Lösung, die ich nehme, die kanonische/intelligente Lösung ist. Nehmen Sie eine Datei an, in der jede Zeile ein gültiger JSON ist. Darüber hinaus enthält jedes Objekt ein Feld type und id und die Paare von sind einzigartig. Mein Ziel ist es, alle Objekte in einen Index auf einem ES-Cluster zu indizieren. Bisher habe ich zwei Ansätze:Indizierung vieler JSON-Objekte in Elasticsearch - der kanonische Weg

Mit dem bulk API zusammen mit jq etwas mit wie:

$ cat foo.json | jq -c '. | {"index": {"_index": "your_test_index", "_type": "doc_type"}}, .' | curl -XPOST localhost:9200/_bulk --data-binary @- 

Diese sehr schön funktioniert, aber es ist super langsam.

Ich habe versucht, auch den Python-Client zu verwenden, aber ich muss immer noch Zeile für Zeile lesen und sie nacheinander indizieren.

Gibt es eine Möglichkeit, die komplette Datei zu "pushen" und ES anzuweisen, alle Zeilen auf die gleiche Weise zu bearbeiten? Oder mit anderen Worten: Wie kann man JAR-Objekte in einer Batch-Verarbeitung effizient indexieren?

+1

Können Sie "groß" definieren? Wie viele Zeilen/Dokumente haben Sie und wie groß ist jedes Dokument? – Val

+0

Zum Beispiel: 20-30M Dokumente und insgesamt 6-10GB – Dror

Antwort

0

Auf jeden Fall die bulk Ansatz. Aber Sie müssen etwas mehr arbeiten, da es nicht so einfach ist, eine Datei zu erstellen, sie an ES zu senden und zu erwarten, dass sie damit umgehen wird.

Wenn die Datei zu groß ist, wird es natürlich schwer. Bitte lesen Sie diesen Abschnitt der Dokumentation, insbesondere den letzten Teil, in dem beschrieben wird, wie groß die Menge einer Charge sein muss: https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html

Jeder Cluster hat seine eigenen Eigenschaften und jeder kann mit einem umgehen bestimmte Anzahl von Chargen/bestimmte Anzahl von gleichzeitigen Chargen sogar. Es hängt von Ihren Besonderheiten ab. Testen Sie dies bitte und ermitteln Sie die beste Nummer für Ihren speziellen Anwendungsfall.

+0

Gute Punkte, Andrei, plus @Dror muss [mit verschiedenen Massengrößen experimentieren] (https://www.elastic.co/guide/en/elasticsearch/ guide/current/indexing-performance.html # _using_and_sizing_bulk_requests) und erfahre empirisch, welche am besten zu seinem Dokumentensatz passen. – Val

+0

Natürlich. Es gibt keine automatische magische Lösung dafür. Einige Experimente werden immer empfohlen. –

+0

Verarbeitet diese Methode nicht die angegebene Datei Zeile für Zeile und "manuelles" Steuern der API, was mit jeder Zeile zu tun ist? Gibt es nicht eine Möglichkeit, ES zu sagen, alle Linien auf die gleiche Weise zu behandeln? – Dror