Migrazione da Algolia verso Elasticsaerch

Quando si parla di ricerca full-text su siti o applicazioni e specialmetnte come motore di ricerca per l’ e-commerce Algolia è sicuramente il miglior servizio disponibile, ma sicuramente costoso quando il numero delle ricerche comincia ad aumentare. Elasticsearch puo’ essere un’ottima soluzione di ripiego, sicuramente piu’ economica anche se con prestazioni diverse. In questo articolo invece analizziamo le caratteristiche principali dei database NoSql.


Le funzionalità di Algolia

Parlando di web-applications, le funzionalità che Algolia mette a disposizione sono strabilianti. Questo sopratutto grazie alle librerie client che Algolia stessa rilascia per l’integrazione sulle varie piattaforme. Queste librerie permettono una ricerca in tempo reale su database di milioni di records, rendendo inegualgliabile l’esperienza di ricerca sui documenti per precisione e velocità.

Un punto negativo di Algolia è invece il prezzo: siccome le tariffe sono tarate sulla quantità di ricerche effettuate, maggiore è il numero di ricerche sul sito, maggiore è il prezzo, cosa che ne rende l’adozione difficile per tutte quell imprese che non hanno l’intenzione di investire un migliaio di euro al mese per il servizio di ricerca.

La migrazione verso un servizio di ricerca alternativo

Nel nostro caso, il cliente aveva chiesto, data la necessità di ridurre i costi della ricerca per privilegiare altri tipi di sviluppo, di poter utilizzare un servizio alternativo. La loro indicazione era quella di testare in ogni caso la ricerca sul database MySQL della web-application, un installazione Laravel datata qualche annetto.

Le problematiche da risolvere nell’attività di migrazione del database Algolia

Le fasi delicate da affrontare nella migrazione dei dati contenuti nel database di Algolia, circa 1 milione e mezzo di record, erano:
– la realizzazione di uno script che esportasse i records da Algolia e li importasse nella nuova soluzione
– la realizzazione in Laravel di un servizio di query sulla nuova soluzione che riproducesse il piu’ possibile le caratteristiche di Algolia sia come velocità che come intelligenza nella ricerca full-text in lingua italiana
– la sostituzione delle funzionaità di caricamento dei dati su Algolia con funzionalità per il nuovo servizio.

La migrazione da Algolia a MySql

Una cosa molto positiva che si puo’ dire di Algolia è che il procedimento di esportazione dei dati è molto chiaro ed efficiente: attraverso una chiamata api ‘browse’ si ottiene l’eportazione di tutto il database ad una velocità strabiliante.

Peccato che lo stesso non si possa dire di MySql:un volta riprodotta la struttura di tabelle (con indicizzazione fulltext, inno-db), lo script di migrazione che estraeva i dati da Algolia per inserirli nelle nuove tabelle andava a rilento e quasi sempre vero i 300.000 records falliva, killato dallo stesso sistema operativo (Ubuntu 20, un istanza Digital Ocean con 2 processori ed 8Gb di memoria).

Abbiamo dovuto creare uno script che potesse caricare solo 100.000 records alla volta, ed in questo modo in un tempo di ca 6/7 ore l’intera esportazione poteva adare a buon termine.

Qui pero’ cominciavano i guai seri, perchè la query MySql fultext (match…against) su una tabella di una decina di Gb risultava essere molto lenta oltre che imprecisa (la durata dell’esecuzione oltretutto aumentava con l’aumentare delle parone nella stringa ricercata).

Verificata l’inefficienza di MySql in questo tipo di attività, abbiamo proposto al cliente l’adozione di Elasticsearch.

La migrazione da Algolia a Elasticsearch

Abbiamo quindi installato Elasticsearch tramite Docker su un’istanza EC2 Small Amazon Aws. La migrazione è risultata molto rapida grazie alle api bulk di Elasticsearch.

La ricerca sul motore Lucene di Elasticsearch è risultata molto precisa e veloce. L’unica differenza alla fine dell’attività è stata la mancanza della ricerca in tempo reale fornità da Algolia, ma nel complesso Elasticsearch si rivela essere un competitor di alto livello con prezzi concorreziali.