Elasticsearch: meine ersten Gehversuche

Das Thema Suchengine interessiert mich schon länger aber seitdem ich mit Jekyll einen Blogsystem verwende das von Hause aus keine Suchmöglichkeit mitbringt gibt es einen echten persönlichen Bedarf. Bisher verwende ich dort DuckDuckGo aber so richtig zufrieden bin ich damit nicht. Außerdem interessiert mich wie man die Suchergebnisse durch Facetten besser gestalten kann.

Elasticsearch scheint momentan neben Solr das Werkzeug der Wahl zu sein. Aufgrund der zusätzlichen Möglichkeit der Logfile Analyse habe ich mich aber nach meinen ersten Versuchen mit Solr entschieden mit Elasticsearch weiterzumachen.

Um die ersten Schritte möglichst einfach zu gestalten verwende ich bonsai.io. Dort kann man einen kostenlosen Suchindex einrichten.

Elasticsearch möchte sein Input als Datei im JSON Format haben und auf Basis dieses Beitrages konnte ich schnell meinen Jekyll Blog in ein JSON Format überführen.

Richtet man seine Suchindex bei bonsai.io ein bekommt man eine URL über die man die notwendigen Aktionen ausführen kann. Dies Aktionen werden als http Operationen durchgeführt und da man das dann schön in einen Text überführen kann verwende ich curl auf der Kommandozeile um die Operationen auszuführen. Das sieht komplizierter aus als es ist.

Für die ersten Gehversuche möchte ich einen Index erstellen, zwei Dokumente einstellen und dann danach suchen.

Zuerst erstelle ich mir einen Index für meine Blog Dokumente

   curl -XPUT 'https://username:passwort@try1-yourserver.eu-west-1.bonsai.io/blog'
   {"acknowledged":true}

Dann werden die ersten Dokumente erzeugt. Als Werte nehme ich Dokumente aus der JSON Datei die ich mit Jekyll erzeugt habe.

curl -XPOST 'https://username:passwort@try1-yourserver.eu-west-1.bonsai.io/blog/posts' -d ' {
                 "title": "GPXViewer: Ein Werkzeug zur Darstellung von GPX Dateien",
                 "url": "http://127.0.0.1:4000/2015/06/gpxviewer.html",
                 "path": "/2015/06/gpxviewer.html",
                 "content": "Wenn man mal schnell GPX Daten auf einer Google Maps Karte darstellen möchte sollte man sich auf jeden Fall mal den GPXViewer anschauen. Neben der Route auf Google Maps wird auch das Höhenprofil mit Tagesetappen angezeigt.Wirklich gut gemacht.",
                 "categories": "",
                 "date": "2015-06-18 20:26:56 +0200" } '
{"_index":"blog","_type":"posts","_id":"AU4VTna2oGwl_2cZDTqn","_version":1,"created":true}


curl -XPOST 'https://username:passwort@try1-yourserver.eu-west-1.bonsai.io/blog/posts' -d ' {
                "title": "WeeWX: get archive interval failed",
                "url": "http://127.0.0.1:4000/2015/06/weewx-failed.html",
                "path": "/2015/06/weewx-failed.html",
                "content": "Meine Wetterstation hat die letzten Tage keine Aufzeichnungen dokumentiert. Der Prozess brach kurz nach dem Start ab und im Logfile fand ich folgende Zeilenweewx[]: engine: Record generation will be attempted in 'hardware'weewx[]: fousb: get archive interval failed attempt 1 of 3: could not detach kernel driver from ten verfügbarweewx[]: fousb: get archive interval failed attempt 2 of 3: could not detach kernel driver from ten verfügbarweewx[]: fousb: get archive interval failed attempt 3 of 3: could not detach kernel driver from ten verfügbarweewx[]: engine: Caught WeeWxIOError: Unable to read archive interval after 3 triesweewx[]:     ****  Exiting...An dieser fand ich den Hinweis: Einfach mal die Wetterstation von USB und Strom trennen.Jetzt lüppt es wieder",
                "categories": "",
                "date": "2015-06-17 20:26:56 +0200" } '

So und jetzt die ersten Suchversuche. Der erste Versuch sucht nach einem Begriff der nicht verwendet wird und die zweite nach einem vorhandenen Begriff.

curl -XGET 'https://username:passwort@try1-yourserver.eu-west-1.bonsai.io/blog/_search?q=GPdX'
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}

curl -XGET 'https://username:passwort@try1-yourserver.eu-west-1.bonsai.io/blog/_search?q=GPX'
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"failed":0},"hits":{"total":1,"max_score":0.17677669,"hits":[{"_index":"blog","_type":"posts","_id":"AU4VUkPZoGwl_2cZDTxR","_score":0.17677669,"_source": {
                 "title": "GPXViewer: Ein Werkzeug zur Darstellung von GPX Dateien",
                 "url": "http://127.0.0.1:4000/2015/06/gpxviewer.html",
                 "path": "/2015/06/gpxviewer.html",
                 "content": "Wenn man mal schnell GPX Daten auf einer Google Maps Karte darstellen möchte sollte man sich auf jeden Fall mal den GPXViewer anschauen. Neben der Route auf Google Maps wird auch das Höhenprofil mit Tagesetappen angezeigt.Wirklich gut gemacht.",
                 "categories": "",
                 "date": "2015-06-18 20:26:56 +0200"
             }

Falls man einen Index löschen möchte kann man das so machen

curl -XDELETE 'https://username:passwort@try1-yourserver.eu-west-1.bonsai.io/blog'
{"acknowledged":true}

Das fängt ja schon mal gut an. Als nächstes möchte ich herausfinden wie ich einen ganzen Satz von Dokumenten auf einmal indizieren kann und meine Tags und die Jahresangaben als Facetten verwenden kann.