Problemknuser: Komplekst produktkatalog med konfigurérbare og simple produkter i Magento

Skrevet af Morten Birkelund & Nina Maria Gislinge
Udgivet
Længde
6 min.

I Magento kan man nogle gange komme ud for et problem, som ved første øjekast kan virke umulig at løse. Det kan være problemer, hvor der ikke er en løsning, der ligger lige til højrebenet.

Dette blogindlæg er det første af mange i vores Problemknuser-serie. Serien består af en række tekniske blogindlæg/cases, hvor vi beskriver de udfordringer og løsninger, som vi og vores kunder er stødt på i Magento gennem tiden.

I dette blogindlæg vil vi kigge nærmere på, hvordan du kan løse et problem med produktvisninger i frontend fra backend, hvis du har et stort produktkatalog med mange konfigurérbare produkter.

Det er selvfølgelig langt fra alle, der vil opleve dette problem. Dog har vi set eksempler hos en kunde, hvor dette problem opstod uden en naturlig løsning på det. Og for at du ikke skal lede for længe efter svaret, får du det allerede nu.

Vi løste problemet ved at fjerne de resterende tegn i tekststrengen, der lå over grænsen, sådan så produkterne blev vist i frontend igen.

Det skal dog nævnes, at dette ikke er en korrekt løsning, og at der ikke umiddelbart ligger en god løsning lige til højrebenet på dette problem. Derudover er værdien af den fjernede data ringe ift. de udfordringer, det skabte, og derfor er denne løsning den bedste, vi kunne finde, i praksis.

Dette var et af mange eksempler på, hvordan en stor og kompleks varestruktur kan skabe problemer ved “ukendte” grænser i Magento. Derfor er vores råd også, at du skal overveje kompleksiteten af dit produktkatalog, for det kan give udfordringer, der ikke sådan er lige til at løse.

Hvis du savner en smule mere kontekst til løsningen, så kan du i resten af blogindlægget læse en mere uddybende forklaring om problemet og den løsning, vi fandt, samt hvordan Magento er opbygget.

Beskrivelse af case

Vi havde en kunde, som umiddelbart havde en forholdsvis lille webshop på omkring 1000 forskellige produkter. Det specielle ved kunden var, at de havde en produktstruktur, som gjorde, at de i Magentos system blev nødt til at bruge produkttypen ‘Konfigurérbare produkter’. Det betyder, at hvis du har et produkt, fx en t-shirt, som er konfigurérbart, kan du tilknytte en række attributter, som fx farve, størrelse osv. Disse kombinationsmuligheder bliver i Magento oprettet som simple produkter.

Med udgangspunkt i t-shirten kan du så have den i 3 forskellige størrelser og 3 forskellige farver, som i Magentos system vil vise sig som 9 reelle produkter, men som bruger vil du kun få vist ét produkt med flere varianter. I backend tælles det som 9 simple produkter (varianter) + 1 konfigurérbart produkt.

Kunden havde ca. 1000 produkter med 2-4 attributter tilknyttet. Dette giver utroligt mange valg- og kombinationsmuligheder, som reelt giver omkring 350.000 produkter i backend. Det bliver lige pludselig et stort produktkatalog, som kan give systemet en række udfordringer.

Hvad var problemet?

Kundens problem var, at produkterne af en eller anden uforklarlig årsag ikke dukkede op i deres webshop. Der var intet i backend eller Magentos logfiler, der fejlede, når vi fx kørte en indeksering. Der var kort sagt intet, der tegnede et billede af, at noget skulle være galt, men det var der alligevel.

På et tidspunkt tegnede der sig et billede af, at ud af de 1000 produkter var der 30, som ikke dukkede op i frontend. Vi dobbelttjekkede alle indstillinger, men igen fandt vi ingen svar. Derfor dykkede vi endnu længere ned i netop de 30 produkter.

Det viste sig, at de 30 produkter så helt ens ud. De havde samme attributter, navne og varenummer. Der var altså ingenting, der så ud som om, at produkterne var forskellige. Vi havde to produkter, der havde præcis det samme navn, præcis de samme attributter, men bare med forskellige produkttekster. Det ene dukkede op, det andet gjorde ikke.

Det viste sig, at problemet var antallet af simple produkter, som de konfigurérbare produkter havde tilknyttet. Vi lavede en liste over kundens 1000 produkter og listede samtidigt også antallet af simple produkter (varianter), som hvert konfigurérbart produkt havde tilknyttet. Herefter sorterede vi dem efter antal af varianter. Her viste det sig, at det var alle de produkter, der havde flest varianter tilknyttet, der var problemet.

Når du søger i Magentos system efter et produkt, kan du finde produktet på data fra både det konfigurérbare og de simple produkter. Så hvis du har en t-shirt, der hedder ‘t-shirt’ som konfigurérbart produkt, kan du også finde den på de simple produkter, der hedder ‘t-shirt-smallgrøn’ osv. Magento tager så al data fra de simple produkter og smider dem sammen i en lang tekststreng. Denne streng gemmes i Elasticsearch, som er den database, Magento bruger til fx søgninger.

En tekststreng kan blive for lang og overskride grænsen for antal tegn, som Elasticsearch kan håndtere. Grænsen er på 32.766 tegn for at være helt specifik.  For os betød det konkret, at når Magento kombinerer alle produkttitler i en tekststreng, kunne vi ikke se en klar grænse mellem, hvornår et produkt blev vist i frontend, og hvornår det ikke gjorde, da nogle havde en længere eller kortere produkttitel.

Men selvom vi fandt problemet, lå der stadig ingen klar løsning på udfordringen med produkterne.

Hvad var løsningen?

Vi fandt løsning gennem Magentos Community, hvor andre var stødt på præcis samme udfordring. Der blev foreslået to løsninger, og vi valgte en kombination af begge løsninger for det bedste resultat.

Løsningen var først at fjerne duplikerede ord fra tekststrengen og derefter fjerne de resterende tegn, som lå over grænsen. I praksis betyder det, at når grænsen er på 32.766 tegn, fjerner vi, smider væk om man vil, de tegn, der overskrider grænsen.

Dette lyder jo som en meget simpel løsning, og det er den i virkeligheden også, når først problemet er blevet lokaliseret. Dog skal det nævnes, at dette egentlig ikke er en korrekt løsning på problemet. Den findes desværre ikke. Desuden er løsningen ikke helt optimal, da den gør, at dine søgeresultater bliver dårligere, fordi vi fjerner noget af tekststrengen og dermed ikke får det hele med.

Tager vi udgangspunkt i ordet t-shirt, vil der i en tekststreng stå t-shirt mange gange. Rigtig mange gange. Derfor er spørgsmålet, om det i virkeligheden er nødvendigt, at det samme ord går igen og igen. Du vil utvivlsomt miste andet end ordet t-shirt ved at fjerne de tegn, som er over grænsen. Men i rigtig mange tilfælde vil den data, du smider væk, være relativt ligegyldig.

Derfor kan løsningen sagtens være en god løsningen i praksis, selvom det er en ukorrekt og ikke optimal løsning i teorien. Derfor er rådet helt klart: Hold dit produktkatalog så simpelt som muligt!

Hvad gør Magento ved problemet?

Denne udfordring har formentlig altid ligget i Magento, siden de skiftede til søgebasen Elasticsearch. Det er en fejl, som er blevet indrapporteret mange gange, men som har fået meget lidt fokus, da det er de færreste, der har så komplekst et produktkatalog.

Selvom man normalt måske kun har maks 30-50 simple produkter under ét konfigurerbart produkt og derfor ikke vil støde på lige netop denne udfordring, burde det være en fejl, som Magento burde rette. Det er en uhensigtsmæssighed, og de er aldrig gode at have i et IT-system.

Andre i Magentos Community, der har oplevet samme problem, oplevede at nå grænsen allerede ved 400-500 varianter, hvilket skyldes længden på deres produkttitler – vi havde omkring 1500 varianter. Dette er også et godt eksempel på, at der med mange af de begrænsninger, du finder i Magento, ikke er en klar grænse, for hvornår problemerne opstår. Nogle gange, fordi den er afhængig af data – andre gange, fordi grænsen er ukendt, da ingen har stødt på den endnu.

Denne udfordring er også en godt eksempel på, at selvom IT-systemer i teorien ikke har nogle begrænsninger, så fungerer praksis på en anden måde. Man kan ikke helt forudse de udfordringer, der følger med, når du presser et system med meget data.

Har du brug for hjælp?

Oplever du et problem med Magento, eller er du blevet nysgerrig på, hvordan Salecto kan hjælpe dig og din webshop, er du altid velkommen til at kontakte os. Ring til os på tlf. +45 81 81 01 01 eller skriv en mail til support@salecto.dk, så vender vi hurtigst muligt tilbage.

Tak for interessen.

Jeg håber, at jeg har vakt din interesse. Hvis du vil vide mere omkring emnet, så er du velkommen til at skrive til mig.

Morten Birkelund
CTO, Partner