← Blog

E-commerce

Magento AI-zoek: drie stacks scoren bij 320k queries

Een Magento-shop van zes miljoen euro wil semantisch zoeken vóór Q4. Drie stacks, drie kostencurves, één vraag die niemand stelt: wie houdt je synoniemenlijst bij als TikTok-slang binnenrolt?

Jacob Molkenboer· Oprichter · A Brand New Company· 23 mei 2025· 9 min
Koperen weegschaal met drie pakjes in pakpapier en linnen touw op ivoorpapier, crème ansichtkaart eronder.

Het is een dinsdag in mei. De operations-lead van een Nederlandse woonwinkel op Magento 2.4 stuurt ons een screenshot door. Haar assistent typte "cluttercore lamp" in het zoekvak van de webshop en kreeg nul resultaten. De winkel verkoopt precies die lamp; de SKU heeft de tag "vintage messing tafellamp". Ze wil weten hoe een verstandige upgrade naar semantisch zoeken eruitziet vóór Black Friday, en haar bestuur heeft haar een getal meegegeven: onder de €5.000 per jaar, all-in.

Dat getal klinkt krap, tot je drie opties tegen 320.000 maandelijkse queries afzet. Dan blijkt het ongeveer te kloppen.

Dit is de methode die we gebruiken als een operator ons met die situatie opzadelt. Het is geen vendor-shootout. Het is een scoringsformulier dat eerlijk probeert te zijn over de twee kosten die niemand op zijn slide zet: per-1k-query-economics bij het volume dat je écht draait, en de menselijke kosten om je zoekresultaten relevant te houden zodra je kopers slang gaan typen die niemand in je team kent.

Wat de operator écht vraagt

"AI search" op een Magento-winkel onder de €10M betekent bijna nooit een chatbot. Het betekent drie kleinere dingen:

  • De catalogus moet "cluttercore lamp" vinden als de SKU de tag "vintage messing tafellamp" heeft.
  • De catalogus moet géén lamp tonen als iemand op "cluttercore beddengoed" zoekt.
  • Als kopers typfouten maken, afkorten of TikTok-slang gebruiken, komen de relevante resultaten alsnog boven.

Dat is grotendeels vector search plus een reranker plus een synoniemenlijst die actief bijgehouden wordt. De vraag is wie welk deel van die stack draait, en wat het je per duizend zoekopdrachten kost bij het volume dat je daadwerkelijk hebt.

Voor onze hypothetische shop ligt dat volume rond de 320.000 zoekopdrachten per maand: ongeveer 18% van de sessies activeert een zoekopdracht, 60.000 sessies per dag in piekweken, conversie van zoeken naar kopen ongeveer vier keer zo hoog als bladeren naar kopen. Absoluut gezien een kleine shop, maar een echte workload.

De drie kandidaten op tafel

We knippen de shortlist terug tot drie, omdat die de realistische bandbreedte dekken.

Algolia NeuralSearch. Volledig managed, hybride vector en lexicaal out of the box, een dashboard dat je marketing-lead daadwerkelijk kan bedienen. NeuralSearch zit op de Grow- en Premium-tier; Build heeft het niet. De publieke Algolia-pricing ligt rond $1 per 1.000 requests op Build, maar NeuralSearch is op offerte en merkbaar duurder per query.

Typesense Cloud met vector mode. Ook managed, geprijsd per cluster-spec in plaats van per query. Je brengt je eigen embeddings mee of gebruikt een ingebouwd model. Open-source kern, dus je kunt dezelfde engine later self-hosten zonder je integratie te herschrijven. De documentatie voor vector search is kort, wat meestal een goed teken is.

Self-hosted Meilisearch met een Qwen-reranker. Meilisearch verzorgt de lexicale laag en serveert vectors; een open-weights Qwen3-reranker herordent de top 50 kandidaten. Je draait beide op een Hetzner-bak of je eigen Kubernetes-cluster. Bij dit volume het goedkoopst in cash, het duurst in operator-aandacht.

Er bestaan andere engines (Elastic, OpenSearch met de rerank-pipeline, Vespa, Weaviate, Marqo). Voor een Magento 2.4-shop onder de €10M zetten we ze niet meer op de shortlist. De integratiekosten domineren, en het marketingteam kan ze niet bedienen.

Kosten per 1k queries bij 320k zoekopdrachten

Dit is de schatting op een bierviltje die we met de operator delen. Ronde getallen; behandel ze als ranges, niet als offertes.

volume:              320.000 zoekopdrachten / maand
target SLA:          p95 onder 250 ms end-to-end
retrieval budget:    € 5.000 / jaar, all-in

Algolia NeuralSearch
  query fee:         op offerte, ~€ 0,001 tot 0,003 / zoekopdracht
  monthly run-rate:  ~€ 320 tot 960
  setup-uren:        ~ 8 tot 12 uur
  totaal jaar 1:     ~€ 4.500 tot 12.000
  eigenaar slang:    marketing, in het Algolia-dashboard

Typesense Cloud, 4 GB HA cluster, vector mode
  cluster:           ~€ 90 tot 140 / maand
  embed-kosten:      ~€ 20 / maand bij dit volume met een hosted embedder
  monthly run-rate:  ~€ 110 tot 160
  setup-uren:        ~ 12 tot 20 uur
  totaal jaar 1:     ~€ 2.500 tot 4.500
  eigenaar slang:    jij, via de synonyms API en een CSV in git

Meilisearch self-hosted + Qwen3-reranker op een CPX31
  VPS:               ~€ 15 / maand
  embed + rerank:    ~€ 0 als je 's nachts batcht op dezelfde bak
  monthly run-rate:  ~€ 15 tot 30
  setup-uren:        ~ 30 tot 50 uur
  totaal jaar 1:     ~€ 2.800 tot 4.800
  eigenaar slang:    jij, via de settings-JSON en een script

Het eerste wat de operator meestal zegt als ze dit ziet: "dus Meilisearch is het goedkoopst". Klopt, in cash. Niet in operator-uren, en bij 320.000 zoekopdrachten per maand is het cash-verschil tussen Typesense Cloud en self-hosted Meili ongeveer twee engineering-dagen per jaar. Dat is het getal dat ertoe doet.

Kort gezegd

Onder de €10M valt het kostenverschil per 1k queries tussen managed en self-hosted in het niet bij het verschil tussen marketing die de synoniemenlijst beheert en engineering die hem beheert. Geef die tweede as een zwaarder gewicht.

De synoniemenvraag die niemand inprijst

"Cluttercore" was eerst een TikTok-esthetiek, daarna pas een zoekterm. Hetzelfde voor "tomato girl", "coastal grandmother" en wat er volgend kwartaal landt. Geen van deze woorden staat in je productfeed. Geen ervan staat in je categorieboom. Vector search brengt je dichterbij dan lexicaal zoeken, maar mist nog steeds als de visuele esthetiek niet netjes te koppelen valt aan een zelfstandig naamwoord dat je catalogus al gebruikt.

De oplossing is een levende synoniemenlijst. De vraag is wie hem levend houdt.

Algolia

Synoniemen zijn een first-class object in het dashboard. NeuralSearch laat ook nul-resultaat-queries met volume zien, gerangschikt. Iemand van marketing kan dertig minuten per week gaan zitten, naar de top twintig nul-resultaat-queries kijken en cluttercore → vintage messing, eclectisch, maximalistisch toevoegen zonder een terminal te openen. Dit is de allergrootste reden waarom operators op deze schaal Algolia blijven betalen.

Typesense

Synoniemen zijn een JSON API. Je kunt ze bewerken via een klein admin-schermpje dat je in Magento bouwt, of via een CSV in git. We hebben dat admin-scherm inmiddels twee keer gebouwd; het kost ongeveer een dag. Zodra het er staat, kan marketing er zelf mee aan de slag. Zonder dat scherm wordt elke synoniem-aanpassing een developer-ticket.

Meilisearch

Dezelfde API-vorm als Typesense. Dezelfde trade-off. Het verschil: de reranker heeft een mening. Een Qwen3-reranker trekt soms zonder synoniem het juiste product naar de eerste plek, omdat de embedding de semantische afstand vangt. Diezelfde reranker zet ook met vol vertrouwen een stoel boven een lamp als beide 0,81 scoren, en jij weet niet waarom.

De eerlijke versie van deze vergelijking is niet "Algolia is beter in AI". Het is: Algolia levert je een workflow voor het deel dat verschuift. De andere twee leveren je een API plus de aanname dat je de workflow zelf bouwt.

Het scoringsformulier

We scoren elke kandidaat op zes assen. Twee-puntsschaal per as (1 = prima, 2 = goed). De schaal dient om het gesprek af te dwingen, niet om statistisch zinvol te zijn.

  1. Query-economics bij huidig volume. Cash run-rate, geen lijstprijs.
  2. Query-economics bij driemaal huidig volume. De Black Friday-versie van hetzelfde getal.
  3. Tijd tot het eerste bruikbare resultaat. Dagen vanaf kickoff tot "de cluttercore lamp komt boven".
  4. Wie eigenaar is van vocabulair-drift. Marketing of engineering. Telt zwaarder dan de cash-assen.
  5. Lock-in. Kunnen we binnen een week weglopen als de prijzen veranderen?
  6. Faalmodus onder belasting. Wat breekt als eerste als verkeer vijf keer piekt tijdens een tv-reclame.

Voor de Nederlandse woonwinkel-operator zag het formulier er ongeveer zo uit:

                          Algolia   Typesense   Meili+Qwen
1. economics nu              1          2            2
2. economics bij 3x          1          2            2
3. tijd tot live             2          2            1
4. drift-eigenaar            2          1            1
5. lock-in                   1          2            2
6. faalmodus                 2          2            1
                           -------   ---------   ----------
totaal                       9         11            9

Typesense wint voor deze operator. Het zou niet winnen voor een mode-retailer met acht miljoen maandelijkse zoekopdrachten en een eigen merchandising-team; dat team kan Algolia aansturen en de premie per query verdient zich terug in conversiestijging. Het zou ook niet winnen voor een hobbyproject; Meilisearch self-hosted is wel degelijk goedkoper als jouw tijd gratis is.

De vorm van de Magento 2.4-integratie

Niks van dit alles doet ertoe als de integratie broos is. De ingebouwde catalogus-zoekfunctie van Magento 2.4 draait sinds 2.4.6 standaard op OpenSearch 2.x. Je hebt drie integratievormen, in volgorde van hoe vaak we ze in de praktijk uitleveren.

Alleen het storefront search endpoint vervangen

Houd de indexer en admin-zoekfunctie van Magento op OpenSearch. Stuur de quickSearch- en catalogsearch-controllers van het storefront via een dunne module naar je nieuwe engine. Kleinste blast radius, maar je onderhoudt twee indexes.

De catalogus spiegelen naar de nieuwe engine

Dit leveren we meestal uit. Een bin/magento-commando doet een volledige sync; een RabbitMQ-consumer verwerkt de delta's. Product-saves, voorraadwijzigingen en herberekeningen van prijsregels pushen allemaal. De handler in het hart hiervan ziet er zo uit.

// app/code/Abn/SearchSync/Observer/ProductSaveAfter.php
public function execute(Observer $observer): void
{
    $product = $observer->getEvent()->getProduct();
    if (!$product instanceof Product) {
        return;
    }
    $this->publisher->publish(
        'search.product.upsert',
        $this->serializer->serialize([
            'sku'        => $product->getSku(),
            'name'       => $product->getName(),
            'price'      => (float) $product->getFinalPrice(),
            'in_stock'   => (bool) $product->isAvailable(),
            'updated_at' => $product->getUpdatedAt(),
        ])
    );
}

Volledige vervanging, inclusief admin-zoekfunctie

Onder de €10M bijna nooit de moeite waard. De admin-grids van Magento leunen op de standaard zoekfunctie op plekken die je pas vindt als ze breken.

Eén harde regel voor alle drie de vormen: laat de nieuwe engine nooit de source of truth voor voorraad worden. Het reservation system van Magento 2.4 verwacht dat het die rol pakt. Indexeer is_in_stock vanuit Magento; bereken hem niet in de search-laag. Dat leerden we toen voor de tweede keer een spook-uitverkocht product tijdens een flash sale alsnog verkocht werd.

Waar deze klant uitkwam

Toen we eerder dit kwartaal de search-laag bouwden voor een Nederlandse woonwinkel-operator op Magento 2.4, liepen we niet vast op de embedding-pipeline; we liepen vast op een marketing-lead die weigerde een synoniemen-CSV te leren. Uiteindelijk hebben we Typesense achter een klein admin-scherm in Magento gezet, zodat ze tussen koffie en stand-up door cluttercore → vintage messing, eclectisch kon toevoegen. Die laatste meter is het stuk procesautomatisering dat zich elke keer terugverdient.

Wat je vandaag kunt doen

Trek je laatste 30 dagen aan nul-resultaat-queries uit Magento. De query is één regel:

SELECT query_text, num_results, popularity
FROM   search_query
WHERE  num_results = 0
ORDER  BY popularity DESC
LIMIT  100;

Als meer dan 5% van de top 100 echte product-intenties in slang zijn, dan is het probleem dat je gaat oplossen niet "we hebben AI-zoek nodig". Het is "we hebben een synoniem-workflow nodig". Kies de stack die je marketing-lead die workflow geeft, vóór je de stack kiest die het minst per duizend queries kost.

Kern

Onder de €10M doet het verschil per 1k queries tussen managed en self-hosted er minder toe dan wie de synoniemenlijst beheert zodra kopers slang gaan typen.

FAQ

Waarom niet Elasticsearch met een OpenAI rerank-pipeline?

Voor een Magento-shop onder de €10M domineren de integratie- en ops-kosten. Elastic komt pas tot zijn recht zodra je een eigen search-platformteam hebt. Daaronder kan marketing er niet mee werken en betaal je voor capabilities die je nooit gebruikt.

Vangt NeuralSearch TikTok-slang écht automatisch op?

Het laat nul-resultaat-queries met volume zien, zodat marketing binnen minuten synoniemen kan toevoegen. Het verzint de koppeling niet. Een mens moet nog steeds beslissen dat cluttercore in jouw catalogus gelijk staat aan vintage messing.

Kunnen we OpenSearch houden en er een reranker bovenop schroeven?

Ja, en bij laag volume is dat de goedkoopste route. Je verliest de vector-recall van echte semantische zoek, dus queries die ver buiten je vocabulaire vallen missen nog steeds. Scoor het op as drie: tijd tot het eerste bruikbare resultaat.

Welke index-grootte heeft Typesense Cloud nodig voor een catalogus van 50.000 SKU's?

Een single-node cluster met 4 GB RAM trekt het comfortabel met vector mode. Ga vóór Black Friday naar HA (drie nodes) voor failover, niet voor capaciteit. Let op RAM, niet op disk.

magentoe-commerceintegrationsarchitectureoperationsstrategy

Iets bouwen?

Start een project