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.

Semantische und hybride Suche (Meilisearch)

Um semantische oder hybride Suche mit Meilisearch zu verwenden, konfigurieren Sie einen Embedder in den Index-Einstellungen und die Embedding-Angaben in den Modell-Einstellungen.
Die Methode toSearchableEmbedding des Modells gibt entweder den Quelltext zurück, den Scout mit dem Laravel AI SDK einbettet, oder ein vorberechnetes Embedding-Array. Führen Sie nach der Konfiguration scout:sync-index-settings aus.

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.

Semantische und hybride Suche (Typesense)

Um in Typesense semantische oder hybride Suche zu aktivieren, definieren Sie in den Typesense-Einstellungen des Modells die Option embedding sowie ein Vektor-Feld. Standardmäßig erzeugt Scout die Embeddings mit dem Laravel AI SDK.
Die Methode toSearchableEmbedding des Modells gibt entweder den Quelltext zurück, den Scout einbettet, oder ein vorberechnetes Embedding-Array.
Wenn Sie die nativen Embedding-Funktionen von Typesense nutzen, können Sie Embeddings auch ohne das Laravel AI SDK erzeugen. Details finden Sie in der offiziellen Typesense-Dokumentation.

Turbopuffer

Turbopuffer ist eine Such-Engine, die Volltext-, semantische und hybride Suche unterstützt. Um den Turbopuffer-Treiber zu verwenden, setzen Sie SCOUT_DRIVER und Ihren API-Schlüssel.
TURBOPUFFER_REGION ist optional und steht standardmäßig auf gcp-us-central1.

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.

Semantische und hybride Suche

Die Datenbank-Engine unterstützt semantische und hybride Suche mit PostgreSQL und aktivierter pgvector-Erweiterung. Fügen Sie der Tabelle des Modells eine nullable Vektor-Spalte und einen Volltextindex hinzu. Da Scout die Embeddings erst nach dem Speichern des Modells ablegt, muss die Vektor-Spalte nullable sein.
Definieren Sie im Modell eine toSearchableEmbedding-Methode. Diese Methode gibt den Quelltext zurück, den Scout einbettet, oder ein vorberechnetes Embedding-Array. Standardmäßig speichert Scout die Embeddings in der Spalte embedding; mit der Methode searchableEmbeddingColumn können Sie eine andere Spalte festlegen. 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.

Turbopuffer konfigurieren

Bei Turbopuffer definieren Sie die durchsuchbaren Attribute und ein Schema für jedes Modell im Array model-settings von config/scout.php.
Die numerischen Werte in searchable-attributes sind relative BM25-Gewichte. Im Beispiel trägt ein Treffer im Titel dreimal so stark zum Score bei wie einer im Text. Für semantische Suche fügen Sie eine embedding-Einstellung sowie ein Vektor-Schema hinzu und geben aus der toSearchableEmbedding-Methode des Modells den Quelltext oder ein Embedding-Array zurück.
Wenn Sie die nativen Embeddings von Turbopuffer verwenden, benötigen Sie weder das Laravel AI SDK noch toSearchableEmbedding. Nehmen Sie das Quellattribut für das Embedding in den Rückgabewert von toSearchableArray auf und konfigurieren Sie Folgendes:

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, Turbopuffer) 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.

Semantische Suche

Mit den Engines database, Meilisearch, Typesense und Turbopuffer können Sie nach konfigurierten Embeddings Datensätze anhand der Bedeutung einer Suchanfrage finden. Hängen Sie dazu die Methode semantic an die Suche an. Wenn Scout die Embeddings erzeugt, wird für die semantische und hybride Suche das Laravel AI SDK benötigt. Bei Nutzung der nativen Embeddings von Typesense oder Turbopuffer sowie bei vorberechneten Query-Vektoren ist das Laravel AI SDK nicht erforderlich.
Bei Engines, die dies unterstützen, können Sie zusätzlich einen minimalen Ähnlichkeits-Schwellenwert angeben.
Um Volltextsuche und semantische Suche zu kombinieren, verwenden Sie die Methode hybrid. Über die Argumente steuern Sie die relative Gewichtung von Text- und semantischen Ergebnissen.

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 11. September 2026