Filtri prodotto su PrestaShop: perché il numero accanto al filtro a volte non torna

di Luca Cavallini Guide tecniche
Filtri prodotto su PrestaShop: perché il numero accanto al filtro a volte non torna

Il problema che nessuno segnala, ma che tutti notano

Un visitatore su una pagina di categoria spunta un filtro che dice "Rosso (12)", si aspetta 12 prodotti, e il listato ne mostra 8, oppure 15. Nessun messaggio di errore, nessuna spiegazione: solo un numero che non tornava. Non è un dettaglio estetico. È il tipo di incoerenza che fa perdere fiducia nel resto del sito in mezzo secondo: se il filtro mente su un numero piccolo e visibile, perché dovrei fidarmi del prezzo o della disponibilità?

Il motivo per cui questo problema è così comune nei filtri a faccette (quelli che mostrano più categorie di filtro insieme, con un conteggio per ogni valore) non è sciatteria. È che calcolare quel numero in modo che sia sempre coerente con il click è più difficile di quanto sembri, ed è uno dei punti in cui i motori di ricerca a faccette si differenziano davvero tra loro.

Perché un conteggio può non corrispondere al click

La causa più frequente è che il conteggio e il click vengono calcolati con due logiche diverse. Un caso tipico: un negoziante raggruppa più valori simili sotto un'unica etichetta (per esempio "Rosso" che comprende le varianti Cremisi, Scarlatto e Bordeaux del catalogo). Se il conteggio del filtro somma quante volte ciascuna variante compare, e il click applica invece "deve avere tutte queste varianti insieme" invece di "deve avere almeno una di queste varianti", il numero mostrato e il numero ottenuto raccontano due domande diverse. La regola che tiene tutto coerente è semplice da enunciare e facile da rompere nel codice: il conteggio deve rispondere esattamente alla stessa domanda che il click applichera, non a una domanda simile.

Un modo corretto di risolverlo, verificato su più motori di ricerca (il driver nativo di PrestaShop e Elasticsearch), è trattare un gruppo di valori come un singolo insieme fin dall'inizio: il conteggio si fa con un solo "conta i prodotti distinti che hanno almeno uno di questi valori" (una `COUNT(DISTINCT ...)` sul database, o una aggregazione dedicata su un motore come Elasticsearch), e il click applica esattamente la stessa condizione. Il numero mostrato smette di essere una somma che può esagerare, e diventa l'unione reale, la stessa che il click produce.

C'è anche una scelta onesta che vale la pena conoscere: con Meilisearch, per i gruppi di valori il numero accanto al filtro semplicemente non viene mostrato, invece di rischiare di mostrarne uno sbagliato. È una scelta di progetto dichiarata al mercante nel pannello di configurazione, non un limite nascosto. In fatto di fiducia, un filtro senza numero è sempre meglio di un filtro con un numero falso.

Il costo di avere sempre il numero giusto

Anche quando la logica è corretta, calcolare un conteggio esatto per ogni valore di ogni filtro ha un costo reale, che dipende molto dal motore di ricerca usato. Con un motore esterno come Elasticsearch o Meilisearch, i conteggi arrivano come parte della stessa interrogazione che calcola i risultati, quindi il costo aggiuntivo è minimo. Con il motore nativo di PrestaShop, che lavora dentro il database del negozio, ogni valore di ogni filtro può richiedere una interrogazione di conteggio a sé.

Su un catalogo da 200.000 prodotti con circa 2.250 gruppi di attributi e caratteristiche, disattivare i conteggi esatti sui filtri (mostrare l'elenco dei valori disponibili senza il numero a fianco) ha portato una pagina di categoria con un filtro attivo da 43,3 secondi a 11,9 secondi, e sulle sole faccette di caratteristiche e attributi da 6,8 e 5,4 secondi rispettivamente a 15 e 19 millisecondi. Sono numeri che raccontano una cosa semplice: quel numeretto tra parentesi, su un catalogo grande con il solo database, può costare più di tutto il resto della pagina messo insieme.

Cosa fare, in pratica

  • Su un catalogo di poche migliaia di prodotti, i conteggi esatti quasi sempre valgono il loro costo: mantenerli.
  • Su un catalogo grande con il solo motore nativo, valutate se disattivare i conteggi esatti (mostrando solo l'elenco dei valori disponibili) o se passare a un motore esterno che li calcola senza costo aggiuntivo.
  • Se usate filtri con valori raggruppati (più varianti sotto un'unica etichetta), chiedete esplicitamente come vengono trattati in modalità "tutti i filtri insieme devono valere" (AND): è il caso in cui la somma e l'unione danno risultati più diversi tra loro, ed è il caso che un cliente nota per primo.
  • Preferite sempre un filtro che non mostra un numero a un filtro che ne mostra uno sbagliato: se un modulo di ricerca non riesce a garantire un conteggio esatto in una certa condizione, la scelta giusta è nasconderlo, non indovinarlo.

In sintesi

Un numero sbagliato accanto a un filtro non è un dettaglio grafico: è un segnale che il conteggio e il click stanno rispondendo a due domande diverse, e su un catalogo grande con il motore sbagliato può anche essere il costo più alto della pagina. In cll_essearch abbiamo trattato questo problema alla radice, con un unico punto di calcolo che il conteggio e il click condividono, su driver nativo, Elasticsearch, OpenSearch e Meilisearch, e con la possibilità di disattivare i conteggi quando il catalogo è troppo grande perché valga la pena calcolarli in tempo reale. Se un visitatore vi ha mai scritto "il filtro dice una cosa e poi non trovo niente", il problema che avete è probabilmente questo.

Ricerca Elasticsearch & Navigazione a FaccetteRicerca velocissima e tollerante ai refusi con navigazione a faccette con pannello filtri modale, con motore…99,99 €Vedi il prodotto

Lascia un commento

I commenti sono moderati prima della pubblicazione.

← Blog

Caricamento in corso ...
Torna all'inizio