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 integriertedatabase-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.vendor:publish. Dabei entsteht config/scout.php.
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ßerdatabase 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.
Unique Jobs verwenden
In schreiblastigen Anwendungen möchten Sie duplizierte Index-Jobs für denselben Datensatz vermeiden. Registrieren Sie inconfig/scout.php – üblicherweise in der boot-Methode eines Service-Providers – die Job-Klassen MakeSearchableUniquely und RemoveFromSearchUniquely.
Voraussetzungen der Treiber
Algolia
Für Algolia setzen Sie inconfig/scout.php id und secret und installieren das Algolia-PHP-SDK.
.env:
Index-Konfiguration
Bei Algolia verwalten Sie Index-Einstellungen inconfig/scout.php.
scout:sync-index-settings.
Meilisearch
Meilisearch ist eine schnelle Open-Source-Such-Engine. Am einfachsten läuft sie lokal via Laravel Sail..env:
Index-Konfiguration (Meilisearch)
Für Filter mitwhere() müssen Sie die Spalten in filterableAttributes eintragen; für Sortierungen mit orderBy() in sortableAttributes.
>, < etc.) nur bei korrekt typisierten Werten aus.
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.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:
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 Optionembedding sowie ein Vektor-Feld. Standardmäßig erzeugt Scout die Embeddings mit dem Laravel AI SDK.
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 SieSCOUT_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 undLIKE-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 aktivierterpgvector-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.
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 Arraymodel-settings von config/scout.php.
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.
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. ÜbersearchableAs 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.Bedingt durchsuchbar
Um ein Modell nur unter bestimmten Bedingungen durchsuchbar zu machen, definieren SieshouldBeSearchable.
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 mitscout:import.
Index leeren
Mitscout: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 SiewithoutSyncingToSearch.
Datensätze manuell hinzufügen/entfernen
Sie können anhand einer Abfrage Modelle in den Index aufnehmen.unsearchable entfernen Sie Datensätze wieder.
delete wird der Datensatz automatisch aus dem Index entfernt.
Suche
Mitsearch durchsuchen Sie Modelle. Hängen Sie get an, um eine Eloquent-Collection zu erhalten.
raw.
Semantische Suche
Mit den Enginesdatabase, 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.
hybrid. Über die Argumente steuern Sie die relative Gewichtung von Text- und semantischen Ergebnissen.
Pagination
Mitpaginate paginieren Sie Ergebnisse wie sonst auch.
simplePaginate verfügbar. Da keine Gesamtzahl ermittelt wird, ist das bei großen Datenmengen effizienter.
Filtern und sortieren
Mitwhere schränken Sie die Suche ein.
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 inquery mit with() Eager Loading an.
makeAllSearchableUsing.
Soft Deletes
Verwendet Ihr indiziertes Modell Soft Deletes und wollen Sie auch gelöschte Datensätze suchen, setzen Sie inconfig/scout.php soft_delete auf true.
withTrashed bzw. onlyTrashed.
Eigene Engines
Reichen die eingebauten Engines nicht aus, implementieren Sie eine eigene. Erben Sie von der abstrakten KlasseLaravel\Scout\Engines\Engine und implementieren Sie folgende Methoden:
Laravel\Scout\Engines\AlgoliaEngine ansehen.
Registrieren Sie die Engine in der boot-Methode Ihres AppServiceProvider.
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.