COS WP Woo
Torna al blog
Cerca e cataloga

Ricerca intelligente su Typesense: 50 volte più veloce di WooCommerce integrato

La ricerca integrata di WordPress è una query MySQL LIKE che uccide le conversioni con oltre 10.000 prodotti. Ti dirò come l'abbiamo sostituito con Typesense e abbiamo ottenuto una risposta in 5-50 ms anziché 500-2000 ms.

La scorsa settimana mi ha scritto il titolare di un negozio online di ricambi per auto. Ha 14mila posizioni nel catalogo WooCommerce, hosting per tremila rubli al mese e una ricerca molto specifica. La persona dice: "Il cliente inserisce il codice articolo, preme Invio, attende sei secondi, ottiene un risultato vuoto e si rivolge a un concorrente. Perdo soldi ogni giorno e non riesco a capire cosa fare al riguardo." Ho chiesto cosa avesse già provato. Si è scoperto che avevo installato tre diversi plugin di ricerca, uno dei quali pagato $ 79 all'anno, e nessuno di loro ha realmente risolto il problema. La ricerca era ancora lenta, non perdonava gli errori di battitura e non capivo per niente la morfologia russa. È stata trovata la parola “cuscinetto”, ma “cuscinetti” non è stato più trovato.

Questa storia non fa eccezione. Lo sento quasi ogni settimana da persone diverse, con negozi diversi, ma con lo stesso problema. E sai cosa mi stupisce di più? Non è che la ricerca integrata di WordPress sia pessima, questo è noto da molto tempo. E il fatto che un numero enorme di proprietari di negozi non sospetta nemmeno quanto sia grave e quanti soldi perdono a causa di ciò ogni mese. Attribuiscono la bassa conversione alla concorrenza, alla stagionalità, alla pubblicità, a qualsiasi cosa diversa da quella piccola casella di ricerca nell'intestazione del sito, attraverso la quale passa dal 30 al 60% di tutti gli acquirenti.

Diamo un'occhiata al motivo per cui ciò accade, cosa puoi fare al riguardo e perché abbiamo finito per creare il nostro modulo di ricerca Typesense direttamente all'interno del nostro plug-in COS WP Woo. Te lo dirò senza abbellimenti: con numeri reali, con il rastrello su cui abbiamo calpestato e con i risultati che abbiamo ottenuto in un negozio di combattimento con quasi diciassettemila prodotti.

Perché la ricerca integrata in WordPress è una condanna a morte per un negozio online

Per comprendere la portata del problema, dobbiamo prenderci un secondo per guardare dietro il cofano. Quando un cliente digita una query nella barra di ricerca standard di WordPress e preme Invio, accade quanto segue: WordPress prende quella query e genera una query SQL sul database MySQL. Inoltre, lo fa nel modo più primitivo possibile, tramite l'operatore LIKE con percentuali su entrambi i lati. Tradotto in linguaggio umano, suona più o meno così: "Caro database, per favore esamina ogni riga della tabella wp_posts e controlla se il campo post_title o post_content contiene questa sequenza di caratteri da qualche parte al suo interno." Nessun indice, nessuna ottimizzazione, niente di niente: solo una ricerca completa, riga per riga.

Su un blog con cinquanta articoli funziona bene. In un negozio con mille prodotti è tollerabile. Ma quando hai dieci, quindici, ventimila posizioni e ogni prodotto ha meta campi, attributi, descrizioni, variazioni, questo si trasforma in un disastro. MySQL sta iniziando a soffocare. La richiesta, che dovrebbe essere eseguita immediatamente, dura da un secondo e mezzo a tre secondi. E se in quel momento il server è carico di altre attività, sarà tutto più semplice in cinque o sei secondi.

Ma la lentezza non è poi così negativa. Il vero problema è che questa ricerca è stupida. Non capisce la morfologia: se un prodotto si chiama "Olio motore sintetico" e l'acquirente cerca "oli motore", una ricerca standard non lo troverà. Perché "motore" e "motore" sono stringhe diverse per l'operatore LIKE. Non perdona gli errori di battitura: hai digitato "Shell oil" invece di "Shell oil" e basta, zero risultati. Non sa come essere rilevante: se trecento prodotti corrispondono a una query, non vengono classificati in base all'importanza, ma in base alla data di pubblicazione. Un cavo industriale da duecento rubli costerà di più di un generatore da un milione semplicemente perché è stato aggiunto al catalogo in seguito.

Ho pensato a lungo perché WordPress, dopo vent'anni di esistenza, non abbia acquisito una ricerca normale. E sono giunto alla conclusione che il problema non è la pigrizia degli sviluppatori, ma l'architettura. WordPress è stato progettato come motore di blogging e la ricerca in un blog è un compito completamente diverso dalla ricerca in un catalogo di prodotti. Per un blog, basta cercare un articolo utilizzando parole chiave. Per un negozio, devi trovare un prodotto per articolo, per marca, per caratteristica, per sinonimo, per parte del nome, tenendo conto degli errori di battitura - e farlo in una frazione di secondo, con anteprima e filtraggio istantanei. WordPress semplicemente non è stato creato per questo, e nessun plugin che tenta di “finire” lo standard WP_Query risolverà sostanzialmente questo problema. Non puoi riparare ciò che è rotto in base alla progettazione.

Il punto è questo: la maggior parte dei "plugin di ricerca" di WooCommerce fanno proprio questo: provare a migliorare una query standard. Aggiungono una ricerca per meta campi, per SKU e migliorano la pertinenza attraverso JOIN aggiuntivi alle tabelle. E dà un effetto: del venti, forse del trenta per cento. Ma resta il problema fondamentale: la ricerca passa ancora tramite MySQL, ancora tramite ricerca esaustiva, ancora senza morfologia e senza la normale gestione degli errori di battitura. È come cercare di vincere una gara di Formula 1 a bordo di una Zhiguli semplicemente dipingendola di rosso e attaccandoci sopra uno spoiler.

Typesense - quando ho visto per la prima volta la differenza

Non siamo arrivati subito a Typesense. Innanzitutto abbiamo esaminato Elasticsearch, uno standard di ricerca full-text riconosciuto utilizzato da Amazon, eBay e dalla metà dei principali siti di e-commerce del mondo. Tecnicamente, Elasticsearch è fantastico. Ma per un negozio online di piccole e medie dimensioni è come acquistare un autocarro con cassone ribaltabile da miniera per trasportare i prodotti da Pyaterochka. Elasticsearch richiede almeno due gigabyte di RAM solo per funzionare. In pratica, per un lavoro confortevole sono necessari dai quattro agli otto gigabyte. Questo è un server separato o un potente VPS. Inoltre lo stack Java, oltre alla configurazione complessa, oltre alla necessità di monitoraggio e manutenzione. Per un negozio con diecimila-quindicimila prodotti è come sparare ai passeri da un cannone, e anche la manutenzione del cannone è costosa.

Quindi un collega ha consigliato Typesense. Ad essere sincero, ero scettico: il progetto open source non è così conosciuto come Elasticsearch o Algolia. Ma ho deciso di provarlo, e la prima prova mi ha letteralmente stupito. Abbiamo caricato un indice di quindicimila prodotti in Typesense e la query di ricerca ha iniziato a essere eseguita in cinque-dodici millisecondi. Non secondi, millisecondi. Per fare un confronto, la stessa richiesta tramite una ricerca WooCommerce standard sullo stesso catalogo ha richiesto da ottocento a mille e mezzo millisecondi. La differenza non è di molte volte, ma di decine di volte.

Ma la velocità è solo un lato della medaglia. Typesense può fare qualcosa che MySQL non sarà mai in grado di fare: effettuare ricerche tenendo conto degli errori di battitura, la cosiddetta tolleranza agli errori di battitura. L'acquirente digita "Castrol" invece di "Castrol" e trova comunque gli oli necessari. Scrive "olio idraulico" - Typesense capisce che si tratta di un errore di battitura e fornisce i risultati corretti. Per un negozio in lingua russa, questo è di fondamentale importanza, perché il layout della tastiera russa e i nomi dei marchi latini sono una fonte inesauribile di errori di battitura. Le persone cambiano layout nel momento sbagliato, scrivono in traslitterazione, confondono "i" e "th", "e" ed "e" - e Typesense elabora tutto questo correttamente.

Separatamente vale la pena menzionare la morfologia. Per la lingua inglese questo non è così critico: la morfologia è relativamente semplice. Ma la lingua russa è una storia diversa. Nel nostro paese, un sostantivo può avere dodici forme e un verbo può averne ancora di più. "Olio", "oli", "olio", "olio", "olio", "oli": tutti questi sono lo stesso prodotto e il motore di ricerca deve capirlo. Typesense supporta la morfologia russa e non funziona perfettamente (ci sono casi limite) ma è un ordine di grandezza migliore degli stupidi confronti di stringhe in MySQL.

Typesense consuma anche ridicolmente poche risorse rispetto a Elasticsearch. Per un indice di ventimila prodotti bastano da uno a duecento megabyte di RAM. È scritto in C++, funziona come un singolo binario, non richiede Java e non richiede un'infrastruttura complessa. Puoi installarlo direttamente sullo stesso server su cui viene eseguito WordPress e coesistererà pacificamente, consumando un minimo di risorse. Oppure utilizza Typesense Cloud basato su cloud: esiste un piano gratuito per piccoli progetti e piani a pagamento abbastanza convenienti.

Quando ho visto tutto questo in azione, è diventato ovvio: la ricerca integrata di WordPress deve essere sostituita completamente, non "migliorata". E abbiamo iniziato a creare un'integrazione Typesense direttamente all'interno del nostro plug-in in modo che il proprietario di un negozio potesse ottenere una ricerca a livello di Algolia, ma senza pagare centinaia di dollari in tariffe mensili e senza dover capire come impostare i motori di ricerca.

Come l'abbiamo costruito e che tipo di errori abbiamo commesso

L'idea sembra semplice: prendiamo i dati da WooCommerce, li carichiamo in Typesense, visualizziamo i risultati tramite un widget AJAX. In pratica, ovviamente, tutto si è rivelato più complicato. La prima domanda che è sorta è stata cosa indicizzare esattamente. Il nome del prodotto è ovvio. Anche la descrizione. E poi iniziano le sfumature. Lo SKU (numero articolo) è un must, perché molti acquirenti B2B effettuano ricerche specifiche in base al numero dell'articolo. Attributi del prodotto: sì, perché una persona potrebbe cercare "olio 5W-30" e aspettarsi che la ricerca trovi prodotti con l'attributo di viscosità 5W-30. Prezzo: necessario per il filtraggio delle sfaccettature in modo da poter filtrare i risultati in base alla fascia di prezzo. Le categorie riguardano gli stessi aspetti. Marchio: lo stesso. Disponibile: perché non c'è niente di peggio che trovare il prodotto perfetto solo per scoprire che è esaurito.

Siamo andati ancora oltre e abbiamo aggiunto l'indicizzazione basata sul contenuto per i file PDF allegati ai prodotti. Sembra esotico, ma per i negozi industriali, dove ogni prodotto è accompagnato da documentazione tecnica, schede di sicurezza e certificati, questo cambia le regole del gioco. Il responsabile degli acquisti può inserire il numero GOST o il nome di un'approvazione specifica e la ricerca troverà i prodotti nella cui documentazione è menzionato questo GOST. In precedenza, ciò richiedeva l'apertura manuale di ciascun PDF.

L'attività successiva è la sincronizzazione. L'indice Typesense deve essere aggiornato. Quando un manager aggiunge un nuovo prodotto, modifica il prezzo, aggiorna la descrizione, queste modifiche dovrebbero riflettersi nella ricerca. Lo abbiamo implementato tramite Action Scheduler, un pianificatore di attività integrato in WooCommerce. Ogni volta che un prodotto viene salvato, viene attivato un hook che mette in coda l'attività di aggiornamento dell'indice. SearchIndexerJob rileva questa attività e aggiorna il documento corrispondente in Typesense. Ciò avviene in modo asincrono, in background: il manager non attende l'aggiornamento dell'indice, salva semplicemente il prodotto e va avanti.

Onestamente è stato con la sincronizzazione che abbiamo sofferto di più. La prima versione aggiornava l'indice in modo sincrono, proprio nell'hook save_post - e durante l'importazione di massa di merci da 1C, questo uccideva il server. Immagina: arriva un pacco di trecento prodotti e per ognuno c'è una richiesta HTTP a Typesense. Trecento richieste al minuto sono ancora tollerabili, ma se l'importazione arriva in blocchi e ci sono quindicimila prodotti, il server inizia a soffocare. Siamo passati alla coda tramite Action Scheduler e il problema è scomparso. Ora, durante l'importazione in blocco, le attività per aggiornare l'indice vengono accodate ed elaborate in batch, senza caricare né WordPress né Typesense.

Un altro problema non ovvio è l'indicizzazione iniziale. Quando un negozio si collega semplicemente al modulo di ricerca, deve indicizzare l'intero catalogo. Per un negozio con mille prodotti, ci vogliono un minuto o due. Per il nostro negozio di combattimento con 16.844 prodotti, l'indicizzazione iniziale ha richiesto circa venti minuti. Abbiamo ottimizzato il processo suddividendolo in lotti di 250 prodotti, con pause tra i lotti per non sovraccaricare il server. Nel pannello di amministrazione viene visualizzata una barra di avanzamento: il proprietario vede quante percentuali sono state indicizzate e può facilmente fare altre cose.

C'era anche una storia con le codifiche. Typesense funziona bene con UTF-8, ma alcuni negozi WordPress hanno prodotti con caratteri complicati: spazi unificatori, trattini speciali, simboli del marchio. Un negozio di petrolio ha mantenuto una "™" nei nomi dei prodotti e ha interrotto la serializzazione JSON quando è stato inviato a Typesense. Ho dovuto aggiungere la normalizzazione del testo prima dell'indicizzazione, eliminando i caratteri di controllo invisibili, sostituendo le virgolette "intelligenti" con quelle normali e altre gioie di lavorare con dati reali.

Capitolo separato: filtraggio delle sfaccettature. Quando un cliente cerca “olio motore”, ottiene, diciamo, quattrocento risultati. Senza filtraggio, questo è inutile: nessuno sfoglierà quattrocento carte. Hai bisogno di sfaccettature: filtra per marca (Shell, Castrol, Lukoil), per viscosità (5W-30, 10W-40), per tipo (sintetico, semisintetico), per prezzo (da 500 a 2000 rubli). Typesense supporta il filtro a faccette in modo nativo: specifichiamo semplicemente quali campi sono sfaccettati e il motore conta automaticamente il numero di prodotti in ciascuna categoria. L'utente non vede solo un elenco di filtri, ma filtra con quantità - "Shell (47)", "Castrol (32)" - e può restringere rapidamente i risultati ai prodotti desiderati.

Sinonimi, curation e analisi: i tre pilastri della ricerca intelligente

Ci sono tre cose che separano una ricerca veramente intelligente da una ricerca semplicemente veloce. Il primo sono i sinonimi. Ogni nicchia ha il proprio gergo, le proprie abbreviazioni, i propri nomi alternativi. Nel deposito dell'olio, "trasmissione" = "olio per ingranaggi" = "olio per ingranaggi" = "olio per ingranaggi". In un negozio di elettronica, “mobile” = “smartphone” = “telefono” = “cellulare”. In un negozio di materiali da costruzione, “cartongesso” = “cartongesso” = “intonaco secco”. Se il motore di ricerca non conosce questi sinonimi, perde clienti.

Abbiamo reso la gestione dei sinonimi il più semplice possibile. Nel pannello di amministrazione di WordPress, nella sezione di ricerca, è presente la scheda “Sinonimi”. Aggiungi un gruppo di sinonimi - ad esempio "olio per ingranaggi", "trasmissione", "olio per ingranaggi" - e Typesense inizia a considerare tutti questi termini come equivalenti. L'acquirente inserisce una qualsiasi delle opzioni e riceve la stessa serie di risultati. L'installazione richiede cinque minuti e l'effetto è di decine di sessioni di ricerca salvate al giorno.

Esiste un altro tipo di sinonimi: unidirezionale. Questo è il momento in cui Mobil deve trovare i prodotti a marchio Mobil, ma non viceversa. Oppure quando "fluido del servosterzo" dovrebbe trovare "olio del servosterzo", ma la ricerca di "olio del servosterzo" non deve includere tutto ciò che è etichettato come "fluido del servosterzo". Tali sottigliezze sono particolarmente importanti nelle nicchie tecniche in cui la terminologia può essere ambigua.

La seconda cosa importante è la cura dei risultati. Ci sono richieste strategicamente importanti per il business. Ad esempio, sai che la query "olio motore 5W-30" ti porta il maggior numero di acquirenti di ricerca. E vuoi che i primi articoli nei risultati di ricerca non siano un olio 5W-30 qualsiasi, ma articoli specifici, magari con il margine più alto, magari di un marchio partner, magari quelli attualmente in vendita. La curation ti consente di registrare le posizioni di prodotti specifici nei risultati di ricerca per richieste specifiche. Dici: "Quando cerchi "olio 5W-30", mostra sempre prima Shell Helix Ultra, poi Castrol Edge e nascondi del tutto il prodotto X dai risultati della ricerca." E funziona.

So che alcune persone sono offese dall'idea di modificare manualmente i risultati di ricerca. Dicono che la ricerca deve essere obiettiva, l'algoritmo deve decidere. E in teoria questo è vero. Ma in pratica, il business non è un esercizio accademico. Hai prodotti che devono essere promossi. Ci sono beni che devono essere venduti. Ci sono obblighi di partenariato. E il merchandising intelligente nella ricerca è uno strumento legittimo quanto il merchandising in un negozio fisico, dove le caramelle sono sempre alla cassa e il latte è sempre nell’angolo più lontano.

La terza e forse la più sottovalutata caratteristica è l'analisi delle ricerche. Registriamo ogni query di ricerca: cosa stavano cercando, se hanno trovato qualcosa, se hanno cliccato su un risultato. Da questi dati emerge un quadro che non può essere ottenuto in nessun altro modo. Vedete che nell'ultimo mese duecento persone hanno cercato "antigelo rosso G12" e nessuno ha trovato risultati, perché nel vostro catalogo questo prodotto si chiama "refrigerante G12+ rosso". Aggiungi un sinonimo e duecento sessioni di ricerca perse al mese si trasformeranno in duecento prodotti trovati e potenziali vendite.

O un altro esempio. Vedi che un centinaio di persone al mese cercano un articolo specifico, diciamo "550046983". Questo è un codice articolo dell'olio Shell che non è presente nel catalogo. Ma hai un analogo di un altro produttore. Senza l’analisi delle ricerche, non sapresti mai che queste centinaia di persone arrivano, non trovano il prodotto e se ne vanno. E ora vedi questa richiesta in alto "ricerche senza risultati" e puoi prendere una decisione: aggiungere questo prodotto al catalogo, o impostare un sinonimo che reindirizzerà questa richiesta a un analogo, o almeno mostrare il banner "Non hai trovato questo articolo? Prova il nostro analogo..."

L'analisi delle ricerche è essenzialmente una linea di comunicazione diretta con le esigenze dei tuoi acquirenti. Loro stessi ti dicono quello che vogliono attraverso la barra di ricerca. Non resta che ascoltare.

Mostriamo l'analisi in un formato pratico: query principali, query senza risultati, query con CTR basso (quando le persone trovano risultati ma non fanno clic, il che significa che i risultati sono irrilevanti), tendenze per giorno e settimana. Un responsabile del negozio può accedere alla sezione di analisi una volta alla settimana, dedicarvi quindici minuti e ottenere informazioni più utili sulla domanda rispetto a qualsiasi ricerca di mercato.

Widget di ricerca: come appare all'acquirente

Tutto ciò di cui ho parlato prima riguarda il backend. Indicizzazione, sinonimi, analisi: l'acquirente non vede nulla di tutto ciò. Vede una barra di ricerca e la sua esperienza con essa determina se acquista qualcosa o se ne va. Pertanto, abbiamo realizzato il frontend di ricerca con particolare cura.

Il widget di ricerca funziona in questo modo. L'acquirente inizia a inserire il testo e dopo il secondo o il terzo carattere, sotto la barra di ricerca viene visualizzata una finestra a discesa con i risultati. Non solo link testuali, ma vere e proprie schede prodotto: immagine in miniatura, nome, prezzo, disponibilità a magazzino. L'acquirente vede i risultati anche prima di completare la richiesta e premere Invio. Questa si chiama ricerca durante la digitazione ed è lo standard a cui le persone si sono abituate grazie a Google, Amazon e altre grandi piattaforme. Quando anche il tuo negozio può fare questo, non è solo comodità, è un segnale: “Siamo un negozio serio, qui tutto funziona come deve”.

Una richiesta a Typesense viene inviata ad ogni pressione di un tasto, ma con un rimbalzo di 200 millisecondi, in modo da non bombardare il server con richieste mentre l'acquirente digita velocemente. La risposta arriva in 5-50 millisecondi e i risultati vengono aggiornati immediatamente. La sensazione è che i risultati siano già pronti e aspettino solo di essere mostrati.

Il widget può essere inserito in qualsiasi pagina tramite uno shortcode. Puoi inserirlo nell'intestazione del sito invece che nella ricerca standard di WordPress: per fare ciò, nella maggior parte dei temi devi solo aggiungere uno shortcode al blocco widget desiderato. Può essere inserito in una pagina dei risultati di ricerca separata. Può essere utilizzato come elemento della pagina di destinazione: "Trova l'olio di cui hai bisogno in 3 secondi" - e c'è una riga di ricerca che mostra immediatamente i risultati. Questo funziona come un potente elemento di fiducia perché dimostra all'acquirente che il catalogo è davvero ampio e facile da navigare.

Quando un cliente preme Invio o fa clic su "Mostra tutti i risultati", verrà indirizzato a una pagina dei risultati di ricerca. È qui che entra in gioco il filtraggio delle sfaccettature, di cui ho parlato prima. Sulla sinistra c'è un pannello di filtro con categorie, marchi, fascia di prezzo e attributi. A destra sono presenti le schede prodotto con impaginazione. I filtri funzionano istantaneamente, senza ricaricare la pagina, tramite AJAX. Facendo clic su "Shell": l'elenco è stato aggiornato in una frazione di secondo, mostrando solo i prodotti Shell. Ho rimosso il filtro e l'intero elenco è tornato. Questo è il livello di UX a cui sono abituati i clienti sui marketplace, e che distingue nettamente il tuo negozio dalla concorrenza, dove la ricerca restituisce tutti i risultati in un foglio infinito senza possibilità di filtraggio.

Ti parlerò separatamente dell'evidenziazione delle corrispondenze. Quando un cliente cerca "olio idraulico HLP 46", i risultati della ricerca evidenziano le parole trovate in grassetto o a colori. L'acquirente vede immediatamente perché questo particolare prodotto è apparso nei risultati di ricerca e può valutarne rapidamente la pertinenza. È una piccola cosa, ma migliora notevolmente l'esperienza e riduce il tempo che intercorre tra la richiesta e il clic.

Un altro aspetto spesso trascurato è l'adattabilità. Il widget di ricerca funziona correttamente sui dispositivi mobili. E il traffico mobile ora è pari al 60-70% per la maggior parte dei negozi online. Su un telefono, una finestra a discesa con i risultati occupa l'intera larghezza dello schermo, le schede prodotto si adattano a uno schermo stretto, i filtri nella pagina dei risultati sono compressi in un pannello scorrevole. Niente si rompe, niente si incastra uno sopra l'altro. Sembrerebbe un requisito ovvio, ma rimarrai sorpreso dal numero di plugin di ricerca che funzionano ancora in modo storto sui telefoni cellulari.

16.844 prodotti: come funziona in battaglia

La teoria è buona, ma parliamo dell'esperienza reale. Abbiamo un negozio di lubrificanti: 16.844 prodotti, WooCommerce, un tema personalizzato basato su Porto e il nostro plugin COS WP Woo con un modulo di ricerca su Typesense. Questo negozio è il nostro campo di addestramento al combattimento, dove testiamo tutte le funzioni su dati reali e clienti reali.

Prima dell'introduzione di Typesense, la ricerca su questo negozio funzionava tramite WooCommerce standard con diversi miglioramenti: ricerca per SKU e per attributi tramite un plug-in aggiuntivo. Il tempo medio di risposta a una query di ricerca variava da 800 a 2000 millisecondi, a seconda del carico del server. Sui dispositivi mobili, dove ogni secondo conta, era disastrosamente lento. Non abbiamo raccolto alcuna analisi delle query di ricerca: non esisteva alcuno strumento.

Dopo aver lanciato il modulo di ricerca su Typesense, abbiamo effettuato un'indicizzazione completa del catalogo. Più di sedicimila prodotti: l'indicizzazione ha richiesto circa venti minuti in background, tramite Action Scheduler. La dimensione dell'indice in Typesense è di circa centocinquanta megabyte. Il consumo di RAM da parte di Typesense stesso è di circa duecento megabyte. Per un server con otto gigabyte di RAM questo è impercettibile.

Il tempo medio di risposta alle query di ricerca dopo il passaggio a Typesense è di 8-15 millisecondi. Ciò tiene conto della latenza di rete tra WordPress e Typesense, che si trova sullo stesso server. Per il consumatore, questa sembra una risposta immediata: inizia a digitare e i risultati vengono visualizzati prima ancora che possa sollevare il dito dal tasto.

Abbiamo iniziato a raccogliere analisi delle ricerche fin dal primo giorno e abbiamo subito mostrato cose interessanti. Si è scoperto che una parte significativa degli acquirenti cerca i prodotti in base al numero dell'articolo, non per nome, ma per codice alfanumerico. Questo è tipico del segmento B2B: il responsabile degli acquisti ha una scheda con gli articoli e li inserisce semplicemente uno per uno. Per uno scenario del genere, la ricerca istantanea con completamento automatico consente un enorme risparmio di tempo. Invece di attendere ogni volta dai tre ai cinque secondi per caricare la pagina dei risultati, il gestore riceve una risposta istantaneamente e può elaborare l'ordine molto più velocemente.

Un'altra scoperta derivante dall'analisi è il numero di query con zero risultati. Nella prima settimana erano circa il 15 per cento del totale. Cioè, ogni sesto o settimo acquirente non ha trovato quello che stava cercando. Abbiamo analizzato queste query e scoperto diversi modelli. Alcune delle richieste riguardavano errori di battitura e ortografie alternative, che sono state risolte impostando sinonimi. Alcune di queste erano richieste di prodotti che in realtà non erano nel catalogo, ma che aveva senso aggiungerli. Alcune sono richieste di prodotti presenti nel catalogo, ma con un nome diverso. Dopo un mese di lavoro con analisi e sinonimi, abbiamo ridotto la percentuale di richieste con risultati pari a zero al 4-5%. Ciò significa che circa il dieci per cento degli acquirenti che prima rimanevano a mani vuote, ora trovano quello che stanno cercando.

Ecco un esempio specifico. Gli acquirenti spesso cercavano "VMGZ": si tratta di un marchio di olio idraulico ben noto nel settore. Ma nel catalogo il prodotto si chiamava "Olio idraulico VMGZ-45" e una ricerca standard lo trovò solo per caso. Se l'acquirente digitava semplicemente "VMGZ" senza "-45", si otteneva un risultato, ma se digitava "VMGZ oil", la ricerca era già persa perché le parole erano in un ordine diverso. Dopo essere passato a Typesense, questo problema è scomparso: Typesense effettua la ricerca in tutti i campi, tiene conto dell'ordine delle parole e trova corrispondenze parziali. Inoltre, abbiamo aggiunto i sinonimi: "VMGZ" = "Olio idraulico VMGZ" = "Olio VMGZ-45" - e ora ognuna di queste domande porta ai prodotti corretti.

Se parliamo dell'impatto sulle metriche aziendali, e qui dobbiamo essere onesti, non abbiamo condotto un test A/B puro, quindi non posso dire con precisione scientifica che la conversione sia aumentata dell'X% proprio a causa della ricerca. Ma vediamo una correlazione: dopo l'introduzione della nuova ricerca, è aumentata la percentuale di sessioni di ricerca che si concludono con l'aggiunta di un articolo al carrello. Gli acquirenti hanno iniziato a utilizzare la ricerca più spesso invece di navigare nel catalogo, il che è logico, perché ora la ricerca è più veloce e più affidabile rispetto alla ricerca per categorie. E il numero delle richieste di supporto con la scritta “Non riesco a trovare il prodotto” è praticamente scomparso.

Non fornirò cifre specifiche sulla crescita della conversione, perché penso che sia disonesto: troppi fattori influenzano la conversione ed è impossibile isolare il contributo di uno di essi senza un esperimento controllato. Ma posso dirlo con sicurezza: una rapida ricerca intelligente rimuove uno degli ostacoli più fastidiosi tra un acquirente e un acquisto. E rimuovere gli ostacoli è l’essenza dell’ottimizzazione della conversione.

C'è un altro aspetto che viene raramente discusso: il carico del server. Una ricerca WooCommerce standard è una query SQL pesante che carica il database MySQL. Ogni query di ricerca è un JOIN di più tabelle, una scansione dell'intera tabella, un consumo di I/O della CPU e del disco. Quando dieci persone effettuano ricerche contemporaneamente sul sito, vengono effettuate dieci query pesanti contemporaneamente. Su un hosting con risorse limitate, ciò può rallentare non solo la ricerca, ma anche l'intero sito: pagine del catalogo, carrello, checkout. Con Typesense, il carico di ricerca viene completamente rimosso da MySQL. Il database fa quello che dovrebbe: elaborare gli ordini, aggiornare i saldi, lavorare con il carrello. E la ricerca viene elaborata da un motore separato ottimizzato per questo. Ciò è particolarmente critico durante i picchi di carico: vendite, promozioni, quando il traffico aumenta in modo significativo.

Nel nostro negozio abbiamo notato che dopo aver spostato la ricerca su Typesense, il carico medio di MySQL è diminuito del 15-20%. Non sembra molto, ma in pratica è la differenza tra “il sito è stabile” e “il sito rallenta periodicamente durante le ore di punta”. E per un negozio che riceve ordini per decine e centinaia di migliaia di rubli, ogni secondo di ritardo alla cassa è un ordine potenzialmente perso.

E non possiamo fare a meno di menzionare la ricerca di documenti. Questa è una funzionalità che poche persone implementano, ma che ha un valore inestimabile per i negozi industriali e B2B. Il nostro modulo può indicizzare il contenuto dei file PDF allegati ai prodotti. Schede tecniche, certificati di conformità, schede di sicurezza, istruzioni per l'uso: tutto questo è testo e tutto questo diventa disponibile tramite una ricerca. L'ingegnere inserisce il numero TU o GOST e la ricerca trova i prodotti nella cui documentazione tecnica è menzionata questa norma. Per un'azienda che acquista lubrificanti industriali e dove la scelta dell'olio è determinata non dal prezzo, ma dal rispetto di uno standard specifico, ciò cambia radicalmente l'esperienza di lavoro con il catalogo. Non chiamano più il direttore e chiedono "di trovare un olio conforme a GOST 17479.4-87": lo trovano da soli, in tre secondi, tramite una ricerca.

Un orgoglio speciale è la velocità di reindicizzazione. Quando abbiamo collegato la sincronizzazione con 1C tramite il nostro modulo di integrazione e ogni notte il negozio riceve aggiornamenti di prezzi e saldi per tutti i sedicimila prodotti, per noi era importante che l'indice di ricerca venisse aggiornato altrettanto rapidamente. Typesense gestisce l'aggiornamento di un singolo documento in 1-2 millisecondi. Sedicimila aggiornamenti equivalgono a circa trenta secondi in totale. In confronto, la reindicizzazione di Elasticsearch per questo volume richiederebbe minuti, se non decine di minuti, a seconda della configurazione.

Ti parlerò di un’altra situazione che illustra bene la differenza tra “la ricerca funziona” e “la ricerca funziona correttamente”. Nel nostro catalogo abbiamo oli in confezioni diverse: lo stesso olio può essere venduto in taniche da 1 litro, 4 litri, 20 litri e in fusti da 208 litri. Si tratta di quattro prodotti diversi con prezzi diversi, articoli diversi, ma essenzialmente lo stesso prodotto. Quando un acquirente cerca "Shell Helix HX8 5W-30", si aspetta di vedere tutte le confezioni una accanto all'altra in modo da poter scegliere quella di cui ha bisogno. Una ricerca standard di WordPress li ha restituiti mescolati con altri oli Shell perché la rilevanza era determinata dall’ordine delle parole nel titolo e dalla data di pubblicazione. Typesense si classifica in base al grado di corrispondenza: una corrispondenza esatta del nome è sempre superiore a una corrispondenza parziale e tutti e quattro i pacchetti sono nelle prime posizioni, raggruppati in modo naturale. L'acquirente vede immediatamente tutte le opzioni e può scegliere senza scorrere tre pagine di risultati.

Un altro punto che ritengo di fondamentale importanza è la sicurezza e l'isolamento dei dati. Typesense indicizza solo i dati che scegli esplicitamente di indicizzare. Non ha accesso al database WordPress, non conosce le password degli utenti, non vede gli ordini e non memorizza i dati personali dei clienti. L'indice contiene solo informazioni sul prodotto: nome, descrizione, prezzo, attributi, immagini. Per i negozi che lavorano con clienti aziendali e devono rispettare i requisiti per il trattamento dei dati personali, questo è un vantaggio significativo. Il motore di ricerca fisicamente non può “far trapelare” altro che le informazioni del catalogo pubblico, perché non contiene nient’altro.

E voglio parlare anche dei costi di proprietà, perché questa è la domanda che viene posta più spesso. Algolia, il concorrente più noto di Typesense nel mondo della ricerca nel cloud, parte da $ 1 ogni mille ricerche. Sembra economico finché non fai i conti. Se hai mille visitatori al giorno e ognuno effettua una media di tre query di ricerca (una di base e due di qualificazione con completamento automatico), si tratta di 90mila transazioni al mese. Inoltre indicizzazione: anche ogni aggiornamento del prodotto è considerato un'operazione. Per un negozio con sedicimila prodotti e commercio attivo, la fattura dall'Algolia può facilmente arrivare a 50-100 dollari al mese. E nonostante l’Algolia sia un servizio eccellente, non dirò niente di negativo al riguardo.

Typesense Cloud è significativamente più economico, a partire da $ 29,99 al mese per un'istanza dedicata che gestisce un numero illimitato di richieste. Nessuna commissione di transazione, nessuna fattura, nessuna sorpresa a fine mese. E se sei pronto per installare Typesense sul tuo server, è completamente gratuito, perché Typesense è completamente open source. Per il nostro negozio di combattimento abbiamo scelto l'opzione self-hosted: Typesense funziona sullo stesso server di WordPress, consuma duecento megabyte di memoria e non costa un centesimo. L'unico “costo” è il tempo di installazione iniziale, che dura dai trenta ai quaranta minuti per una persona che ha familiarità con Linux, o pochi clic se si utilizza Docker.

Quando confronto il costo di Typesense con quanto un negozio perde a causa di una ricerca inadeguata, la differenza è così evidente che la domanda stessa sembra retorica. Un ordine perso al giorno – diciamo che la fattura media è di tremila rubli – fa novantamila rubli al mese. Uno. E quanti ordini vengono persi quando il 15% delle query di ricerca termina con zero risultati? Quando la ricerca non riconosce gli errori di battitura? Quando un cliente aspetta tre secondi e si rivolge a un concorrente che ottiene risultati immediati? Non voglio speculare su numeri specifici, ma l’entità delle perdite supera chiaramente il costo della soluzione, per ordini di grandezza.

Ecco cosa ho capito mentre lavoravo con la ricerca: la ricerca corretta non è una funzionalità, è un'infrastruttura. Questa è la stessa parte critica di un negozio online come il carrello o il checkout. Puoi avere il catalogo perfetto, un bel design, una consegna veloce, ma se l'acquirente non riesce a trovare il prodotto di cui ha bisogno, nient'altro conta. Eppure, la ricerca è una delle parti meno investite della maggior parte dei negozi WooCommerce. Le persone spendono migliaia di dollari in pubblicità, attirano traffico e poi perdono clienti a causa della cosa più semplice: "Non ho trovato quello che stavo cercando".

E se lo guardassimo dall'altro lato? Ogni rublo investito nel miglioramento della ricerca non serve ad attirare nuovo traffico, ma a convertire quello esistente. Non paghi per clic, non paghi per impressione: semplicemente smetti di perdere coloro che sono già arrivati. E in questo senso, il ROI di una buona ricerca può essere significativamente superiore al ROI di un'altra campagna pubblicitaria.

Ho pensato molto al motivo per cui la community di WordPress ha tollerato per così tanto tempo una ricerca inadeguata. E penso che il fatto sia che la maggior parte dei proprietari di negozi semplicemente non sa come potrebbe essere diverso. Sono abituati al fatto che la ricerca è una cosa lenta che non sempre trova ciò di cui hanno bisogno. Non hanno visto come funziona la ricerca su Amazon o Ozon e non pensavano che la stessa tecnologia fosse disponibile per un negozio WooCommerce. E quando mostri loro la differenza - apri letteralmente due finestre del browser, una con la ricerca standard, l'altra con Typesense, e inserisci la stessa query - le persone rimangono letteralmente a bocca aperta. "Era possibile farlo?" - la reazione più comune.

Sì, è possibile. Ed è necessario. E lo abbiamo reso il più accessibile possibile: lo abbiamo integrato direttamente nel plug-in, con configurazione passo passo, un pannello di amministrazione di facile comprensione e sincronizzazione automatica. Niente balli con il tamburello, niente programmazione, niente server separati, anche se questa opzione è disponibile anche per chi ha bisogno di scalabilità. Collega Typesense Cloud o installalo sul tuo server, specifica la chiave API nelle impostazioni, fai clic su "Indice" e in venti minuti hai una ricerca che funziona cinquanta volte più velocemente, comprende errori di battitura, morfologia e articoli russi. Questa non è un'esagerazione di marketing, questo è letteralmente ciò che accade.

E l'ultima cosa che voglio dire. Non ci siamo fermati a quello che abbiamo adesso. La ricerca è un sistema vivente che deve evolversi con il negozio e le aspettative dei clienti. I nostri piani immediati includono la personalizzazione dei risultati di ricerca in base alla cronologia degli acquisti e della navigazione, l'integrazione con un motore di consigli e la ricerca vocale per dispositivi mobili. Il mondo dell’e-commerce si sta muovendo verso un’esperienza del cliente sempre più intelligente e la ricerca è in prima linea in questo movimento.

Nel frattempo, se hai un negozio WooCommerce con più di mille prodotti e una ricerca WordPress standard, prova a digitare qualche query con un errore di battitura e guarda il risultato. Se il risultato ti turba, allora è tempo di cambiare qualcosa. E so da dove cominciare.


Prova COS WP Woo - 14 giorni gratis.Installa il plugin, collega il modulo di ricerca intelligente a Typesense e scopri come cambierà l'esperienza dei tuoi clienti. Nessuna restrizione di funzionalità, nessuna associazione di carte. Solo una ricerca veloce e intelligente che trova ciò che i tuoi clienti stanno cercando, in millisecondi, non secondi.