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 ingebouwdedatabase-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.vendor:publish. Er wordt een config/scout.php gegenereerd.
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 dandatabase 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.
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 inconfig/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.
Vereisten per driver
Algolia
Gebruik je de Algolia-driver, stel dan de credentialsid en secret in via config/scout.php en installeer de Algolia PHP SDK.
.env-bestand.
Indexinstellingen
Bij Algolia kun je de indexinstellingen beheren inconfig/scout.php.
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..env-bestand.
Indexinstellingen (Meilisearch)
Bij Meilisearch moet je kolommen waarop je metwhere() filtert vooraf registreren in filterableAttributes, en kolommen waarop je met orderBy() sorteert in sortableAttributes.
>, < e.d.) alleen uitvoeren op data van het juiste type.
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.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..env-bestand.
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 jeSCOUT_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 enLIKE-clausules. Voor de meeste applicaties is dit voldoende.
Semantisch en hybride zoeken
De database-engine ondersteunt semantisch en hybride zoeken op PostgreSQL met depgvector-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.
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 inmodel-settings van config/scout.php.
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.
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 vantoArray() 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 methodesearchableAs te overriden.
Zoekstrategieën voor de database-engine
Bij de database-engine geef je per kolom een efficiënte zoekstrategie op via PHP-attributen.Voorwaardelijk doorzoekbaar maken
Wil je een model alleen onder bepaalde voorwaarden doorzoekbaar maken, definieer dan de methodeshouldBeSearchable.
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 commandoscout:import.
De index leegmaken
Om alle records van een model uit de zoekindex te verwijderen gebruik jescout:flush.
Indexering pauzeren
Wil je tijdens Eloquent-operaties de synchronisatie met de zoekindex tijdelijk stopzetten, gebruik danwithoutSyncingToSearch.
Records handmatig toevoegen en verwijderen
Je kunt via een query een collectie modellen aan de index toevoegen.unsearchable.
deletet, wordt het ook automatisch uit de index verwijderd.
Zoeken
Met desearch-methode doorzoek je een model. Koppel get erachter om een collectie Eloquent-modellen op te halen.
raw-methode.
Semantisch zoeken
Met de enginesdatabase, 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.
hybrid-methode. Via de argumenten geef je de relatieve gewichten van tekst- en semantisch zoeken op.
Paginatie
Met depaginate-methode pagineer je de zoekresultaten. Dit werkt net als paginatie bij gewone Eloquent-query’s.
simplePaginate gebruiken. Omdat het totale aantal niet wordt opgehaald, is dit efficiënt bij grote datasets.
Filteren en sorteren
Met dewhere-methode voeg je filtervoorwaarden toe aan de zoekquery.
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 dequery-methode eager loading op via with().
makeAllSearchableUsing.
Soft deletes
Als je geïndexeerde modellen soft deletes gebruiken en je ook verwijderde modellen wilt doorzoeken, stel dan de optiesoft_delete in config/scout.php in op true.
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 klasseLaravel\Scout\Engines\Engine en moet de volgende acht methoden implementeren.
Laravel\Scout\Engines\AlgoliaEngine.
Je registreert je custom engine bij Scout in de boot-methode van App\Providers\AppServiceProvider.
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.