Search w sklepie B2B - Algolia, Elasticsearch, OpenSearch, Meilisearch
Klient B2B na PLP filtruje po 6 atrybutach (kategoria, producent, kolor, średnica, dostępność, grupa cenowa) i oczekuje wyników w pół sekundy. MySQL z domyślną konfiguracją Magento przy 30k SKU daje to w 4-8 sekund. Wtedy klient zaczyna mówić „wolny sklep". Tu wchodzi search dedykowany - Algolia, Elasticsearch, OpenSearch, Meilisearch. Wybór nie jest oczywisty, koszt zaskakuje, ROI jest mierzalny.
Spis treści (8)
W skrócie
- 1. Próg migracji z MySQL: ~5-10k SKU + filtrowanie po 3+ atrybutach
- 2. Elasticsearch / OpenSearch: open-source, samodzielne utrzymanie, najlepsze dla średnich sklepów
- 3. Algolia: SaaS, najlepsze UX, droższe (per query + per record)
- 4. Meilisearch / Typesense: młodsze, lżejsze, mniejszy ekosystem
- 5. Magento 2.4+: wymaga Elasticsearch / OpenSearch z urzędu
- 6. Shopware: opcjonalne, ale dla skali B2B - wymagane
Co konkretnie robi search dedykowany
MySQL z full-text search działa do pewnej skali. Powyżej - sypie się na:
1. Filtrowanie po wielu atrybutach.
Klient zaznacza 6 filtrów. MySQL musi zrobić JOIN-y między tabelami product, product_attribute_value, category_product × każdy atrybut. Query plan eksploduje, czas rośnie liniowo z liczbą filtrów.
Search engine trzyma wszystko zindeksowane w jednym dokumencie. Filtr po 6 atrybutach = jeden lookup w indeksie. 50-200ms zamiast 4-8 s.
2. Full-text search z relevance.
MySQL: LIKE '%fraza%' lub MATCH AGAINST. Bez fuzzy matching, bez relevance scoring.
Search engine: tokenizacja, stemming (kupić = kupowanie = kupić), fuzzy matching (literówki), synonimy, custom ranking.
3. Faceted search (filtry z licznikiem).
„Producent: Bosch (123), Makita (87), Stanley (45)..." - licznik produktów na filter.
W MySQL: osobne query per filter. 20 filtrów × COUNT(*) = bardzo wolno.
W search engine: aggregation w jednym query. Szybko.
4. Typeahead / autocomplete.
„Bosch wkr..." → sugestie. MySQL - trudne / wolne. Search engine - natywne.
Elasticsearch / OpenSearch - domyślny wybór
Elasticsearch to dojrzały silnik open-source (od 2010). Od 2021 licencja zmieniona przez Elastic na komercyjną dla niektórych use-case'ów. AWS w odpowiedzi wystartował fork OpenSearch (Apache 2.0).
Z praktycznego punktu widzenia OpenSearch ≈ Elasticsearch 7.10 + AWS rozwój. Większość projektów polskich B2B w 2026 idzie na OpenSearch (managed na AWS) lub Elasticsearch self-hosted.
Mocne strony:
- Dojrzały, dobrze udokumentowany
- Magento 2.4 / Adobe Commerce wymaga go z urzędu
- Bardzo elastyczny (custom mappings, custom analyzers, scripted scoring)
- Skala - można obsłużyć miliony dokumentów
- Wbudowane aggregations
Słabe strony:
- Wymagający w hostingu (RAM-żerny - JVM)
- Krzywa uczenia - query DSL elastic to inny język
- Self-hosted = administracja, monitoring, klastrowanie
Hosting:
- Self-hosted: 3-7 nodes (HA cluster), 16-32 GB RAM na node, ~3-10 tys. zł / mies.
- Managed: Elastic Cloud, AWS OpenSearch Service, od ~$200/mies. do dużych kwot
- Hetzner / OVH bare-metal z własną konfiguracją Elastic - najtaniej
Wdrożenie dla średniego sklepu B2B: 60-120 tys. zł (indeksowanie, mappings, query optimization, integracja z platformą).
Algolia - SaaS premium
Algolia to amerykański SaaS, najbardziej dopracowane UX wśród searchów. Aspekty:
Mocne strony:
- Out-of-the-box typeahead, instant search, faceted search
- Najlepsza widoczna jakość wyszukiwania (relevance, fuzzy)
- Bardzo szybkie (zazwyczaj poniżej 50ms global)
- Personalizacja, A/B testing, analytics w cenie
- Brak administracji (managed)
- Gotowe integracje dla Magento, Shopware, Salesforce
Słabe strony:
- Drogie. Cennik per record (każdy zindeksowany dokument) + per query (każde wyszukiwanie).
- Realne kwoty dla średniego sklepu B2B z 30k SKU: 400-1500 USD / mies., dla większych - kilka tys. USD / mies.
- Vendor lock-in
- Brak kontroli nad infrastrukturą
Kiedy Algolia ma sens:
- Sklepy gdzie UX search to wyróżnik (B2C luksusowe, fashion, lifestyle)
- Mniejsze sklepy do ~20k SKU bez własnego zespołu utrzymującego Elastic
- Projekty gdzie speed-to-market jest kluczowe
Kiedy Algolia nie ma sensu:
- Duże katalogi (>50k SKU) - koszt eksponuje
- B2B gdzie search jest narzędziem, nie wyróżnikiem
- Wymóg custom logic (scripted scoring, special filtering)
Meilisearch / Typesense - młodsze open-source
Meilisearch (od 2018, Rust) i Typesense (od 2017, C++) to lżejsze alternatywy dla Elasticsearch. Cele: szybsze, prostsze, mniej zasobożerne.
Mocne strony:
- Mniej wymagający w hostingu (jeden binarny plik, mniej RAM-u)
- Szybkie konfiguracje (mniej boilerplate'u niż Elastic)
- Dobre UX dla podstawowych use-case'ów
- Rosnące ekosystemy
Słabe strony:
- Mniejszy ekosystem (mniej integracji gotowych)
- Mniejsza społeczność
- Mniej funkcji enterprise (np. cross-cluster replication)
- Mniej deweloperów na rynku
Z mojej praktyki: zrobiłem PoC z Meilisearch dla klienta zamiast Elastic (chcieli prostszy hosting). Wszystko działało technicznie. Ale: brak gotowej integracji z Magento (zrobiłem custom), mniej narzędzi monitoringu, klient zaniepokojony „świeżością". Po 2 miesiącach przeszli na OpenSearch. To nie krytyka Meilisearch, to historia. Dla projektów greenfield bez wymogów ekosystemu - Meilisearch potrafi być świetne.
Magento / Shopware i search
Magento 2.4+: Elasticsearch lub OpenSearch jako wymóg. Sklep się nie uruchomi bez. Magento Open Source ma wbudowany Elastic search adapter, Adobe Commerce dodaje Live Search (managed Elastic od Adobe - droższy, więcej funkcji).
Shopware 6: Storefront search domyślnie wewnątrz platformy (MySQL-based), Elasticsearch jako enhancement od pewnej skali. Konfigurowalne.
Hyvä Theme: uplift na klasyczne Magento, nie zmienia search backend.
Algolia dla Magento: oficjalny moduł od Algolia, dobrze utrzymywany, jeden z popularniejszych modułów w polskim B2B.
Algolia dla Shopware: oficjalny plugin, mniej dojrzały niż dla Magento.
Indeksacja - co i jak
Co indeksować:
- Nazwa produktu, opis, SKU, EAN
- Atrybuty filtrowalne (kolor, rozmiar, producent, kategoria)
- Atrybuty wyświetlane (cena bazowa, dostępność)
- Synonimy (śruba M8 = wkręt M8)
- Custom fields (np. tagi sezonowe)
Czego nie indeksować:
- Atrybuty zmieniające się często (stan, cena dynamiczna kontraktowa) - to czytasz on-demand
- Dane wrażliwe (atrybuty per kontrahent)
- Tłumaczenia jeśli nie chcesz multi-language search
Częstotliwość reindeksowania:
- Full reindex: raz na dobę (nocą)
- Delta: co 5-15 min (produkt zmieniony → reindex jego dokumentu)
- Event-driven: webhook z PIM/ERP → reindex konkretnego SKU
Czas indeksacji 50k SKU:
- Elasticsearch: ~10-30 min (zależnie od mappings i hardware)
- Algolia: ~5-15 min (managed, automatyczne)
- Meilisearch: ~5-20 min
Custom ranking dla B2B
Klient B2B ma inne potrzeby niż B2C. Custom ranking factor:
1. Dostępność w preferowanym magazynie kontrahenta.
Klient z Wrocławia widzi pierwsze produkty z magazynu Wrocław. Reszta na końcu.
2. Historia zakupów.
Klient kupował 50× konkretny produkt - pokazuj go wyżej.
3. Cena kontraktowa promowana.
Produkty z najlepszą marżą dla kontrahenta wyżej (a nie tylko wg ceny absolutnej).
4. Promocje i nowości.
Aktywne promocje boostowane w rankingu.
5. Stan magazynowy.
Produkty z 1000 szt. wyżej niż „ostatnia sztuka" (chyba że klient sortuje po dostępności).
Implementacja:
- Elasticsearch: Painless scripting + function_score query. Pełna kontrola, własna logika.
- Algolia: custom ranking rules w panelu + InstantSearch.js, mniej kodu.
- Meilisearch / Typesense: ograniczone, ale podstawowe rankingi są.
Koszt i ROI
Wdrożenie pierwszego sklepu z Elasticsearch / OpenSearch:
- 60-120 tys. zł (mappings, integracja z platformą, custom ranking, monitoring)
Hosting Elastic (3-node cluster):
- Self-hosted Hetzner: 3-7 tys. zł / mies.
- AWS OpenSearch Service: $400-1500 / mies.
- Elastic Cloud: $300-1500 / mies.
Algolia:
- Free tier: do 10k records, do 100k queries/mies. - dla bardzo małych
- Średnie B2B: $400-1500 / mies.
- Duże: $2000-10000+ / mies.
ROI:
Poprawa LCP na PLP z 5s do 1.5s = wymierna poprawa conversion rate (zazwyczaj 5-15%). Dla sklepu z 30 M zł obrotu = 1.5-4.5 M zł dodatkowej sprzedaży rocznie. ROI w 6-12 miesięcy.
FAQ
Czy MySQL z dobrze ustawionymi indeksami wystarczy? Do ~5k SKU + 2-3 filtry - tak. Powyżej - search dedykowany. Nie ma „obejścia".
Czy mogę używać Elastic do innych celów niż search? Tak, popularne use-case: logi (Elastic Stack - ELK), monitoring, analytics. Często ten sam klaster.
Magento 2 wymaga Elasticsearch - czy mogę OpenSearch? Tak, od Magento 2.4.4 OpenSearch jest oficjalnie wspierany. Coraz częstszy wybór (licensing).
Algolia czy Elasticsearch dla nowego sklepu? Jeśli budżet < 1 mln zł i zespół ma kompetencje DevOps - Elastic/OpenSearch. Jeśli budżet pozwala, prosty sklep do 20k SKU, mały zespół - Algolia.
Czy mogę robić personalizację search (history-based) bez ML? Tak, na poziomie boostingu produktów oglądanych / kupowanych przez klienta. Bez ML, na regułach. Elasticsearch function_score sobie z tym poradzi.
Co dalej
- Pillar architektury: Architektura dużych sklepów
- Wydajność PLP (lista produktów): Optymalizacja PLP
- Pełny pillar wydajności: Wydajność e-commerce
- PIM jako źródło danych dla search: Akeneo PIM
O autorze
Jakub Owsianka
Architekt rozwiązania w WiseB2B - silniku platform B2B. Zaczynał po stronie biznesu (własne sklepy), potem deweloper, dziś projektuje wdrożenia dla sklepów z katalogami w dziesiątkach tysięcy SKU. W ostatnich latach wdrożył AI-development w zespole i funkcjonalności oparte o AI bezpośrednio w silniku sklepu.
Czytaj dalej w temacie wydajności
Wszystkie wpisyMasz pytanie do tego artykułu?
Dodatkowy kontekst, problem z własnym wdrożeniem, druga opinia - napisz wprost. Odpowiadam osobiście w 1-2 dni robocze.