Customer-specific Search: Wenn jeder Einkäufer ein anderes Sortiment sieht
In B2B-Implementierungen sehen wir immer dieselbe Schlüsselszene: Zwei Einkäufer öffnen denselben Shop, tippen denselben Suchbegriff — und sehen unterschiedliche Trefferlisten, unterschiedliche Preise, manchmal sogar unterschiedliche Produkte. Das ist kein Fehler im System, das ist die Anforderung. Im B2B definiert der Vertrag, welches Sortiment sichtbar ist; die Pricing-Engine, welcher Preis gilt; das ERP, welcher Bestand greift. Die Suche ist das Frontend, an dem diese drei Welten zusammenkommen müssen — synchron, performant und nachvollziehbar. In diesem Beitrag zeigen wir drei Implementierungs-Muster für kundenspezifische Suchindizes, wie Kontraktpreise sichtbar in Trefferlisten landen, und welche Sync-Strategien zwischen ERP, PIM und Suchindex tragen. Wer einen Schritt weiter zurück will — wie die Daten-Foundation in der B2B-Industrie aussieht, die solche Setups speist — findet das in der Serie Daten & Snowflake unter "Snowflake als Daten-Foundation für B2B-Industrie".
Drei Muster für kundenspezifische Suchindizes
Wer kundenindividuelle Sortimente abbilden will, hat im Kern drei architektonische Optionen — und keine davon ist universell richtig. Die Wahl entscheidet sich an Sortimentsgröße, Anzahl der Kundengruppen, Vertragsdynamik und Performance-Budget.
Muster 1: Multi-Tenant-Indizes — ein Index pro Kundengruppe. Jede Kundengruppe (oder im Extremfall jeder Großkunde) erhält einen eigenen Index, der ausschließlich das für sie sichtbare Sortiment enthält. Der Vorteil: Eine Suchanfrage trifft nur den relevanten Index, ohne nachgelagerte Sichtbarkeits-Filter. Das skaliert in Performance — bis zur Index-Explosion. Wer mehrere tausend Kunden mit jeweils eigenem Sortiment hat, stößt schnell an die Grenzen der Cluster-Metadata, wie Elastic in seinem Leitfaden zu Multi-Tenancy mit Elasticsearch und OpenSearch ausführlich beschreibt.
Muster 2: Filtered Index — gemeinsamer Index mit Sichtbarkeits-Filter. Ein einziger Index enthält das Gesamtsortiment; jedes Produktdokument trägt eine Liste der berechtigten Kundengruppen, Business Units oder Vertragsnummern. Zur Suchzeit wird ein Filter-Prädikat ("visibility_groups contains $customerGroup") an die Query angehängt. Das skaliert in der Anzahl der Kunden problemlos, erkauft sich die Skalierung aber mit zwei Lasten: Jedes Produkt-Update muss alle berechtigten Kunden-Gruppen pflegen, und die Trefferlisten-Sortierung muss damit umgehen, dass für unterschiedliche Kunden unterschiedliche Subsets relevant sind.
Muster 3: Server-Side Re-Ranking. Die Suche liefert ein Roh-Result-Set; eine Re-Ranking-Schicht hinter dem Index entscheidet, welche Treffer für den angemeldeten Einkäufer sichtbar sind, in welcher Reihenfolge sie ausgespielt werden und welcher Preis daneben steht. Das Muster ist die flexibelste Option — es entkoppelt Entitlement-Logik vom Index — und gleichzeitig die kritischste in Latenz und Last. Wer hier baut, kauft sich Architektur-Freiheit zum Preis von Antwortzeiten, die unter Beobachtung gehören.
In B2B-Projekten bei foobar Agency sehen wir am häufigsten Mischformen: ein gemeinsamer Index für das Standard-Sortiment plus dedizierte Indizes für die zehn bis fünfzig größten Kunden mit stark individuellen Sortimenten. Das ist die Variante, die in den seltensten Fällen "elegant" ist — aber in den meisten Fällen trägt.
Kontraktpreise sichtbar machen — Pre-Compute oder Live-Call
Sobald kundenspezifische Sortimente stehen, kommt die zweite, häufig schwierigere Frage: Welcher Preis steht neben dem Treffer? Im B2B sind Listenpreise eine fiktive Größe — was gilt, ist der Vertrag. Filter ("Preis aufsteigend"), Sortierung und das Vertrauen in die Trefferliste hängen direkt daran. Es gibt zwei tragfähige Architektur-Pfade.
Pfad A: Pre-Compute — Preise wandern in den Index. Kontraktpreise werden vorberechnet und kunden- oder kundengruppen-spezifisch in den Suchindex geschrieben. Die Trefferliste rendert in derselben Anfrage, in der sie auch die Produkte holt. Performance ist hervorragend; die Belastung verschiebt sich auf den Sync-Pfad. Bei tausenden Kunden mit individuellen Konditionen wächst der Index entsprechend, und jede Preisänderung im ERP erzeugt eine Welle von Re-Indexings. Algolia dokumentiert diesen Ansatz für B2B-Szenarien explizit über segment- oder buyer-spezifische Preisfelder; vergleichbare Patterns sind in Elastic-Setups gängig.
Pfad B: Live-Call zur Suchzeit — Preise aus der Pricing-Engine. Die Suche liefert nur die Produktinformationen; ein Pricing-Service oder das ERP wird zur Suchzeit angefragt und liefert die finalen Preise. Vorteil: kein Index-Bloat, immer aktuelle Preise. Nachteil: jeder Sucht-Request erzeugt einen synchronen Call gegen die Pricing-Engine — bei großen Trefferlisten mit Pagination ist das die Stelle, an der Latenzen kippen. In der Praxis wird dieser Pfad fast immer durch einen Caching-Layer entlastet, etwa Redis mit kurzer TTL pro Kunde-Produkt-Kombination.
Welcher Pfad trägt, hängt an drei Hebeln: Volatilität der Preise (ändern sich Kontrakte täglich oder quartalsweise?), Anzahl der Kunden mit individuellen Preisen, und die Anforderung an Echtzeit-Konsistenz (sieht der Einkäufer den Preis, der im Warenkorb fällig wird?). Eine valide dritte Option gibt es nicht: Listenpreise in der Suche zeigen und im Warenkorb korrigieren ist der schnellste Weg, das Vertrauen in den Shop zu verspielen.
ERP- und PIM-Anbindung: Wie aktuell ist aktuell genug?
Die Suche ist nur so gut wie der Sync, der sie speist. Drei Sync-Strategien stehen in B2B-Setups regelmäßig zur Wahl — sie unterscheiden sich in Latenz, Implementierungs-Aufwand und der Konsistenz, die sie garantieren können.
Event-driven Sync. ERP und PIM publishen Änderungen über einen Message-Broker (Kafka, RabbitMQ, AWS SNS/SQS); ein Consumer schreibt in den Suchindex. Latenz: typischerweise Sekunden bis sub-Minute. Voraussetzung: Die Quellsysteme können Events erzeugen — was bei modernen ERPs gegeben, bei älteren SAP-ECC-Setups oft nur über Middleware machbar ist.
Change Data Capture (CDC). Die Änderungen werden direkt aus den Transaktions-Logs der Datenbank gelesen — log-basiertes CDC mit Werkzeugen wie Debezium ist der Industriestandard. Latenz liegt im Sekunden- bis Minutenbereich, bei minimaler Belastung des Quellsystems. CDC ist die pragmatische Wahl, wenn die Quelle keine sauberen Domain-Events liefert, aber Sie nicht stundenweise nachhinken wollen. Die dbt-Labs-Übersicht zu Data-Movement-Patterns positioniert CDC explizit zwischen Batch und Streaming als das Muster, das in der Praxis am häufigsten trägt.
Batch / Scheduled Sync. Klassischer nächtlicher Full- oder Delta-Import. Latenz: Stunden bis Tage. Für stabile Stammdaten (Maße, Norm-Bezeichnungen, Konstruktions-Attribute) völlig ausreichend; für Preise und Bestände selten. Wer Bestände nur einmal pro Nacht synct, produziert Aufträge auf nicht mehr verfügbare Ware — das ist der Punkt, an dem die Suche das Vertrauen verliert, nicht das ERP.
In den meisten B2B-Implementierungen sehen wir eine Mischarchitektur: Batch für die Produkt-Stammdaten aus dem PIM (täglich, manchmal mehrfach), CDC oder Event-driven für Preise und Bestände aus dem ERP (sub-Minute). Welche Frequenz für welches Feld trägt, ist eine Entscheidung pro Feld — nicht pro System. Das gehört in die Architektur-Skizze, nicht in die Sprint-Backlog.
Cross-Link: Wenn diese Sync-Architektur über Snowflake als zentrale Daten-Plattform laufen soll — was wir bei B2B-Industrie-Kunden regelmäßig empfehlen — finden Sie die Vertiefung in der Serie Daten & Snowflake, Post 3 ("Snowflake als Daten-Foundation für B2B-Industrie").
Fünf Fallen bei kundenspezifischen Suchindizes
Diese fünf Fehler tauchen in Architektur-Audits regelmäßig auf — und kosten in der Regel deutlich mehr als ein sauberer Entwurf vorab.
# | Falle | Was passiert | Was es kostet |
1 | Sichtbarkeits-Filter erst im Frontend | Der Index liefert das Gesamtsortiment, das UI versteckt unsichtbare Treffer | Falsche Trefferzahlen, falsche Sortierungen, latente Datenleaks |
2 | Listenpreis im Index, Kontraktpreis im PDP | Sortierung "Preis aufsteigend" produziert kunden-individuell falsche Reihenfolgen | Reklamationen, manuelle Korrekturen im Vertrieb |
3 | Multi-Tenant-Index ohne Index-Lifecycle | Hunderte Indizes wachsen unkontrolliert, Cluster-Metadata kippt | Performance-Einbruch, ungeplante Reindex-Migrationen |
4 | ERP-Sync ohne Idempotenz | Doppelt verarbeitete Events lassen Indizes auseinanderdriften | Schleichende Inkonsistenzen, schwer reproduzierbare Bugs |
5 | Vertretungsregeln / Stellvertreter ignoriert | Wer für einen Kollegen einkauft, sieht das eigene statt das vertretene Sortiment | Falsche Bestellungen, Schatten-Workflows per Telefon |
Customer-specific Search ist der Punkt, an dem B2B-eCommerce vom Katalog-Frontend zur echten Vertragsschnittstelle wird. Unsere Kunden sortieren diese Frage genau dann, wenn der erste Großkunde eine personalisierte Sicht erwartet — und merken im selben Moment, dass die Antwort an drei Stellen gleichzeitig hängt: Index, Pricing, Sync. Wer das jetzt sauber baut, macht die nächsten Vertrags-Eskalationen in der IT lösbar, nicht im Vertrieb.
Häufig gestellte Fragen
Die Antwort hängt am Vertragstyp. Stammkunden mit jährlich verhandelten Konditionen brauchen keine Sekunden-Aktualität — ein nächtlicher Sync reicht. Projektgeschäft mit täglich verhandelten Preisen, Spot-Konditionen oder dynamischen Mengenrabatten dagegen verlangt sub-Minute. In Mischsortimenten lohnt eine Differenzierung pro Produktkategorie: stabile Stammdaten batchweise, volatile Preise event-driven. Wichtiger als die absolute Frequenz ist, dass der Preis in der Trefferliste exakt dem entspricht, der im Warenkorb gilt.
Die Skalierungsgrenze liegt selten im Index selbst, sondern im Sync-Pfad und in der Entitlement-Logik. Multi-Tenant-Indizes skalieren bis in den niedrigen vierstelligen Bereich an Tenants gut; darüber hinaus überwiegen die Vorteile eines Filtered-Index. Bei Kontraktpreisen ist die kritische Größe das Produkt aus Anzahl Kunden mal Anzahl Artikel mit individueller Preisbildung — sobald das in den zweistelligen Millionenbereich wächst, lohnt sich eine Segmentierung in Preisgruppen statt vollständig individueller Konditionen.
Im B2B-Alltag arbeiten Einkäufer regelmäßig "im Auftrag von" — etwa wenn ein zentraler Einkauf für mehrere Standorte bestellt oder ein Vertreter eine Krankheits-Vertretung übernimmt. Die Suche muss in diesem Fall den effektiven Kontext (für welches Account, welche Business Unit, welche Vertragsnummer wird gerade gesucht?) auswerten, nicht nur die User-ID des eingeloggten Mitarbeiters. Plattformen wie commercetools und Spryker modellieren das über Business Units und Account-Wechsler im UI; die Suche muss diesen Kontext über jeden Request mittragen und im Index respektieren.
Architektur-Workshop kundenspezifische Suche
In einem zweistündigen Workshop klären wir mit Ihnen, welches Index-Muster zu Ihrer Kundenstruktur passt, wie Kontraktpreise sichtbar werden und welche Sync-Strategie zwischen ERP, PIM und Suche trägt — entlang Ihrer Plattform und Ihrer Vertragslandschaft.
Kontakt aufnehmen
Wir freuen uns auf Ihre Anfrage.
Bitte akzeptieren Sie Marketing-Cookies, um das Kontaktformular zu laden.