Skip to main content

Einführung

Laravel Scout ist eine einfache, treiber-basierte Lösung, um Eloquent-Modellen Volltextsuche hinzuzufügen. Über Modell-Observer werden Eloquent-Datensätze automatisch mit dem Suchindex synchronisiert. Scout bringt eine integrierte database-Engine mit, die Volltextindizes und LIKE-Klauseln von MySQL/PostgreSQL nutzt – ohne externen Dienst. Für große Produktivumgebungen mit Tippfehler-Toleranz, Facettensuche oder Geo-Suche sind externe Engines im Vorteil.

Übersicht der Engines

Installation

Installieren Sie das Paket mit Composer.
Veröffentlichen Sie die Konfiguration mit vendor:publish. Dabei entsteht config/scout.php.
Ergänzen Sie schließlich das Trait Laravel\Scout\Searchable in jedem Modell, das durchsuchbar sein soll. Das Trait registriert einen Model-Observer und aktiviert die automatische Synchronisation mit dem Suchtreiber.

Queues konfigurieren

Für alle Engines außer database und collection empfehlen wir dringend, Queues einzurichten. Ein Worker verlagert Index-Synchronisationen in den Hintergrund und verbessert die Reaktionszeit der Weboberfläche erheblich. Setzen Sie in config/scout.php die Option queue auf true.
Verbindung und Queue-Name lassen sich angeben.
Starten Sie einen dedizierten Worker.

Unique Jobs verwenden

In schreiblastigen Anwendungen möchten Sie duplizierte Index-Jobs für denselben Datensatz vermeiden. Registrieren Sie in config/scout.php – üblicherweise in der boot-Methode eines Service-Providers – die Job-Klassen MakeSearchableUniquely und RemoveFromSearchUniquely.
Diese Jobs nutzen Laravels Unique-Job-Locks, um doppelte Index-Operationen für denselben Datensatz zu vermeiden.

Voraussetzungen der Treiber

Algolia

Für Algolia setzen Sie in config/scout.php id und secret und installieren das Algolia-PHP-SDK.
In der .env:

Index-Konfiguration

Bei Algolia verwalten Sie Index-Einstellungen in config/scout.php.
Synchronisieren Sie die Konfiguration mit scout:sync-index-settings.

Meilisearch

Meilisearch ist eine schnelle Open-Source-Such-Engine. Am einfachsten läuft sie lokal via Laravel Sail.
Ohne Sail direkt via Docker:
Installieren Sie das PHP-SDK.
.env:
Beim Upgrade von Scout prüfen Sie stets auch die Breaking Changes von Meilisearch selbst.

Index-Konfiguration (Meilisearch)

Für Filter mit where() müssen Sie die Spalten in filterableAttributes eintragen; für Sortierungen mit orderBy() in sortableAttributes.
Beachten Sie die Datentypen numerischer Spalten. Meilisearch führt Filteroperationen (>, < etc.) nur bei korrekt typisierten Werten aus.
Anschließend scout:sync-index-settings ausführen.

Typesense

Typesense ist eine schnelle Open-Source-Such-Engine mit Keyword-, semantischer, Geo- und Vektorsuche.
.env:
Bei Typesense müssen Sie in toSearchableArray den Primärschlüssel als String und created_at als Unix-Timestamp casten.

Datenbank-/Collection-Engine

Ideal, wenn Sie ohne externen Dienst suchen möchten. Die Datenbank-Engine nutzt Volltextindizes und LIKE-Klauseln von MySQL/PostgreSQL und reicht für die meisten Anwendungen.
Die Collection-Engine filtert in PHP und funktioniert auf allen von Laravel unterstützten Datenbanken (auch SQLite). Ideal für lokale Entwicklung, Tests und kleine Datensätze.
Anders als bei externen Engines müssen Sie bei der Datenbank-Engine keinen Index manuell pflegen. Es wird direkt in der Tabelle gesucht.

Das Trait Searchable

toSearchableArray() anpassen

Standardmäßig werden alle Daten aus toArray() in den Suchindex geschrieben. Um die Daten zu steuern, überschreiben Sie toSearchableArray.

Indexnamen anpassen

Standardmäßig wird der Tabellenname (in der Pluralform) als Index verwendet. Über searchableAs passen Sie ihn an.

Suchstrategie für die Datenbank-Engine

Bei der Datenbank-Engine legen Sie pro Spalte über PHP-Attribute eine effiziente Suchstrategie fest.
Bevor Sie SearchUsingFullText verwenden, achten Sie darauf, dass die Zielspalte einen Volltextindex besitzt.

Bedingt durchsuchbar

Um ein Modell nur unter bestimmten Bedingungen durchsuchbar zu machen, definieren Sie shouldBeSearchable.
shouldBeSearchable funktioniert nicht mit der Datenbank-Engine. Verwenden Sie dort where-Klauseln.

Index verwalten

Die Befehle in diesem Abschnitt sind vor allem für externe Engines (Algolia, Meilisearch, Typesense) relevant. Bei der Datenbank-Engine ist keine Index-Verwaltung nötig.

Vorhandene Datensätze importieren

Wenn Sie Scout in ein bestehendes Projekt einführen, importieren Sie vorhandene Datensätze mit scout:import.
Der Import kann auch als Queue-Job laufen.

Index leeren

Mit scout:flush entfernen Sie alle Datensätze eines Modells aus dem Suchindex.

Index-Synchronisation pausieren

Um während Eloquent-Operationen die Sync mit dem Index zu unterbrechen, nutzen Sie withoutSyncingToSearch.

Datensätze manuell hinzufügen/entfernen

Sie können anhand einer Abfrage Modelle in den Index aufnehmen.
Mit unsearchable entfernen Sie Datensätze wieder.
Beim Aufruf von delete wird der Datensatz automatisch aus dem Index entfernt.

Suche

Mit search durchsuchen Sie Modelle. Hängen Sie get an, um eine Eloquent-Collection zu erhalten.
Aus Controllern oder Routen direkt zurückgegeben, wird das Ergebnis automatisch als JSON serialisiert.
Für die Rohdaten der Suche verwenden Sie raw.

Pagination

Mit paginate paginieren Sie Ergebnisse wie sonst auch.
Mit der Datenbank-Engine ist auch simplePaginate verfügbar. Da keine Gesamtzahl ermittelt wird, ist das bei großen Datenmengen effizienter.
Anzeige in Blade:

Filtern und sortieren

Mit where schränken Sie die Suche ein.
Bei Meilisearch müssen Sie vor dem Einsatz von where die filterbaren Attribute definieren.
Mit query passen Sie die Eloquent-Abfrage an.

Eager Loading

Scout holt zunächst die IDs aus der Such-Engine und dann die Modelle über Eloquent. Um N+1-Probleme zu vermeiden, geben Sie in query mit with() Eager Loading an.
Für Eager Loading bei Batch-Imports definieren Sie makeAllSearchableUsing.
Bei queue-basierten Batch-Imports kann makeAllSearchableUsing nicht immer verwendet werden. Beziehungen werden im Queue-Job für eine Modell-Collection ggf. nicht wiederhergestellt.

Soft Deletes

Verwendet Ihr indiziertes Modell Soft Deletes und wollen Sie auch gelöschte Datensätze suchen, setzen Sie in config/scout.php soft_delete auf true.
Danach nutzen Sie withTrashed bzw. onlyTrashed.

Eigene Engines

Reichen die eingebauten Engines nicht aus, implementieren Sie eine eigene. Erben Sie von der abstrakten Klasse Laravel\Scout\Engines\Engine und implementieren Sie folgende Methoden:
Als Vorlage können Sie sich die Klasse Laravel\Scout\Engines\AlgoliaEngine ansehen. Registrieren Sie die Engine in der boot-Methode Ihres AppServiceProvider.
Nach der Registrierung wählen Sie sie in config/scout.php als Treiber aus.

Verwandte Seiten

Eloquent ORM

Grundlagen der Eloquent-Modelle.

Eloquent-Beziehungen

Definition von Beziehungen und Eager Loading.

Queues

Scout kann Indizes zusammen mit Queues im Hintergrund aktualisieren.
Zuletzt geändert am 20. Juli 2026