Rétegezett navigáció (facet-szűrés)

Ugyanaz a szűrőmotor, amit egy Magento/Adobe Commerce kategóriaoldal is használ: jelölj be egyszerre TÖBB kategóriát, színt, méretet vagy márkát - a szerver minden facet-értéknél a TÖBBI aktív szűrő szerint számolja a találatszámot, de a facet SAJÁT szűrőjét figyelmen kívül hagyva. Emiatt egy már kiválasztott érték mellett a facet többi értéke sem esik 0-ra - ez a rétegezett navigáció klasszikus, sokszor elrontott csapdája.

Kategória
Szín
Méret
Márka
Ár (0–200)

 

Rendezés

Miért nehéz jól megcsinálni a rétegezett szűrést?

A naiv megközelítés minden aktív szűrőt egyszerre alkalmazna minden facet-számoláshoz is - ez azt eredményezné, hogy amint kiválasztasz egy színt, a többi szín találatszáma azonnal 0-ra esne (hiszen egy termék ritkán van több színben egyszerre), ami hamis benyomást keltene, mintha nem is léteznének más színű termékek.

A helyes megoldás minden facet-hez külön számol: egy adott facet összes értékének találatszámát a TÖBBI (nem az adott facet-hez tartozó) aktív szűrő alapján kell kiszámolni, magát a facet saját szűrőjét eközben figyelmen kívül hagyva.

Ez a technika valódi keresőmotorokban (Elasticsearch, Solr, Algolia) "facet aggregáció" néven fut, és minden nagyobb e-kereskedelmi oldal, köztük a Magento/Adobe Commerce is, ezt az elvet használja a kategóriaoldalak szűrőin.

Teljesítmény szempontjából ez azt jelenti, hogy N facet esetén nem elég egyetlen lekérdezés - minden facet-hez legalább egy külön aggregációt kell futtatni, ami nagy termékszámnál komoly optimalizálási kihívás, amit a valódi keresőmotorok jellemzően előre számolt indexekkel oldanak meg.