Come PrestaShop gestisce l'indicizzazione e la ricerca dei prodotti

Il prodotto è attivo, disponibile e presente nel tuo catalogo. Eppure, se un cliente digita il suo nome esatto, non ottiene alcun risultato. Non c'è nulla di anomalo: il prodotto semplicemente non è indicizzato nei risultati di ricerca e la funzione di ricerca del negozio online non accede nemmeno alla tabella dei prodotti.

La maggior parte dei casi di La ricerca prodotti di PrestaShop non funziona Tutto si riduce a questo semplice fatto. Invece di leggere il catalogo, PrestaShop legge due tabelle indice dedicate, popolate in precedenza, quindi un prodotto assente da queste tabelle risulta invisibile. Dati corretti nel back office non cambiano nulla.

Prima di controllare qualsiasi altra cosa, verifica se l'indicizzazione è abilitata. PS_SEARCH_INDEXATION Controlla se PrestaShop aggiorna automaticamente l'indice di ricerca quando si verificano modifiche ai prodotti supportati. Se è disabilitato, il salvataggio di un prodotto non aggiornerà in modo affidabile i relativi termini di ricerca e la modifica della visibilità, dei pesi o degli alias non risolverà il problema di un prodotto che non viene mai indicizzato. Riattiva l'indicizzazione prima di procedere con il resto della procedura di risoluzione dei problemi oppure assicurati di avere un processo di indicizzazione manuale o pianificato. 

Di seguito, illustriamo il funzionamento effettivo dell'indicizzazione, i motivi per cui alcuni prodotti scompaiono e quali impostazioni vale la pena modificare. Tutte le informazioni qui presentate sono state verificate confrontandole con il codice sorgente delle versioni 8.2.6 e 9.1, anziché essere tratte direttamente dalla schermata delle impostazioni.

1.0 Come funziona l'indicizzazione di PrestaShop?

Ogni prodotto diventa un elenco di parole con punteggi allegati e due tabelle contengono il risultato. Questo, in sostanza, è Indicizzazione PrestaShop.

  • Ogni parola indicizzata distinta risiede nella tabella ps_search_word, per lingua e per negozio. Lo schema della tabella utilizza una colonna varchar(30) per la parola memorizzata, ma questa lunghezza di memorizzazione non deve essere confusa con tutti i limiti applicati durante l'elaborazione della ricerca. La tokenizzazione e la corrispondenza approssimativa hanno le proprie regole, quindi un termine SKU o prodotto lungo può comportarsi in modo diverso a seconda di come viene cercato. 
  • Il collegamento tra parola e prodotto è rappresentato da ps_search_index. Esso ha un peso specifico, essendo incentrato sulla parola più il prodotto.

Data una query, PrestaShop cerca le parole nella prima tabella, raccoglie gli ID dei prodotti e i pesi dalla seconda, quindi li classifica in base al peso totale. Solo successivamente viene letta la tabella ps_product, che fornisce i dati di visualizzazione per i prodotti già selezionati dall'indice.

Molteplici parole restringono i risultati anziché ampliarli. Cerca camicia di cotone rossa e sopravvivono solo i prodotti che contengono tutte e tre le parole, perché PrestaShop incrocia le corrispondenze parola per parola. I punti e virgola si comportano in modo opposto: camicia rossa restituisce prodotti corrispondenti a uno dei due termini. Nessuna delle due regole appare da nessuna parte nel back office. La prima spiega un buon numero di reclami relativi alla scarsità di risultati.

Lingua e negozio sono elementi chiave, non un ripensamento. Ogni negozio in una configurazione multi-negozio mantiene il proprio indice e ogni lingua mantiene il proprio set di parole indicizzate. Questo rende il contesto del negozio importante ogni volta che si ricostruisce l'indice.

Avviso per i negozi multipli: Prima di eseguire una ricostruzione o di richiamare l'URL cron per l'indicizzazione, specifica esplicitamente quale contesto di negozio viene utilizzato. Non dare per scontato che una richiesta di indicizzazione senza un negozio chiaramente specificato sia limitata al negozio desiderato. A seconda di come viene eseguita la richiesta, l'operazione può influire sull'indicizzazione in modo più ampio del previsto. Verifica sempre prima il contesto del negozio, soprattutto in un'installazione multi-store di produzione.

La rilevanza deriva dal peso. Ogni campo indicizzato ha un proprio punteggio configurabile, e questi sono i valori predefiniti forniti:

SettoreChiave di configurazionePeso predefinito
Riferimento prodotto, riferimento fornitore, riferimento combinazione, EAN, ISBN, UPC, MPN PS_SEARCH_WEIGHT_REF10
Nome prodottoPS_SEARCH_WEIGHT_PNAME6
TagsPS_SEARCH_WEIGHT_TAG4
Nome della categoria e del produttorePS_SEARCH_WEIGHT_CNAME / MNAME3
Attributi e caratteristichePS_SEARCH_WEIGHT_ATTRIBUTE / FEATURE2
Breve descrizione e descrizionePS_SEARCH_WEIGHT_SHORTDESC / DESC1

Osservate la riga in alto. Una corrispondenza per riferimento ottiene un punteggio quasi doppio rispetto a una corrispondenza per nome e dieci volte superiore rispetto a una corrispondenza per descrizione. Questo è voluto: chi digita un codice prodotto di solito desidera un articolo specifico, non un prodotto genericamente correlato.

La corrispondenza dei riferimenti va oltre il semplice SKU del prodotto principale. La stessa ponderazione è valida anche per i riferimenti dei fornitori e i riferimenti combinati, il che è particolarmente utile per i negozi che vendono prodotti con più varianti. Un cliente che cerca uno SKU specifico per una variante può quindi raggiungere il prodotto principale tramite i dati di riferimento associati a quella combinazione.

Qui contano i rapporti, non i numeri stessi. La documentazione di PrestaShop In altre parole, un oggetto del peso di 8 conta quattro volte uno del peso di 2.

1.1 Quando avviene la reindicizzazione?

Automaticamente, ma non dopo ogni modifica del catalogo. In PrestaShop 9, il salvataggio di un prodotto tramite un percorso di aggiornamento supportato può attivare l'indicizzazione per i campi del prodotto gestiti da tale percorso. Anche le operazioni di scrittura tramite Webservice, la duplicazione e l'eliminazione dei prodotti, l'installazione di temi e la creazione di negozi possono attivare la routine di indicizzazione.

La distinzione fondamentale sta nel modificare il prodotto stesso e nel modificare i dati ad esso associati. L'aggiornamento del nome, della descrizione o di un altro campo del prodotto indicizzato direttamente può aggiornare la voce di ricerca relativa a quel prodotto. Le modifiche a categorie, produttori o caratteristiche non comportano necessariamente una reindicizzazione di ogni prodotto interessato da tali modifiche. I dati ricercabili potrebbero quindi cambiare anche se l'indice contiene ancora le vecchie parole chiave.

Lo stesso problema si presenta dopo importazioni dirette dal database, operazioni in blocco e codice di terze parti che bypassa il normale percorso di indicizzazione. In caso di dubbio, non dare per scontato che un pulsante Salva abbia aggiornato l'indice di ricerca. Eseguire una ricostruzione incrementale o completa a seconda di quanto è cambiato il catalogo. documentazione per sviluppatori Questo elenco elenca tutti i trigger. Tutto ciò che non è presente in questo elenco ti costringe a ricostruirlo manualmente.

2.0 Perché la ricerca di PrestaShop non mostra tutti i prodotti?

Leggi la query di indicizzazione e di solito troverai la risposta al suo interno. Vengono indicizzati solo i prodotti che soddisfano due condizioni contemporaneamente:

  • attivo = 1. I prodotti disabilitati non vengono mai inseriti nell'indice.
  • visibilità impostata su entrambi o ricerca. Tutto ciò che è contrassegnato Solo catalogo è escluso per impostazione predefinita, ed è proprio questo che tutti dimenticano.

Se un prodotto non viene visualizzato nei risultati di ricerca, controlla innanzitutto il campo relativo alla visibilità. Si trova nella scheda Opzioni del prodotto, può essere impostato accidentalmente durante un'importazione e nella pagina del prodotto non viene visualizzato alcun avviso che segnali un problema con la ricerca.

Una terza condizione regola l'esecuzione quotidiana dell'indicizzazione. Ogni prodotto ha un flag di indicizzazione. La ricostruzione di routine elabora solo le righe in cui tale flag è ancora impostato a 0, il che significa che i prodotti già indicizzati vengono saltati anche se il loro contenuto è cambiato. Di conseguenza, un prodotto modificato continua a restituire risultati obsoleti.

2.1 Come ricostruire l'indice dei prodotti di PrestaShop

Due pulsanti vivono sotto Parametri del negozio → Cercae fanno cose completamente diverse.

Eseguita in modo incrementale, *Aggiungi prodotti mancanti all'indice* seleziona i prodotti il ​​cui flag di indicizzazione è 0 e lascia invariati gli altri. Veloce e sicura anche se eseguita frequentemente.

*Ricostruisci l'intero indice* cancella entrambe le tabelle e ricomincia da capo. È un'operazione più lenta, ma è la scelta giusta dopo modifiche in blocco, un'importazione o qualsiasi modifica ai pesi di ricerca. Quest'ultimo caso sorprende molti. I pesi vengono scritti nell'indice durante l'indicizzazione, non applicati al momento della query, quindi modificarli non ha alcun effetto finché non si esegue la ricostruzione.

Su un ampio catalogo, un ricostruzione dell'indice di ricerca di PrestaShop Richiede tempo reale, quindi eseguilo durante un periodo di calma piuttosto che a metà mattinata.

2.2 Cos'è il cron job dell'indice di ricerca di PrestaShop?

Dietro entrambi i pulsanti si trovano URL ordinari. È questo che rende possibile l'automazione. Puntano al controller AdminSearch con action=searchCron&ajax=1 più un token, e l'aggiunta di full=1 commuta l'esecuzione incrementale in una ricostruzione completa.

Copia l'URL dalla pagina delle impostazioni anziché crearne uno nuovo. I token vengono generati per ogni negozio, quindi un token creato manualmente verrà rifiutato. In una configurazione multi-negozio, genera ed esegui l'URL dal contesto del negozio desiderato, anziché presumere che un singolo URL cron rappresenti in modo sicuro tutti i negozi. Quindi, eseguilo tramite cron con la frequenza più adatta al tuo catalogo: ricostruzioni complete notturne dove le importazioni sono frequenti, versioni incrementali più frequenti dove il catalogo cambia gradualmente.

3.0 Perché la ricerca di PrestaShop restituisce risultati irrilevanti?

Solitamente a causa di due impostazioni che si comportano in modo meno evidente di quanto sembri.

3.1 Lunghezza minima delle parole

Impostando il valore predefinito a 3, PS_SEARCH_MINWORDLEN elimina le parole più corte sia all'inizio che alla fine: non vengono mai inserite nell'indice e vengono rimosse anche dalle query. Se vendete qualcosa il cui nome si basa su un token breve, questo problema si ripercuoterà immediatamente. Numeri di modello, taglie come XS, nomi di marchi di due lettere.

Abbassare il valore a 2 è perfettamente ragionevole quando il catalogo lo richiede, a patto di ricostruirlo in seguito. L'indice esistente è stato creato secondo la vecchia regola e non si aggiornerà automaticamente.

Gli accenti, almeno, non richiedono alcuna attenzione. L'indicizzazione li rimuove da ogni parola prima del salvataggio e le query seguono lo stesso trattamento, quindi *café* e *cafe* restituiscono gli stessi risultati in entrambi i casi. Lo stesso vale per qualsiasi carattere accentato utilizzato nel catalogo.

3.2 Ricerca fuzzy

La corrispondenza approssimativa, attiva per impostazione predefinita, consente comunque a un errore di ortografia di trovare il prodotto desiderato. Funziona misurando la distanza di Levenshtein, ovvero il numero di modifiche di un singolo carattere che separano due parole; ecco perché un cliente che digita *ummingbird* trova comunque *hummingbird*.

Di conseguenza, la precisione diminuisce. Ogni corrispondenza approssimativa corrisponde a una parola che il cliente non ha digitato e, in un catalogo pieno di nomi simili, i risultati iniziano a variare. Due impostazioni controllano il costo: il numero di parole approssimative che una query può utilizzare e la lunghezza massima della parola considerata. In PrestaShop 9, la corrispondenza approssimativa non tratta i termini arbitrariamente lunghi allo stesso modo dei normali termini indicizzati. La lunghezza massima predefinita della parola considerata per la corrispondenza approssimativa è di 15 caratteri, un aspetto importante quando si risolvono problemi con SKU lunghi, numeri di modello o nomi di prodotto insolitamente lunghi. Un termine lungo potrebbe quindi essere presente nei dati di ricerca ma non essere comunque trattato dalla corrispondenza approssimativa. 

3.3 Due impostazioni che determinano come vengono abbinate le parole

Nella stessa schermata di ricerca, e facilmente trascurabili, si trovano due interruttori che modificano i criteri di corrispondenza in modo più diretto di qualsiasi altra opzione.

Cerca all'interno della parola È disattivato per impostazione predefinita, il che significa che una query trova corrispondenze solo a partire dall'inizio di una parola indicizzata. La descrizione di PrestaShop fornisce un esempio: cercando *blous* o *blo* si trova *blouse*, ma *lous* no. Attivando l'impostazione, tutto ciò che è contenuto nella parola viene trovato. Utile per i nomi composti, anche se il suggerimento del campo avverte che può consumare molte risorse, poiché la query sottostante perde la capacità di utilizzare un indice in modo efficiente.

Cerca la corrispondenza esatta Funziona al contrario. Se disattivato, la ricerca di *libro* restituisce *libro*, *libreria* e *fermalibri*. Se attivato, viene restituito solo *libro*. La precisione migliora, ma la facilità di ricerca peggiora. Per la maggior parte dei negozi è meglio lasciarlo così com'è.

Questi due criteri, combinati, determinano se la ricerca si comporterà come corrispondenza per prefisso, corrispondenza per sottostringa o corrispondenza esatta. Provali entrambi prima di concludere che il motore di ricerca non riesce a trovare i tuoi prodotti.

3.4 Parole inserite nella lista nera

Le parole inserite nella lista nera rimuovono i termini corrispondenti sia dall'indice che dalle query in entrata. Viene fornito vuoto ed è configurato per lingua.

Un dettaglio importante: il valore viene interpretato come un'espressione regolare anziché come un semplice elenco di parole letterali. Ciò significa che i caratteri con un significato speciale nelle espressioni regolari possono modificare i risultati di PrestaShop. Un modello troppo generico, o semplicemente formattato in modo errato, può escludere molti più termini del previsto e causare problemi di ricerca difficili da individuare.

Il riempitivo è ciò a cui serve l'impostazione. Cataloghi le cui descrizioni usano ripetutamente parole come , il, con, or per Potrebbe non essere utile indicizzarli, ed escludere i termini effettivamente inutili può ridurre il rumore. Siate prudenti, però. Testate il modello prima di farvi affidamento e ricordate che una parola presente nella blacklist non sarà più disponibile per la ricerca. Evitate qualsiasi termine che sembri un riempitivo nelle descrizioni ma che abbia un significato nel nome del prodotto.

3.5 Alias, l'impostazione meno utilizzata

Sotto Parametri del negozio → Ricerca → Alias Si tratta di una tabella di corrispondenza che mette in evidenza gli errori di ortografia e le correlazioni con le parole corrette. Se si digita *plaier* anziché *player*, chiunque digiti il ​​primo troverà i prodotti indicizzati sotto il secondo.

Per i problemi noti, gli alias sono più efficaci della ricerca approssimativa. La corrispondenza approssimativa tenta di indovinare a ogni query e a volte sbaglia. Un alias, invece, si attiva solo in corrispondenza della parola esatta che hai inserito. Nessun costo in termini di precisione. La pagina delle statistiche di ricerca mostra gli errori di digitazione effettivi dei clienti, trasformando così le congetture in un elenco ristretto di risultati affidabili.

3.6 Verificare l'indice autonomamente

Quando un singolo prodotto non viene visualizzato, due semplici query risolvono il problema più velocemente di qualsiasi clic. Cerca il prodotto in ps_search_index tramite il suo ID: l'assenza di righe significa che non è mai stato indicizzato. Verifica prima l'impostazione di visibilità. La presenza di righe ma l'assenza di un termine indica invece che è stata raggiunta la lunghezza minima della parola.

4.0 È possibile sostituire la funzione di ricerca di PrestaShop con Elasticsearch?

Sì, tramite un modulo, e il punto di estensione è una scelta deliberata, non una soluzione alternativa.

Prima che venga eseguita la ricerca integrata, viene attivato un hook productSearchProvider. Se un modulo risponde con un oggetto che implementa ProductSearchProviderInterface, quel modulo prende completamente il controllo della query e la ricerca principale non viene mai chiamata. Questo è esattamente il modo in cui un PrestaShop Elasticsearch il modulo svolge il suo lavoro.

Nessun supporto Elasticsearch è incluso nel core, quindi la sostituzione del Motore di ricerca PrestaShop significa sempre una terza parte modulo di ricerca PrestaShop Inoltre, è presente un server di ricerca a supporto. Vale davvero la pena farlo quando si ha bisogno di tolleranza agli errori di battitura, sinonimi, ricerca per radice in diverse lingue o risultati immediati su decine di migliaia di prodotti. Per poche centinaia di prodotti, è eccessivo. Il motore integrato con pesi appropriati funziona perfettamente per quelle dimensioni.

4.1 PrestaShop supporta la ricerca a faccette per impostazione predefinita?

Sì. Incluso sia nella versione 8 che nella 9, ps_facetedsearch fornisce la barra laterale dei filtri nelle pagine di categoria e di ricerca: fasce di prezzo, attributi, caratteristiche, marchi, disponibilità.

È importante chiarire una distinzione. Ricerca sfaccettata PrestaShop Il filtro filtra un set di risultati già esistente. Non è suo compito decidere quali prodotti la ricerca restituisca. Un prodotto mancante dall'indice rimane mancante, indipendentemente dai filtri impostati.

5.0 Come migliorare la precisione della ricerca in PrestaShop

Sette modifiche, in ordine approssimativo di sforzo rispetto al risultato. Iniziate assicurandovi che l'indicizzazione sia in esecuzione prima di esaminare i singoli prodotti o le impostazioni di ricerca. 

  1. Verifica se l'indicizzazione è abilitata. Verifica che PS_SEARCH_INDEXATION sia abilitato o che il negozio disponga di un processo di indicizzazione manuale o programmato affidabile. Se i prodotti non vengono inseriti nell'indice, la modifica delle impostazioni di pertinenza non li renderà ricercabili. 
  2. Correggere la visibilità. Qualsiasi prodotto impostato su Catalogo Prodotti esclusivamente È intrinsecamente invisibile ai motori di ricerca, e questo spiega un numero di prodotti mancanti superiore a quello di tutte le altre cause messe insieme.
  3. Ricostruire dopo le modifiche in blocco. Le importazioni e le modifiche di massa rendono regolarmente obsoleto l'indice. L'esecuzione incrementale non le rileverà.
  4. Regola i pesi in base al tuo catalogo. Vendere basandosi sul numero di modello? Il riferimento è già più importante di tutto. Quando si vende abbigliamento, dove i nomi contano di più, è consigliabile dare maggiore risalto al nome e ridurre la lunghezza della descrizione, poiché le descrizioni lunghe creano confusione.
  5. Aggiungi degli alias per gli errori di ortografia che effettivamente riscontri. Parametri del negozio → Ricerca → Alias associa un errore di ortografia alla parola corretta e la pagina delle statistiche di ricerca ti mostra quali parole vengono effettivamente digitate dai tuoi clienti.
  6. Prima di presumere che il motore di ricerca sia guasto, verifica la lunghezza minima richiesta per i nomi dei tuoi prodotti.
  7. Solo allora si può valutare la sostituzione del motore.

6.0 Cosa è cambiato tra PrestaShop 1.7 e 9?

Meno di quanto ci si potrebbe aspettare. Nelle versioni 1.7, 8 e 9, le due tabelle degli indici, il sistema di pesi e l'endpoint cron si comportano tutti in modo identico. I consigli scritti per la versione 1.7 sono ancora in gran parte validi.

La ricerca fuzzy è la vera differenza. In PrestaShop 8, il limite di Levenshtein è una costante hardcoded di 8 all'interno della classe Search. Nulla nel back office lo modifica. PrestaShop 9 lo sostituisce con un valore di configurazione, PS_SEARCH_FUZZY_MAX_DIFFERENCE, il cui valore predefinito è 5.

Da questa modifica derivano due conseguenze. Di default, la corrispondenza approssimativa è più precisa, con un valore di 9, il che dovrebbe significare che un minor numero di risultati vagamente correlati raggiungerà i tuoi clienti. Inoltre, la soglia è finalmente regolabile, quindi un negozio sommerso da corrispondenze approssimative ora ha uno strumento da regolare.

Tutto il resto del percorso di ricerca rimane invariato tra le due versioni.

7.0 La versione breve

La ricerca legge un indice, non il catalogo. Un prodotto assente da tale indice non può essere trovato. Inizia verificando che l'indicizzazione sia abilitata, quindi controlla la visibilità dei prodotti e se l'indice è obsoleto dopo una modifica in blocco o indiretta del catalogo. 

I pesi vengono incorporati nell'indice durante l'indicizzazione, quindi modificarli non ha alcun effetto finché non lo ricostruisci. Automatizza questo processo con l'URL cron dalla pagina delle impostazioni, invece di affidarti a qualcuno che si ricorda di premere un pulsante.

Prima di ricorrere a un motore di ricerca sostitutivo, verificate che l'indicizzazione sia abilitata, controllate la visibilità ed eseguite una ricostruzione completa laddove il catalogo sia stato modificato al di fuori del normale percorso di indicizzazione. Nella maggior parte dei casi, le ricerche che sembrano non funzionare correttamente si rivelano essere dovute a un indice obsoleto piuttosto che a un algoritmo difettoso, e escludere questa possibilità non costa nulla.

Grazie per la lettura.

Se hai domande o hai bisogno di assistenza per le prestazioni o la migrazione del tuo sito web, i nostri esperti sono qui per aiutarti. Contatta il team di Knowband all'indirizzo [email protected] Oggi stesso potrete usufruire di plugin per e-commerce affidabili e personalizzati in base alle vostre esigenze. 

Lascia un Commento