f.zz.de
posts /

Elasticsearch rant

Posted Fri 30 Sep 2016 09:58:51 AM CEST Florian Lohoff
in

Elasticsearch etabliert sich ja gerade zu dem suchwerkzeug schlechthin. Ich habe das dazu benutzt um im RT vernünftig suchen zu können. Leider sind natürlich so supportfunktionen wie index dumpen und restoren von Haus aus nicht vorhanden. Wer braucht sowas auch schon.

Man sucht also rum und stolpert über elasticdump was, wie alle neumodernen hipstertools, unbedingt in node geschrieben sein müssen. Installieren und bauen und was kommt raus?

'Cannot switch to old mode now'

WTF? Google hilft - das nodejs ist zu alt. Debian/Jessie halt. Die Lösung die überall propagiert wird ist ein neues node zu installieren und das Kommando wird gleich mitgeliefert:

sudo npm install -g n
sudo n stable

WTF? Das entspricht curl-bashing ...

wget <randominterneturl> | sudo bash 

Aber das scheint gerade total modern zu sein sich ohne irgendwelche Sicherheitsmechanismen einfach Zeugs aus dem internet zu saugen, ohne checksum, ohne signature, direkt als binary, und das irgendwo als root zu installieren. Ist doch nur nen Container oder ne VM.

Naja - Ist ne Wegwerf VM - wir spielen mal mit. Okay - Also elasticdump geht dann endlich - d.h. es kann nicht nur dumpen sondern auch restoren.

Aber warum sind die zahlen unterschiedlich:

Fri, 30 Sep 2016 08:03:10 GMT | got 100 objects from source file (offset: 0)
Fri, 30 Sep 2016 08:03:10 GMT | sent 100 objects to destination elasticsearch, wrote 94

Wo sind die 6 Dokumente hin? Und welche waren das? Und warum mag der nicht mehr? Hier ist man aufgeschmissen. Also machen wir es mal wieder zu Fuß:

for i in {1..100}; do
    echo $i;
    head -$i rt2.json |\
        tail -1 >input.json;
    node_modules/elasticdump/bin/elasticdump \
        --input input.json \
        --output http://localhost:9200/rt2;
done

Damit man dann zumindest die Zeile im input file kennt die nicht genommen wird. Nicht das elastic oder elasticdump logged warum da was schief geht.

Des Rätsels Lösung war das ein Feld das als Date indiziert werden soll mit "Not set" gefüllt war. Die support tools von elastic sind aber totaler Müll. Warum gibt es keinen json dump/restore? Mit vernünftigen Parametern? Der auch abgelehnte Dokumente gleich auswirft?

Diese ganzen Hipster tools müssen einfach nochmal 5 Jahre auf die Weide.