4eck Media

Eine Such-Engine für Hunderttausende mehrsprachige Inhalte: Meilisearch Case Study

26. August 2024
26. August 2024

Eine gute Suche ist wie eine Bühne für große Contentplattformen, wo immer genau das gespielt wird, was der Nutzer sehen will. Ohne Meilisearch wäre unsere Plattform nur eine von vielen – mit mittelmäßigen Suchergebnissen und ohne den klaren Mehrwert, den wir gegenüber unseren Kunden bieten möchten. Da wir ein Subscriptionmodell für unsere Inhalte anbieten, ist es elementar, dass die Nutzer schnell und effektiv das finden, wonach sie suchen. Meilisearch ermöglicht es mit seiner Technik.

Matthias Petri
Gründer
TutKit.com

Unternehmen mit großen Content-Plattformen müssen enorme Herausforderungen lösen, wenn es darum geht, eine leistungsfähige Suchlösung zu implementieren. Besonders bei Projekten wie TutKit.com, einer umfangreichen Lern- und Contentplattform, die in mehreren Sprachen Inhalte bereitstellt, wird die Suche zu einem zentralen Element. Die Erwartungen sind hoch: Eine schnelle, effiziente und mehrsprachige Suchlösung ist entscheidend, um den Nutzern ein optimales Erlebnis zu bieten.

Unsere Plattform, TutKit.com, bietet  Zehntausende Inhalte, die jeweils in Dutzenden von Sprachen verfügbar sind. Diese Vielfalt und Menge an Inhalten stellen große Anforderungen an die Suchfunktion gepaart mit weiteren Herausforderungen an Performance, Datenbanklast und Datenbanksicherheit. Die Suche muss nicht nur schnell und präzise sein, sondern auch die Mehrsprachigkeit effektiv unterstützen. Hier ist eine Case Study von uns, wie wir die für uns mit Meilisearch die perfekte Suchengine gefunden haben.

Die perfekte Suchengine für Contentplattformen: Herausforderung und Erwartungen 

Zu Beginn hatten wir eine Suchlösung, die von einer externen Agentur implementiert wurde. Die umgesetzte Suche basierte auf MySQL und war, gelinde gesagt, unzureichend. Die Ladezeiten für Suchergebnisse betrugen bis zu 10 Sekunden, was für unsere Nutzer frustrierend war und die Benutzererfahrung stark beeinträchtigte. Zudem konnte diese Lösung keine gute Mehrsprachigkeitsunterstützung bieten. Diese externe Agentur war – obwohl spezialisiert auf Laravel – mit einem Projekt wie TutKit.com schlicht überfordert. Es war klar: Eine drastische Verbesserung war erforderlich. Und wir werden es selbst erledigen.

Die Entscheidung für Meilisearch

Auf der Suche nach einer besseren Lösung stießen wir auf Meilisearch. Was uns an Meilisearch besonders beeindruckte, war die Geschwindigkeit und die moderne Benutzererfahrung.   Die Webpräsenz von Meilisearch und die überzeugende UX waren eine erste Bestätigung, dass das Unternehmen modern und agil aufgestellt ist. Die echte Begeisterung kam, als wir die Geschwindigkeit der Suchergebnisse testeten. Es war ein Unterschied wie Tag und Nacht im Vergleich zu unserer bisherigen Lösung. Zudem bot Meilisearch eine hervorragende Mehrsprachigkeitsunterstützung, die für uns von entscheidender Bedeutung war.

1000 Resultate in 2 ms … das ist mal eine Ansage:

Meiliserach Startseite

Wir haben schließlich uns für die Open-Source-Version von Meilisearch entschieden. Die Wahl fiel auf diese Version, weil sie uns die vollständige Kontrolle über die Suchergebnisse gab, ohne zusätzliche Kosten für Lizenzgebühren oder externe Entwickler, wo nicht mal sicher ist, ob sie das Projekt gewuppt bekommen, wie wir selbst leidlich in der Vergangenheit erfahren mussten.

Die Implementierung von Meilisearch

Die Integration von Meilisearch in unsere Plattform TutKit.com war der erste Schritt zur Verbesserung der Suchfunktionalität. Hier sind die Details, wie wir Meilisearch implementiert haben und wie es derzeit in unserem Unternehmen verwaltet wird.

Einrichtung und Konfiguration

Wir haben uns entschieden, Meilisearch als Open-Source-Version zu verwenden, um vollständige Kontrolle über unsere Suchlösungen zu behalten. Die Installation begann mit dem Herunterladen des Meilisearch-Servers von der offiziellen Website. Um einen stabilen und zuverlässigen Betrieb sicherzustellen, richteten wir einen systemd-Dienst ein. Dieser Dienst wurde so konfiguriert, dass Meilisearch automatisch startet, sobald der Server hochfährt, und dass der Dienst bei einem Ausfall automatisch neu gestartet wird.

# Beispiel für eine systemd-Dienstdatei für Meilisearch
[Unit]
Description=MeiliSearch
After=systemd-user-sessions.service

[Service]
Type=simple
ExecStart=/usr/bin/meilisearch --http-addr 127.0.0.1:7700 --env production --master-key *****
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Sicherheitskonfiguration

Sicherheit ist ein wichtiger Aspekt bei der Konfiguration von Meilisearch. Wir haben zwei Schlüssel erstellt, um die Sicherheitsanforderungen zu erfüllen. Der Master-Schlüssel, der vollständigen Zugriff auf die Meilisearch-Instanz ermöglicht, wird ausschließlich im Backend verwendet. Der API-Schlüssel hingegen, der eingeschränktere Berechtigungen hat, wird für Suchvorgänge und andere Benutzeraufgaben genutzt. Diese Trennung gewährleistet, dass kritische Backend-Operationen sicher geschützt sind, während die Interaktionen im Frontend effizient und sicher bleiben.

Integration mit Laravel

Unsere Plattform TutKit.com ist auf dem PHP-Framework Laravel aufgebaut, und wir haben die MeiliSearch-PHP-Bibliothek als Basis für die Integration verwendet. Der API-Schlüssel wird in unserer Laravel-Anwendung verwendet, um sich mit Meilisearch zu verbinden. Dies erhöht die Sicherheit erheblich, da nur die durch den API-Schlüssel erlaubten Funktionen zugänglich sind, was das Risiko unautorisierter Aktionen minimiert.

// Beispiel für die Konfiguration von Meilisearch in Laravel
'connections' => [
    'meilisearch' => [
        'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
        'key' => env('MEILISEARCH_KEY', null),
    ],
],

Indexierung und Datenmanagement 

Ein zentraler Aspekt unserer Implementierung war die effiziente Verwaltung und Indexierung von Daten. Wir haben einen benutzerdefinierten Konsolenbefehl in Laravel entwickelt, der speziell für umfangreiche Updates oder für den Beginn des Indexierungsprozesses konzipiert ist. Dieser Befehl richtet sich gezielt nur an die relevanten Datensätze, die indexiert werden müssen. Dadurch vermeiden wir unnötige Datenverarbeitung und konzentrieren uns auf die wesentlichen Informationen.

// Beispiel für einen benutzerdefinierten Konsolenbefehl in Laravel
Artisan::command('index:content', function () {
    // Code zur Indexierung der relevanten Datensätze
})->describe('Indexiere alle relevanten Inhalte');

Das Beispiel ist natürlich sehr simpel gehalten. Unser Command-Code hat 400 Zeilen.

Automatische Aktualisierung von Indizes in der Suche

Ein wesentlicher Vorteil unserer Implementierung ist die Fähigkeit, Änderungen an Laravel-Modellen automatisch zu erkennen und darauf zu reagieren. Wann immer Daten aktualisiert, hinzugefügt oder gelöscht werden, wird der entsprechende MeiliSearch-Index prompt und effizient aktualisiert, um nur diese Änderungen widerzuspiegeln. Dieser gezielte Indexierungsansatz vermeidet die Notwendigkeit einer vollständigen Reindexierung aller Daten und sorgt dafür, dass unsere Meilisearch-Daten stets aktuell bleiben. Hier ist ein Codebeispiel, wenn ein Blogartikel aktualisiert wurde:

if($this->status == 'PUBLIC') {
                $post_filtered = $this->prepareSearchField();
                $searchClient->index('suggestions')->updateDocuments([
                    [
                        'id' => 'blog_post_lang_'.$this->id,
                        'language' => $this->language->code,
                        'suggestion' => SearchHelper::prepareSearchSuggestion($this->title),
                        'indexation_type' => 'suggestion',
                        'type' => 'blog_post',
                    ]
                ]);

                $searchClient->index('blog_posts')->updateDocuments([$post_filtered]);
            } else {
                $searchClient->index('blog_posts')->deleteDocument($this->id);
                $searchClient->index('suggestions')->deleteDocument('blog_post_lang_'.$this->id);
            }

Auch dieses Codebeispiel ist ausgesprochen simpel und unsere Codezeilen beidenen verschiedene Modelle und verschiedene Status. Aber im Prinzip ist klar, worum es geht.

Optimierung und Wartung

Die regelmäßige Wartung und Optimierung der Meilisearch-Integration ist entscheidend für die langfristige Leistung. Durch die Nutzung der regelmäßigen Updates von Meilisearch profitieren wir von kontinuierlichen Verbesserungen und neuen Funktionen. Dies stellt sicher, dass unsere Suchlösung stets auf dem neuesten Stand bleibt und mit den wachsenden Anforderungen unserer Plattform mithalten kann.

Solltest du Meilisearch auch für dein Projekt prüfen wollen, finden deine Entwickler hier eine Dokumentation zur Meilisearch-Implementierung

Meilisearch Suche in Anwendung

Hier in der kleinen Animation wird klar: 

  • die Suche ist ultra schnell
  • die Suche weiß mit Tippfehlern umzugehen und zeigt dennoch die richtigen Ergebnisse
  • die Instant-Suchergebnisse kommen nach wenigen Buchstaben
  • die Suchfilter ermöglichen eine schnelle Eingrenzung der Suchergebnisse

Die Auswirkungen von Meiliseach bei TutKit.com

Die Integration von Meilisearch in TutKit.com durch unser eigenes Entwicklerteam hat sich als ein großer Erfolg erwiesen. Mit einer schnellen und effektiven Suchlösung, die die Mehrsprachigkeit und große Datenmengen berücksichtigt, haben wir die Benutzererfahrung erheblich verbessert. Unsere selbst entwickelte Implementierung ermöglicht es uns, die Suchfunktion genau nach unseren Bedürfnissen zu gestalten und gleichzeitig die Kontrolle und Sicherheit zu wahren, die für eine leistungsfähige Contentplattform notwendig sind.

Mit Meilisearch haben wir eine erhebliche Verbesserung in der Geschwindigkeit und Effizienz unserer Suchfunktion erreicht. Die Indexierung neuer Daten ist jetzt blitzschnell, und die Serverlast ist deutlich gesenkt. Unsere Nutzer profitieren von schnellen und relevanten Suchergebnissen, was die Benutzererfahrung erheblich verbessert und die Frustration durch lange Ladezeiten reduziert.

Finanziell gesehen haben wir durch die Verwendung der Open-Source-Version von Meilisearch signifikante Kosten eingespart. Zudem ermöglicht die hohe Leistung von Meilisearch, dass wir ohne externe Unterstützung auskommen, was unsere Kosten weiter senkt.

Wir sind gespannt, wie sich Meilisearch weiterentwickeln wird. Wir hoffen, dass zukünftige Versionen noch mehr KI-Funktionen integrieren werden, die die Suchintention der Nutzer noch besser erfassen und die Notwendigkeit von Filtern und Kategorisierungsoptionen reduzieren. Meilisearch hat sich als die richtige Wahl für uns erwiesen.

Im Fazit:  Wir haben jetzt mit Meilisearch die perfekte Such-Engine, die uns dabei unterstützt, eine schnelle, mehrsprachige und benutzerfreundliche Suchlösung unseren Websitenutzer zu bieten … es ist nach unserer Bewertung aktuell die optimale Suchtechnologie für Enterprise-Herausforderungen mit Hundertausenden oder Millionen Inhalten.