Die auf Lucene basierende Suchmaschine elasticsearch bietet eine breite Palette an Möglichkeiten für Webprojekte. Gerade wenn es um die Auswertung und Analyse großer Datenmengen geht, kommt sie Software häufig zum Einsatz, da die Daten im NoSQL-Format gespeichert werden. So ist eine deutlich schnellere Verarbeitung der Daten möglich, da auf Relationen verzichtet wird und die Daten in sogenannten Shards gespeichert, indiziert und für den schnellen Abruf aufbereitet werden.

Damit die Indizierung funktioniert, müssen Daten im JSON-Format gespeichert werden. Ein Beispiel eines solchen Datensatzes (im NoSQL-Umfeld Dokument genannt), das diesen Artikel beschreiben soll:

{
  "titel": "elasticsearch in Symfony nutzen",
  "autor": "Anton Dachauer",
  "erscheinungsjahr": "2019",
  "unternehmen": "webworks nürnberg"
}

Auch Suchanfragen können als JSON-Dokumente an elasticsearch gesendet werden. Obiges Beispieldokument kann über folgende Suchanfrage gefunden werden:

{
   "query": {
      "match": {
         "titel": "symfony"
      }
   }
}

elasticsearch ist über eine REST-API ansprechbar. Obiges Beispiel kann mit cURL wiefolgt gesendet werden:

curl -X PUT '78.47.143.252:9200/materialienzusuchmaschinen/buecher/1?pretty' -d '{
    "titel": "elasticsearch in Symfony nutzen",
    "autor": "Anton Dachauer",
    "erscheinungsjahr": "2019",
    "unternehmen": "webworks nürnberg"
}'

Sobald die Daten an den API-Endpoint geschickt werden, wird das Dokument analysert, für den Index aufbereitet und im daraus resultierenden Zustand gespeichert. So ist es möglich, die Daten schnell abzurufen, zu aggregieren und weiterzuverarbeiten.

elasticsearch und Symfony

Da elasticsearch von Haus aus eine REST-API mitbringt, ist im Grunde kein großer Aufwand nötig, um die Suchmaschinen-Software in einem Symfony-Projekt zu nutzen. Zunächst muss elasticsearch installiert werden (siehe Anleitung).

Wir bei webworks implementieren elasticsearch gerne direkt, mit der offiziellen elasticsearch-Bibliothek. Für viele Anwendungsfälle ist auch das FOSElasticaBundle eine sinnvolle Möglichkeit.

Weiterführende Links

Bildquelle: Von ^demon – Eigenes Werk, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34397724