Indice di ricerca PrestaShop: Perché la reindicizzazione dei prodotti risolve la ricerca

385 visualizzazioni

Come funziona internamente la ricerca in PrestaShop

PrestaShop include un motore di ricerca prodotti integrato che opera su un indice full-text memorizzato direttamente nel database MySQL. A differenza dei servizi di ricerca esterni, questo indice risiede accanto ai dati dei prodotti nello stesso database, il che significa che è veloce da interrogare ma richiede una manutenzione esplicita per rimanere aggiornato. Comprendere come funziona questo sistema di ricerca è il primo passo per diagnosticare e risolvere i problemi di ricerca.

Quando un cliente digita una query nella barra di ricerca del tuo negozio, PrestaShop non scansiona in tempo reale ogni nome e descrizione di prodotto. Invece, cerca i termini della query in un indice pre-costruito che mappa le singole parole ai prodotti. Questo indice viene costruito scomponendo i campi di testo dei prodotti in singole parole (tokenizzazione), normalizzandole (conversione in minuscolo, rimozione degli accenti) e memorizzando la relazione tra ogni parola e i prodotti in cui appare, insieme a un peso di rilevanza.

Questo approccio è fondamentalmente lo stesso dei motori di ricerca come Google, solo su una scala molto più piccola. Il compromesso è che l'indice deve essere ricostruito ogni volta che i dati dei prodotti cambiano in modi che l'indicizzazione automatica non cattura, il che è la causa principale della maggior parte dei problemi di ricerca in PrestaShop.

Le tabelle del database di ricerca

L'indice di ricerca di PrestaShop è distribuito su diverse tabelle del database, ciascuna con uno scopo specifico nel processo di ricerca.

ps_search_word

Questa tabella memorizza ogni parola univoca estratta dai dati dei prodotti, insieme alla lingua a cui appartiene. Ogni parola riceve un id_word che serve come chiave di riferimento. La tabella è consapevole delle lingue, il che significa che la parola "shoe" nel tuo catalogo inglese e "Schuh" nel tuo catalogo tedesco sono voci separate, ciascuna collegata al rispettivo ID lingua.

Quando guardi questa tabella, vedrai migliaia o decine di migliaia di righe a seconda della dimensione del tuo catalogo e del numero di lingue. Ogni parola distinta da ogni campo prodotto indicizzato è rappresentata qui.

ps_search_index

Questa è la tabella di mappatura principale. Ogni riga collega un prodotto (id_product) a una parola (id_word) con un valore di peso. Il peso determina quanto quella parola è rilevante per quel prodotto. Una parola che appare nel nome del prodotto ha un peso maggiore rispetto alla stessa parola che appare nella descrizione, e i valori dei pesi sono configurabili nel back office.

Quando un cliente cerca "portafoglio pelle blu", PrestaShop cerca ogni parola in ps_search_word, trova i corrispondenti valori id_word, poi interroga ps_search_index per i prodotti che corrispondono a quegli ID di parole. I prodotti vengono classificati in base alla somma dei loro pesi per le parole corrispondenti, con i prodotti con peso totale più alto che appaiono per primi nei risultati.

ps_search_engine

Questa tabella memorizza i pattern dei motori di ricerca referrer utilizzati per tracciare quali motori di ricerca inviano traffico al tuo negozio. Non è direttamente correlata alla funzionalità di ricerca interna ma viene spesso confusa con essa a causa della nomenclatura simile.

ps_alias

La tabella degli alias memorizza gli alias dei termini di ricerca, ovvero grafie alternative o sinonimi che dovrebbero essere mappati su un termine di ricerca canonico. Ad esempio, potresti configurare "sneakers" come alias per "scarpe da ginnastica" in modo che i clienti che cercano uno dei due termini ottengano gli stessi risultati. Gli alias sono configurati nel back office in Parametri del negozio > Ricerca > Cerca > Alias.

Quando e perché la reindicizzazione è necessaria

PrestaShop ha una funzione di indicizzazione automatica che aggiorna l'indice di ricerca ogni volta che un prodotto viene salvato tramite il back office. Quando modifichi un prodotto e fai clic su Salva, PrestaShop reindicizza quel prodotto specifico, aggiornando le sue voci in ps_search_word e ps_search_index. Questo funziona bene per la gestione quotidiana dei prodotti.

Tuttavia, l'indicizzazione automatica non copre ogni scenario. Ci sono diverse situazioni comuni in cui è necessaria una reindicizzazione completa.

Importazioni massive di prodotti

Quando importi prodotti tramite CSV, il processo di importazione potrebbe non attivare gli hook di indicizzazione della ricerca per ogni prodotto. Questo è particolarmente comune con le importazioni grandi dove le ottimizzazioni delle prestazioni saltano i passaggi di elaborazione non essenziali. Dopo un'importazione massiva, i nuovi prodotti potrebbero esistere nel catalogo ma essere completamente invisibili alla ricerca del sito.

Modifiche dirette al database

Se tu o un modulo modificate i dati dei prodotti direttamente nel database (aggirando il modello a oggetti di PrestaShop), l'indice di ricerca non verrà aggiornato. Questo include aggiornamenti SQL a nomi dei prodotti, descrizioni o altri campi indicizzati. Qualsiasi migrazione del database, pulizia dei dati o strumento di sincronizzazione esterno che scrive direttamente in ps_product_lang lascerà l'indice di ricerca obsoleto.

Modifiche linguistiche

L'aggiunta di una nuova lingua al tuo negozio richiede una reindicizzazione completa perché l'indice di ricerca è specifico per lingua. I prodotti esistenti necessitano che il loro contenuto nella nuova lingua venga tokenizzato e aggiunto all'indice. Allo stesso modo, se modifichi il contenuto dei prodotti in una lingua specifica (specialmente tramite operazioni massive), una reindicizzazione assicura che le modifiche siano riflesse nella ricerca.

Modifiche alla configurazione dei pesi

Quando modifichi i valori dei pesi assegnati ai diversi campi dei prodotti (maggiori dettagli di seguito), le voci dell'indice esistenti mantengono i vecchi pesi. Una reindicizzazione ricalcola tutti i pesi utilizzando la nuova configurazione.

Installazioni o aggiornamenti di moduli

Alcuni moduli modificano le strutture dati dei prodotti o aggiungono campi ricercabili. Dopo l'installazione o l'aggiornamento di tali moduli, una reindicizzazione assicura che i dati nuovi o modificati siano inclusi nell'indice di ricerca.

Indice corrotto

Crash del database, migrazioni fallite o operazioni di indicizzazione interrotte possono lasciare l'indice di ricerca in uno stato inconsistente. I sintomi includono prodotti che dovrebbero apparire nei risultati di ricerca ma non appaiono, prodotti che appaiono per termini di ricerca completamente sbagliati, o la ricerca che non restituisce alcun risultato. Una reindicizzazione completa ricostruisce l'indice da zero, risolvendo queste inconsistenze.

Come reindicizzare i prodotti

Metodo dal back office

Vai a Parametri del negozio > Ricerca nel back office di PrestaShop. In cima alla pagina troverai una sezione "Indicizzazione" con le opzioni per ricostruire l'indice di ricerca. Tipicamente ci sono due opzioni: aggiungere all'indice i prodotti che non sono ancora stati indicizzati (incrementale) o ricostruire l'intero indice da zero (reindicizzazione completa).

Per la maggior parte degli scenari di risoluzione dei problemi, scegli la ricostruzione completa. L'opzione incrementale aggiunge solo i prodotti mancanti e non aggiorna le voci esistenti che potrebbero avere dati obsoleti.

Il metodo dal back office funziona bene per cataloghi piccoli e medi (fino a qualche migliaio di prodotti). Per cataloghi più grandi, potrebbe andare in timeout a causa dei limiti di tempo di esecuzione PHP, rendendo necessario il metodo CLI.

Comando CLI per la reindicizzazione

Per cataloghi grandi o flussi di lavoro automatizzati, usa la riga di comando per avviare una reindicizzazione. In PrestaShop 1.7 e successivi, il comando è:

php bin/console prestashop:search-index:rebuild

Per PrestaShop 1.6, chiameresti direttamente lo script di indicizzazione. Il percorso esatto dipende dalla tua installazione, ma la logica di indicizzazione risiede nella classe Search.

Il metodo CLI non ha gli stessi vincoli di timeout dell'interfaccia web. Per cataloghi molto grandi (decine di migliaia di prodotti in più lingue), la reindicizzazione può richiedere diversi minuti. Puoi monitorare il progresso attraverso l'output.

Se esegui PrestaShop in Docker, esegui il comando all'interno del contesto del container dove PHP e la codebase di PrestaShop sono disponibili. Assicurati di eseguirlo come l'utente del server web per evitare problemi di permessi con i file di cache che vengono generati durante il processo.

Automatizzare la reindicizzazione

Se il tuo negozio si basa su importazioni automatizzate di prodotti o sincronizzazione dati esterna, pianifica una reindicizzazione periodica come cron job. Una reindicizzazione notturna assicura che i prodotti aggiunti o modificati tramite processi automatizzati siano ricercabili il giorno successivo. La voce cron chiamerebbe lo stesso comando CLI secondo un programma.

Tieni presente che la reindicizzazione blocca brevemente le tabelle di ricerca durante la ricostruzione. Su un negozio trafficato, pianifica la reindicizzazione durante le ore di basso traffico per evitare di impattare sulla disponibilità della ricerca per i clienti attivi.

Configurazione dei pesi: Controllo della rilevanza della ricerca

PrestaShop ti permette di configurare quanto peso hanno i diversi campi dei prodotti nei risultati di ricerca. Questa è una delle funzionalità più potenti e più sottoutilizzate del sistema di ricerca integrato.

Campi di peso disponibili

La configurazione dei pesi si trova in Parametri del negozio > Ricerca. Puoi assegnare un peso (tipicamente da 1 a 10, anche se valori più alti funzionano) a ciascuno di questi campi prodotto:

Nome del prodotto: Dovrebbe tipicamente avere il peso più alto. Quando un cliente cerca un prodotto per nome, il prodotto con quel nome esatto dovrebbe apparire per primo.

Riferimento: I codici di riferimento dei prodotti sono spesso utilizzati dai clienti B2B che conoscono l'esatto SKU di cui hanno bisogno. Un peso moderato assicura che le ricerche per riferimento funzionino bene senza sopraffare le ricerche per nome.

Descrizione breve: La descrizione breve spesso contiene i punti vendita chiave e le caratteristiche del prodotto. Un peso moderato è appropriato.

Descrizione: La descrizione completa contiene il maggior testo e quindi il maggior numero di potenziali corrispondenze di parole chiave. Tuttavia, poiché contiene così tanto testo, un peso alto può causare corrispondenze irrilevanti dove un termine di ricerca appare incidentalmente in una descrizione lunga. Si raccomanda un peso inferiore rispetto al nome del prodotto.

Categoria: Includere i nomi delle categorie nella ricerca permette ai clienti di trovare prodotti tramite termini di categoria anche quando quei termini non appaiono nel testo del prodotto stesso.

Marchio (produttore): I clienti spesso cercano per nome del marchio. Un peso da moderato ad alto assicura che le ricerche per marchio restituiscano risultati rilevanti.

Tag: I tag sono termini di ricerca esplicitamente assegnati ai prodotti. Un peso alto per i tag ti dà un controllo diretto su quali prodotti appaiono per specifiche query di ricerca.

Attributi: I valori degli attributi del prodotto (taglia, colore, materiale) possono essere inclusi nell'indice di ricerca. Questo permette ricerche come "rosso XL" per restituire prodotti con quelle combinazioni di attributi.

Caratteristiche: Anche i valori delle caratteristiche del prodotto (peso, dimensioni, tipo di materiale) possono essere indicizzati.

Strategia dei pesi

Una configurazione iniziale ragionevole potrebbe essere: nome del prodotto a 6, riferimento a 4, descrizione breve a 3, descrizione a 1, categoria a 2, produttore a 3, tag a 4, attributi a 2, caratteristiche a 2. Ma i pesi ottimali dipendono interamente dal tuo catalogo e dal comportamento di ricerca dei tuoi clienti.

Se i tuoi clienti cercano frequentemente per SKU o numero di riferimento, aumenta il peso del riferimento. Se le ricerche per marchio sono importanti, aumenta il peso del produttore. Se trovi che le descrizioni lunghe causano risultati irrilevanti con ranking elevato, riduci il peso della descrizione o impostalo a zero per escludere completamente le descrizioni dall'indice.

Dopo aver modificato i pesi, esegui sempre una reindicizzazione completa affinché i nuovi valori abbiano effetto su tutti i prodotti.

Problemi di ricerca comuni e soluzioni

Prodotti che non appaiono nei risultati di ricerca

Questa è la lamentela più comune sulla ricerca. Un prodotto esiste nel catalogo ma cercarlo per nome non restituisce risultati. Le cause includono: il prodotto è stato aggiunto tramite un'importazione che non ha attivato l'indicizzazione, il prodotto è disabilitato o esaurito e la ricerca è configurata per escludere tali prodotti, oppure l'indice di ricerca è corrotto.

Soluzione: Prima verifica che il prodotto sia attivo e visibile. Poi esegui una reindicizzazione completa. Se il prodotto ancora non appare, controlla se il nome del prodotto contiene caratteri speciali che potrebbero essere rimossi durante la tokenizzazione, e controlla se l'impostazione della lunghezza minima della parola (nella configurazione della ricerca) sta escludendo parole brevi dal nome del prodotto.

Prodotti sbagliati in cima ai risultati

Quando una ricerca per "widget blu" restituisce un prodotto chiamato "supporto per widget" prima dell'effettivo prodotto "widget blu", è solitamente un problema di configurazione dei pesi. Il prodotto che si classifica più in alto ha accumulato più peso totale in tutti i campi indicizzati. Forse "widget" appare molte volte nella descrizione del prodotto supporto, e con un peso alto della descrizione, quelle occorrenze superano una singola corrispondenza nel nome del prodotto.

Soluzione: Regola i pesi dei campi per dare priorità al nome del prodotto. Imposta il peso del nome del prodotto significativamente più alto del peso della descrizione. Reindicizza dopo le modifiche.

La ricerca restituisce troppi risultati irrilevanti

Questo accade quando il peso della descrizione è troppo alto o quando parole comuni appaiono in molte descrizioni di prodotti. Una ricerca per "premium" restituisce ogni prodotto la cui descrizione contiene la parola "premium" anche quando non è una caratteristica distintiva di quei prodotti.

Soluzione: Riduci il peso della descrizione o utilizza la funzione delle parole in blacklist per escludere parole comuni non discriminanti dall'indice. La blacklist è configurata in Parametri del negozio > Ricerca e ti permette di specificare le parole che dovrebbero essere ignorate durante l'indicizzazione.

La ricerca non trova corrispondenze parziali

La ricerca integrata di PrestaShop non supporta il vero matching fuzzy. Se un cliente cerca "scarpa" non troverà prodotti che contengono solo la parola "scarpe" a meno che le funzioni di stemming o alias gestiscano la variazione. Questa è una limitazione fondamentale dell'approccio basato sull'indice di parole.

Soluzione: Usa la funzione alias per mappare le variazioni comuni ("scarpa" a "scarpe", "TV" a "televisione"). Per un matching parziale più completo, considera una soluzione di ricerca esterna come Elasticsearch.

Caratteri accentati che causano mancate corrispondenze

PrestaShop normalizza i caratteri accentati durante l'indicizzazione (ad esempio, convertendo "cafe" e "café" nella stessa forma base). Se questa normalizzazione non funziona correttamente, le ricerche con o senza accenti possono produrre risultati diversi.

Soluzione: Verifica che la configurazione della ricerca abbia la rimozione degli accenti abilitata. Reindicizza dopo la verifica. Se il problema persiste, controlla il set di caratteri e la collation del database, poiché codifiche non corrispondenti possono interferire con la normalizzazione del testo.

Ottimizzazione delle prestazioni di ricerca

Per i negozi con cataloghi grandi (oltre 10.000 prodotti), le prestazioni di ricerca possono diventare un problema. La ricerca integrata esegue query al database sulle tabelle dell'indice ad ogni richiesta di ricerca, e con un indice grande, queste query possono diventare lente.

Indicizzazione del database

Assicurati che le tabelle ps_search_word e ps_search_index abbiano indici di database appropriati. PrestaShop li crea per impostazione predefinita, ma se le tabelle sono state alterate o ricostruite, gli indici potrebbero mancare. Gli indici chiave sono su id_word e id_lang in ps_search_word, e su id_product e id_word in ps_search_index.

Lunghezza minima della parola

L'impostazione della lunghezza minima della parola controlla la parola più corta che viene indicizzata. Il valore predefinito è solitamente 3 caratteri, il che significa che le parole di uno e due caratteri sono escluse. Aumentare questo a 4 riduce la dimensione dell'indice e può migliorare la velocità di ricerca, ma significa che le ricerche per termini brevi come "XL" o "TV" non funzioneranno. Bilancia la dimensione dell'indice con i tuoi requisiti di ricerca.

Parole in blacklist

Aggiungere parole comuni ("il", "e", "per", "con") alla blacklist riduce significativamente la dimensione dell'indice perché queste parole appaiono in quasi ogni descrizione di prodotto. Tabelle di indice più piccole significano query più veloci.

Ottimizzazione delle tabelle

Dopo una reindicizzazione completa, esegui OPTIMIZE TABLE ps_search_word, ps_search_index in MySQL. Il processo di reindicizzazione cancella e reinserisce grandi quantità di righe, il che può lasciare le tabelle frammentate. L'ottimizzazione recupera quello spazio e migliora le prestazioni delle query.

Elasticsearch come alternativa

Per i negozi che hanno superato la ricerca integrata di PrestaShop, Elasticsearch fornisce un significativo upgrade sia nella qualità della ricerca che nelle prestazioni. Elasticsearch è un motore di ricerca dedicato che funziona come servizio separato e offre funzionalità che la ricerca basata su MySQL integrata non può eguagliare.

Cosa aggiunge Elasticsearch

Il matching fuzzy permette a Elasticsearch di trovare risultati anche quando il termine di ricerca è scritto male. Una ricerca per "pell" troverà comunque prodotti contenenti "pelle". Lo stemming riduce le parole alla loro forma radice, quindi "correre", "corre" e "correva" corrispondono tutti a prodotti contenenti una qualsiasi di queste variazioni. Il supporto dei sinonimi ti permette di definire relazioni tra parole ("divano" e "sofà") a livello del motore di ricerca piuttosto che tramite alias manuali.

La ricerca a faccette (filtrare i risultati per attributi come fascia di prezzo, colore, marchio) è drasticamente più veloce con Elasticsearch perché è progettato esattamente per questo tipo di query di aggregazione. I suggerimenti di autocompletamento e le funzionalità "forse cercavi" sono anche capacità native di Elasticsearch.

In termini di prestazioni, Elasticsearch gestisce cataloghi grandi (oltre 100.000 prodotti) con tempi di risposta inferiori al secondo perché utilizza indici invertiti ottimizzati per la ricerca full-text, a differenza di MySQL che è principalmente progettato per dati relazionali.

Integrazione con PrestaShop

Diversi moduli PrestaShop forniscono l'integrazione con Elasticsearch. Questi moduli tipicamente sostituiscono il controller di ricerca predefinito con uno che interroga Elasticsearch invece delle tabelle di ricerca MySQL. I dati dei prodotti vengono sincronizzati da PrestaShop a Elasticsearch in tempo reale (al salvataggio del prodotto) o tramite sincronizzazione batch periodica.

L'esecuzione di Elasticsearch richiede un server o container dedicato con RAM adeguata (minimo 2GB per piccoli cataloghi, di più per quelli più grandi). Aggiunge complessità operativa poiché ora hai un altro servizio da monitorare e mantenere. Per molti negozi piccoli e medi, la ricerca integrata con una corretta configurazione dei pesi e una reindicizzazione regolare è sufficiente.

Quando considerare Elasticsearch

Considera Elasticsearch quando il tuo catalogo supera i 10.000 prodotti e le prestazioni di ricerca stanno degradando, quando i clienti spesso scrivono male i termini di ricerca e si aspettano matching fuzzy, quando hai bisogno di funzionalità avanzate come autocompletamento o filtraggio a faccette, o quando la qualità della ricerca è un differenziatore competitivo per il tuo business (negozi B2B con cataloghi prodotti complessi, per esempio).

La checklist della reindicizzazione

Quando la ricerca non funziona correttamente nel tuo negozio PrestaShop, segui questo processo diagnostico e di risoluzione. Primo, verifica che i prodotti problematici siano attivi, visibili e disponibili (se la ricerca esclude i prodotti esauriti). Secondo, controlla la configurazione dei pesi di ricerca e assicurati che corrisponda alle tue priorità. Terzo, esegui una ricostruzione completa dell'indice di ricerca dal back office o CLI. Quarto, svuota la cache di PrestaShop dopo la reindicizzazione. Quinto, testa la ricerca con termini specifici per verificare la correzione. Sesto, se i problemi persistono, controlla le tabelle ps_search_word e ps_search_index direttamente per verificare che i prodotti problematici abbiano voci. Settimo, se l'indice sembra corretto ma la ricerca ancora fallisce, indaga la logica del controller di ricerca e qualsiasi modulo che lo sovrascrive.

La reindicizzazione regolare, combinata con una configurazione dei pesi ponderata e una lista di alias ben mantenuta, mantiene la ricerca integrata di PrestaShop funzionante in modo affidabile per la maggior parte dei negozi. Per coloro che necessitano di più, Elasticsearch fornisce un percorso di aggiornamento senza richiedere un cambio di piattaforma.

Questa risposta ti è stata utile?

Hai ancora domande?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Loading...
Back to top