Skip to main content

Inleiding

Laravel Scout is een eenvoudige, drivergebaseerde oplossing om full-text zoeken toe te voegen aan je Eloquent-modellen. Met behulp van model observers houdt Scout je Eloquent-records automatisch gesynchroniseerd met de zoekindexen. Scout bevat een ingebouwde database-engine die rechtstreeks in je database zoekt met de full-text indexen van MySQL/PostgreSQL en LIKE-clausules — externe diensten zijn niet nodig. Heb je in een grootschalige productieomgeving typo-tolerantie, facetzoeken of geo-zoeken nodig, dan zijn de externe engines nuttig.

Overzicht van ondersteunde engines

Installatie

Installeer het pakket met Composer.
Publiceer na de installatie het configuratiebestand met het commando vendor:publish. Er wordt een config/scout.php gegenereerd.
Voeg tot slot de trait Laravel\Scout\Searchable toe aan de modellen die je doorzoekbaar wilt maken. Deze trait registreert een model observer en schakelt automatische synchronisatie met de zoekdriver in.

Queue-configuratie

Gebruik je een andere engine dan database of collection, dan raden we sterk aan om vóór het gebruik van Scout een queuedriver te configureren. Door een queue worker te draaien, worden indexsynchronisaties op de achtergrond uitgevoerd, wat de responssnelheid van je webinterface flink verbetert. Stel de optie queue in config/scout.php in op true.
Je kunt ook een verbindingsnaam en queuenaam opgeven.
Start na de configuratie een dedicated queue worker.

Unieke jobs gebruiken

In applicaties met veel schrijfacties wil je mogelijk voorkomen dat er dubbele queue-jobs voor hetzelfde modelrecord op de queue belanden. Door in config/scout.php de jobklassen MakeSearchableUniquely en RemoveFromSearchUniquely te registreren, gebruik je unieke indexeringsjobs. Meestal stel je dit in via de boot-methode van een service provider.
Deze jobs gebruiken Laravels unieke job-locks om te voorkomen dat er dubbele indexeringsoperaties worden gedispatcht voor een modelrecord dat al op de queue staat.

Vereisten per driver

Algolia

Gebruik je de Algolia-driver, stel dan de credentials id en secret in via config/scout.php en installeer de Algolia PHP SDK.
Voeg de credentials toe aan je .env-bestand.

Indexinstellingen

Bij Algolia kun je de indexinstellingen beheren in config/scout.php.
Voer na de configuratie het commando scout:sync-index-settings uit om de instellingen naar Algolia te pushen.

Meilisearch

Meilisearch is een snelle open-source zoekengine. Voor lokale ontwikkeling is Docker via Laravel Sail het eenvoudigst.
Gebruik je Sail niet, dan kun je hem rechtstreeks met Docker starten.
Installeer de Meilisearch PHP SDK.
Stel de driver en host in via je .env-bestand.
Controleer bij het upgraden van Scout altijd ook de breaking changes van de Meilisearch-service zelf.

Indexinstellingen (Meilisearch)

Bij Meilisearch moet je kolommen waarop je met where() filtert vooraf registreren in filterableAttributes, en kolommen waarop je met orderBy() sorteert in sortableAttributes.
Let op het datatype van numerieke kolommen. Meilisearch kan filteroperaties (>, < e.d.) alleen uitvoeren op data van het juiste type.
Voer na de configuratie het commando scout:sync-index-settings uit.

Semantisch en hybride zoeken (Meilisearch)

Om semantisch of hybride zoeken te gebruiken met Meilisearch, geef je in de indexinstellingen een embedder op en in de modelinstellingen de embedding-informatie.
De methode toSearchableEmbedding van je model geeft de brontekst terug die met de Laravel AI SDK wordt geëmbed, of een vooraf berekende embedding-array. Voer na de configuratie scout:sync-index-settings uit.

Typesense

Typesense is een snelle open-source zoekengine met ondersteuning voor keyword-, semantisch, geo- en vectorzoeken.
Stel de verbindingsgegevens in via je .env-bestand.
Bij gebruik van Typesense moet je in de methode toSearchableArray de primaire sleutel van het model naar een string casten en de aanmaakdatum naar een UNIX-timestamp.

Turbopuffer

Turbopuffer is een zoekengine die full-text, semantisch en hybride zoeken ondersteunt. Om de Turbopuffer-driver te gebruiken stel je SCOUT_DRIVER en een API-sleutel in.
TURBOPUFFER_REGION is optioneel; de standaard is gcp-us-central1.

Database-/collection-engine

De ideale optie als je zoeken wilt toevoegen zonder externe diensten. De database-engine gebruikt de full-text indexen van MySQL/PostgreSQL en LIKE-clausules. Voor de meeste applicaties is dit voldoende.

Semantisch en hybride zoeken

De database-engine ondersteunt semantisch en hybride zoeken op PostgreSQL met de pgvector-extensie ingeschakeld. Voeg aan de tabel van je model een nullable vectorkolom en een full-text index toe. Scout slaat de embedding op ná het opslaan van het model, dus maak de vectorkolom nullable.
Definieer op het model de methode toSearchableEmbedding. Deze methode geeft de brontekst terug die Scout embedt, of een vooraf berekende embedding-array. De opslaglocatie is standaard de kolom embedding, maar dat kun je wijzigen met de methode searchableEmbeddingColumn. De collection-engine filtert in PHP en werkt daardoor met alle databases die Laravel ondersteunt, inclusief SQLite. Bedoeld voor lokale ontwikkeling, tests en kleine datasets.
Anders dan bij externe engines is bij de database-engine geen handmatig indexbeheer nodig. Er wordt rechtstreeks in de databasetabel gezocht.

Turbopuffer-configuratie

Bij Turbopuffer definieer je per model de doorzoekbare attributen en het schema in model-settings van config/scout.php.
De getallen in searchable-attributes zijn relatieve BM25-gewichten. In het voorbeeld draagt een match in de titel drie keer zoveel bij aan de score als een match in de body. Gebruik je semantisch zoeken, voeg dan een embedding-configuratie en een vectorschema toe, en geef vanuit de methode toSearchableEmbedding van het model de brontekst of embedding-array terug.
Gebruik je de native embeddings van Turbopuffer, dan zijn de Laravel AI SDK en toSearchableEmbedding niet nodig. Neem het bronattribuut voor de embedding op in de returnwaarde van toSearchableArray en configureer het als volgt.

De Searchable-trait

toSearchableArray() aanpassen

Standaard wordt alle data van toArray() van het model in de zoekindex opgeslagen. Wil je aanpassen welke data naar de index wordt gesynchroniseerd, override dan de methode toSearchableArray.

De indexnaam aanpassen

Standaard wordt de tabelnaam van het model (meervoud) gebruikt als indexnaam. Je kunt dit aanpassen door de methode searchableAs te overriden.

Zoekstrategieën voor de database-engine

Bij de database-engine geef je per kolom een efficiënte zoekstrategie op via PHP-attributen.
Controleer voordat je SearchUsingFullText gebruikt of de betreffende kolommen een full-text index hebben.

Voorwaardelijk doorzoekbaar maken

Wil je een model alleen onder bepaalde voorwaarden doorzoekbaar maken, definieer dan de methode shouldBeSearchable.
shouldBeSearchable werkt niet met de database-engine. Gebruik voor vergelijkbaar gedrag met de database-engine where-clausules.

Indexbeheer

De commando’s in deze sectie zijn vooral relevant bij het gebruik van third-party engines zoals Algolia, Meilisearch en Typesense. Bij de database-engine is indexbeheer niet nodig.

Bestaande records importeren

Voer je Scout in bij een bestaand project, importeer dan de bestaande records in de index met het commando scout:import.
Je kunt ook via de queue op de achtergrond importeren.

De index leegmaken

Om alle records van een model uit de zoekindex te verwijderen gebruik je scout:flush.

Indexering pauzeren

Wil je tijdens Eloquent-operaties de synchronisatie met de zoekindex tijdelijk stopzetten, gebruik dan withoutSyncingToSearch.

Records handmatig toevoegen en verwijderen

Je kunt via een query een collectie modellen aan de index toevoegen.
Om records uit de index te verwijderen gebruik je unsearchable.
Als je een model deletet, wordt het ook automatisch uit de index verwijderd.

Zoeken

Met de search-methode doorzoek je een model. Koppel get erachter om een collectie Eloquent-modellen op te halen.
Geef je het resultaat rechtstreeks terug vanuit een controller of route, dan wordt het automatisch omgezet naar JSON.
Heb je de ruwe zoekresultaten nodig, gebruik dan de raw-methode.

Semantisch zoeken

Met de engines database, Meilisearch en Turbopuffer waarvoor embeddings zijn geconfigureerd, kun je records zoeken op basis van de betekenis van de query. Voeg de semantic-methode toe aan je zoekquery.
Bij engines die dit ondersteunen kun je ook een minimale gelijkenisdrempel opgeven.
Om full-text en semantisch zoeken te combineren gebruik je de hybrid-methode. Via de argumenten geef je de relatieve gewichten van tekst- en semantisch zoeken op.

Paginatie

Met de paginate-methode pagineer je de zoekresultaten. Dit werkt net als paginatie bij gewone Eloquent-query’s.
Bij de database-engine kun je ook simplePaginate gebruiken. Omdat het totale aantal niet wordt opgehaald, is dit efficiënt bij grote datasets.
Een weergavevoorbeeld in een Blade-template:

Filteren en sorteren

Met de where-methode voeg je filtervoorwaarden toe aan de zoekquery.
Bij gebruik van Meilisearch moet je vóór het gebruik van where de filterbare attributen configureren.
Met de query-methode kun je ook de Eloquent-query aanpassen.

Eager loading

Bij het gebruik van Scout wordt eerst een lijst met ID’s opgehaald bij de zoekengine, waarna de modellen via Eloquent worden opgehaald. Om het N+1-probleem te vermijden geef je met de query-methode eager loading op via with().
Om relaties eager te laden bij een batchimport definieer je de methode makeAllSearchableUsing.
makeAllSearchableUsing is mogelijk niet bruikbaar bij batchimports via de queue. Relaties worden niet hersteld wanneer modelcollecties in een queue-job worden verwerkt.

Soft deletes

Als je geïndexeerde modellen soft deletes gebruiken en je ook verwijderde modellen wilt doorzoeken, stel dan de optie soft_delete in config/scout.php in op true.
Eenmaal ingeschakeld kun je met withTrashed en onlyTrashed verwijderde records doorzoeken.

Custom engines

Als de ingebouwde zoekengines niet aan je behoeften voldoen, kun je een eigen custom engine implementeren. Een custom engine erft van de abstracte klasse Laravel\Scout\Engines\Engine en moet de volgende acht methoden implementeren.
Bekijk als referentie voor de implementatie de klasse Laravel\Scout\Engines\AlgoliaEngine. Je registreert je custom engine bij Scout in de boot-methode van App\Providers\AppServiceProvider.
Na registratie geef je hem op als driver in config/scout.php.

Gerelateerde pagina’s

Eloquent ORM

Bekijk de basisprincipes van Eloquent-modellen.

Eloquent-relaties

Bekijk het definiëren van relaties en eager loading.

Queues

Scout kan samen met queues de index op de achtergrond bijwerken.
Laatst gewijzigd op 6 september 2026