Skip to main content

Inleiding

Er zijn meerdere manieren om zoekfunctionaliteit aan je applicatie toe te voegen, afhankelijk van je use case. Laravel biedt ingebouwde tools — van keyword-matching tot semantisch zoeken met AI — zonder dat externe diensten nodig zijn.

Functievergelijking


Full-text zoeken

LIKE-query’s zijn handig voor eenvoudige gedeeltelijke matches, maar begrijpen geen taal. Full-text zoeken gebruikt een speciale index en houdt rekening met woordgrenzen, woordvormen en relevantiescores. MariaDB, MySQL en PostgreSQL ondersteunen full-text zoeken standaard; externe diensten zijn niet nodig.
Full-text zoeken wordt ondersteund door MariaDB, MySQL en PostgreSQL.

Een full-text index toevoegen

Om full-text zoeken te gebruiken voeg je eerst een full-text index toe aan de betreffende kolommen.
Bij PostgreSQL kun je een taalinstelling opgeven voor de index. Bij andere talen dan Engels verandert de verwerking van woordvormen.
Zie Migrations voor meer details over indexen.
Aandachtspunten bij Japans full-text zoeken
Japans full-text zoeken in MySQL is wat lastig in gebruik. Op AWS RDS is alleen de N-gram-parser beschikbaar en kun je geen morfologische-analyseplugin (MeCab) toevoegen, wat beperkingen oplevert. Voor MySQL op Laravel Cloud geldt vermoedelijk hetzelfde. Ook in PostgreSQL is de ondersteuning voor Japanse woordvormen beperkt. Is de precisie van Japans zoeken belangrijk, overweeg dan een gespecialiseerde engine zoals Meilisearch of Typesense.

Full-text query’s uitvoeren

Zodra de index is toegevoegd, zoek je met de methode whereFullText. Laravel genereert de juiste SQL voor de gebruikte databasedriver (MATCH(...) AGAINST(...) bij MariaDB / MySQL, to_tsvector(...) @@ plainto_tsquery(...) bij PostgreSQL).
Heb je een samengestelde index aangemaakt, geef dan dezelfde kolomarray door.
Bij MariaDB en MySQL worden de resultaten automatisch gesorteerd op relevantiescore. Bij PostgreSQL filtert whereFullText alleen de matchende records en wordt er niet op relevantie gesorteerd. Heb je op PostgreSQL automatische relevantiesortering nodig, dan is de database-engine van Scout een goede optie.
Met de methode orWhereFullText kun je full-text zoeken ook als OR-conditie toevoegen. Zie de querybuilder-documentatie voor meer details.

Semantisch / vectorzoeken

Full-text zoeken leunt op keyword-matches. Vectorzoeken hanteert een fundamenteel andere aanpak: met door AI gegenereerde vector-embeddings wordt de betekenis van tekst als numerieke array weergegeven en wordt gezocht naar semantisch nabije resultaten. Zo levert een zoekopdracht naar “best wineries in Napa Valley” een artikel op met de titel “Top Vineyards to Visit”. De woorden komen niet overeen, maar de betekenis wel.
Voor vectorzoeken is de Laravel AI SDK nodig; ondersteund worden PostgreSQL (vereist de pgvector-extensie), MariaDB 11.7 en hoger, en MongoDB (vereist het Laravel MongoDB-pakket). Op alle Postgres-databases van Laravel Cloud is pgvector vooraf geïnstalleerd.

Embeddings genereren

Een embedding is een hoogdimensionale numerieke array (meestal honderden tot duizenden dimensies) die de betekenis van tekst weergeeft. Je genereert er een met de methode toEmbeddings van Laravels Stringable-klasse.
Wil je meerdere teksten in één keer verwerken, dan is de klasse Embeddings efficiënter (er is maar één API-aanroep nodig).
Zie de AI SDK-documentatie voor de configuratie van embedding-providers en het aanpassen van het aantal dimensies.

Vectoren opslaan en indexeren

Om vector-embeddings op te slaan definieer je in een migratie een vector-kolom. Stem dimensions af op het aantal outputdimensies van je embedding-provider (bijvoorbeeld: text-embedding-3-small van OpenAI heeft 1536 dimensies). Roep index() aan om een HNSW-index te maken; dat versnelt gelijkenisonderzoek op grote datasets aanzienlijk.
Op Eloquent-modellen gebruik je de AsVector-cast om de conversie tussen PHP-arrays en het vectorformaat van de database te automatiseren.
Zie Migrations voor meer details over vectorkolommen en -indexen.

Zoeken op gelijkenis

Zodra de embeddings zijn opgeslagen, zoek je vergelijkbare records met de methode whereVectorSimilarTo. Deze vergelijkt vectoren op cosinusgelijkenis, filtert resultaten onder de minSimilarity-drempel weg en sorteert automatisch op relevantie. De drempel is een waarde tussen 0.0 en 1.0, waarbij 1.0 een exacte match betekent.
Geef je een string door in plaats van een embedding-array, dan genereert Laravel automatisch de embedding. Erg handig, want zo kun je de zoekquery van de gebruiker rechtstreeks doorgeven.
Heb je fijnmazigere controle nodig, dan zijn ook whereVectorDistanceLessThan, selectVectorDistance en orderByVectorDistance beschikbaar. Zie de querybuilder-documentatie en de AI SDK-documentatie voor meer details.

Reranking

Reranking is een techniek waarbij een AI-model een resultaatset opnieuw sorteert op relevantie voor de query. Anders dan bij vectorzoeken hoef je geen embeddings vooraf te berekenen en op te slaan; je kunt het toepassen op elke willekeurige tekstcollectie. Vooral het patroon “zoeken → reranken” is effectief: eerst snel een grote hoeveelheid records inperken met full-text zoeken en daarna reranking toepassen. Zo combineer je de snelheid van de database met de precisie van AI.
Laravel-collecties hebben een rerank-macro: je geeft alleen een veldnaam (of closure) en een query door om Eloquent-resultaten te reranken.
Zie de AI SDK-documentatie voor de configuratie van reranking-providers en de beschikbare opties.

Laravel Scout

Alle zoektechnieken tot nu toe riepen rechtstreeks querybuilder-methoden aan. Laravel Scout hanteert een andere aanpak: voeg de Searchable-trait toe aan een Eloquent-model en Scout synchroniseert de zoekindex automatisch bij het aanmaken, bijwerken en verwijderen van records.

Database-engine

De ingebouwde database-engine van Scout voert full-text en LIKE-zoekopdrachten uit op je bestaande database. Er is geen externe dienst of extra infrastructuur nodig. Met de methode toSearchableArray definieer je de doorzoekbare kolommen. Via PHP-attributen geef je per kolom een zoekstrategie op.
Kolommen waarop je SearchUsingFullText toepast, hebben vooraf een full-text index nodig.
Na het toevoegen van de trait kun je het model doorzoeken met de search-methode. De database-engine van Scout geeft ook op PostgreSQL de resultaten automatisch terug op relevantievolgorde.

Third-party engines

Scout ondersteunt ook third-party zoekengines zoals Algolia, Meilisearch en Typesense. Deze bieden geavanceerde functies als typo-tolerantie, facetzoeken, geo-zoeken en custom ranking. Omdat Scout een uniforme API biedt, zijn er slechts minimale codewijzigingen nodig als je later van de database-engine naar een third-party engine migreert.
De meeste applicaties hebben geen externe zoekengine nodig. De ingebouwde technieken op deze pagina dekken de overgrote meerderheid van de use cases.
Zie de Laravel Scout-gids voor meer details over Scout.

Technieken combineren

De zoektechnieken op deze pagina sluiten elkaar niet uit. Door ze te combineren behaal je de beste resultaten.

Full-text zoeken + reranking

Beperk snel de kandidaten met full-text zoeken en sorteer ze daarna met reranking op semantische relevantie. Een patroon dat databasesnelheid en AI-precisie combineert.

Vectorzoeken + gewone filters

Combineer vectorgelijkenisonderzoek met gewone where-clausules voor semantisch zoeken binnen een specifieke subset. Handig als je semantisch wilt zoeken terwijl je filtert op team of categorie.

Gerelateerde pagina’s

Laravel Scout

De complete gids voor automatische indexsynchronisatie van modellen met de Searchable-trait.

Laravel AI SDK

De configuratie van de AI SDK die nodig is voor vector-embeddings en reranking.

Querybuilder

Details over querybuilder-methoden zoals whereFullText en whereVectorSimilarTo.

Migrations

Hoe je full-text indexen en vectorkolommen aanmaakt.
Laatst gewijzigd op 6 september 2026