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.
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.
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.
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. Ü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) 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.
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.