Lid |
|
Duidelijk verhaal, heb je ook wel gelijk in ter informatie:
Het gaat over een webshop. We hebben maar dan 500.000 artikelen (ook dingen die niet meer verkocht / besteld kunnen worden staan er nog in, database optimalisatie komt er aan maar voor nu dus een hele grote database).
Data is veel aanwezig, merk, grootte, vorm, type, kleur, prijs, voorraad, fotos, materiaal en zo voort... echt alles is aanwezig en waarop iemand eventueel zou kunnen zoeken qua sleutelwoorden, dat is aanwezig.
Tot in detail is eigenlijk alles aanwezig dus. Wat voor ons belangrijker is, en als voorbeeld pak ik een willekeurige branche (horloges in dit voorbeeld) is het volgende:
Ik zoek een Rood horloge van het merk Diesel. Ik wil een metalen band en geen ander materiaal.
"rood diesel horloge met metalen band".
Mijn zoekresultaten zullen nu alle kanten op zoeken omdat:
1. Het woord rood komt voor, er zijn duizenden horloges (van andere merken) die rood zijn
2. Het woord horloge komt in bijna elke omschrijving van een individueel product voor
3. Het woord metaal komt ook vaak voor bij horloges met metalen band (ongeacht merk)
4. Net als bij punt 3, geld dit ook voor punt 4 met het woord "(horloge)band".
De bezoeker krijgt dus bijvoorbeeld, 600 resultaten terug die relatief kloppen, maar niet 100% accuraat zijn omdat er ook andere merken getoond worden, en horloges die niet rood zijn maar wel een metalen band hebben, en visa versa.
Het "ideaal" zou zijn dat we dit soort dingen kunnen herkennen en kunnen zeggen
"Hé, hij wilt een ROOD HORLOGE van het merk DIESEL met een METALEN BAND".
En vervolgens krijgt de bezoeker alleen horloges van het merk diesel in de kleur rood met een metalen band te zien.
Echter wanneer iemand zoekt op "Rood horloge" dan zou hij alle horloges in de kleur rood moeten zien ongeacht het merk of andere specificaties. Het zelfde geld voor een zoekopdracht naar "blauw horlogebandje" of "blauw horloge bandje" dus met een spatie tussen de woorden.
Het voornaamste probleem is dus eigenlijk, hoe kan je al deze dingen op een efficiënte manier ondervangen.
Mensen gebruiken verschillende benamingen, een voorbeeld:
1. Horlogebandje
2. Horloge bandje
3. Horloge strap
4. Strap
dat samen met de mogelijke zoek combinaties. Ik begrijp, je kan nooit alles ondervangen, aangezien mensen ook spelfouten kunnen maken of idioot rare zoekopdrachten kunnen invullen, maar de wens is wel om het zo accuraat mogelijk te kunnen maken met oog op snelheid.
Snelheid.
Zoeken door 500k producten is een bagger werk natuurlijk, zeker als je ook suggesties (incl. foto's) wilt weergeven. Wat zou hierbij een goed advies zijn?
Een 2e database maken die nachts gesynct word en waarin alleen producten staan die daadwerkelijk op voorraad zijn bijvoorbeeld met een index op veld X en veld Y om het zo maar domweg uit te leggen?
Deze twee vragen zijn eigenlijk het belangrijkste voor ons
Ik hoop dat je zo een beter inzicht hebt in wat we graag willen bereiken en de informatie die beschikbaar is.
Betreft de indeling van de database:
één tabel voor merken
één tabel voor het product
één tabel voor de voorraden en voorraad locatie (FiFo)
verder hebben we voor sommige informatie zoals kleur, vorm, uurwerk, batterij en dat soort dingen ook een koppeltabel zodat niet alle informatie in één tabel staat.
Deze worden met joins gelinkt momenteel waar nodig om de informatie op te halen.
De belangrijkste informatie, waar 95% van de tijd op gezocht word, staat in elk geval in één en dezelfde tabel. Echter wel met (inmiddels) iets van meer dan een miljoen rows, dus daar moeten we nog een database optimalisatie voor doen en eventueel splitsen zoals ik al zij in twee databases misschien. |