Dalle piattaforme di e-commerce ai sistemi di gestione dei contenuti (CMS), le applicazioni web generano e gestiscono enormi quantità di dati. Estrarre in modo efficiente le informazioni rilevanti da questi dati è fondamentale per garantire un’esperienza utente fluida. Per questo motivo, le funzionalità di ricerca tradizionali che utilizzano una corrispondenza letterale delle query, parola per parola, non sono sufficienti. Serve una ricerca full-text.

Una ricerca full-text esamina il contenuto completo dei documenti o dei database, permettendo di recuperare informazioni rilevanti da grandi insiemi di dati in base a parole o frasi specifiche. Tiene conto di fattori come la frequenza di occorrenza e il contenuto multilingue, ottenendo risultati di ricerca più accurati e completi.

Meilisearch è all’avanguardia in questa categoria di motori di ricerca e sfrutta la potenza della ricerca full-text per offrire uno strumento flessibile e potente costruito pensando agli sviluppatori e agli utenti finali.

Questo tutorial mostra come integrare Meilisearch in un progetto web Node.js.

Cos’è Meilisearch?

Meilisearch è un motore di ricerca open-source che fornisce risultati di ricerca veloci e pertinenti agli utenti finali. È in grado di tollerare i refusi e funziona con le impostazioni predefinite per adattarsi alla maggior parte dei progetti.

Meilisearch è anche altamente personalizzabile e offre numerose funzioni per regolare la rilevanza dei risultati di ricerca. Tra queste caratteristiche, la più importante è quella delle regole di classificazione, che si possono adattare al proprio progetto.

Offre un’API RESTful intuitiva per un’integrazione perfetta in qualsiasi sito web aziendale. Potete ospitarlo voi stessi o utilizzare la sua soluzione ufficiale ospitata nel cloud, Meilisearch Cloud, per iniziare a lavorare in modo rapido e semplice. Questo tutorial utilizza Meilisearch Cloud.

Prerequisiti

Per seguirci, è necessario avere a disposizione:

Come configurare Meilisearch

  1. Andiamo su Meilisearch Cloud e creiamo un account o eseguiamo l’accesso. Assicuriamoci di confermare l’indirizzo e-mail.
  2. Quindi, clicchiamo su Create a project, un server che gestisce un’istanza di Meilisearch – dove aggiungeremo i dataset del sito web.
  3. Aggiungiamo un nome al progetto (ad esempio, book-app) e scegliamo la regione che preferiamo. Poi, clicchiamo su Create. Dopo aver creato il progetto, possiamo cliccare su Settings per vedere i dettagli del progetto, come l’URL per accedere ai dataset, le chiavi API per proteggere l’istanza Meilisearch e altre informazioni.
    La pagina di panoramica del progetto book-app
    La pagina di panoramica del progetto book-app.

    Ci sono tre chiavi API, ognuna delle quali rappresenta un diverso livello di autorizzazione:

    • Master key: questa chiave sblocca tutti i percorsi ed è l’unica ad avere accesso agli endpoint per la creazione e la cancellazione delle chiavi API. Usate la chiave master solo per gestire le chiavi API da un ambiente protetto.
    • Default Search API key: questa chiave garantisce l’accesso solo al percorso di ricerca. Possiamo usarla nel codice lato client.
    • Default Admin API key: questa chiave consente di accedere a tutti i percorsi API tranne /keys, che serve per creare e cancellare le chiavi API. Possiamo utilizzare questa chiave solo da un ambiente protetto.

Come indicizzare i dati con Meilisearch

Gli indici sono i componenti principali che memorizzano e organizzano i dati ricercabili. Agiscono come contenitori di documenti – oggetti contenenti uno o più campi.

Ogni indice in Meilisearch è indipendente e personalizzabile, consentendo regole di classificazione della ricerca e opzioni di filtraggio personalizzate.

Come creare un indice e aggiungere documenti

  1. Nella barra di navigazione, clicchiamo sulla scheda Indexes del progetto.
  2. Clicchiamo su Create an index. Inseriamo quindi un nome per l’indice (ad esempio, books) e clicchiamo su Create index.
  3. Selezioniamo la modalità di importazione dei documenti. Per questa guida, importiamo un file JSON che include 13 voci di libri dall’API di Google Book.
  4. Clicchiamo su File upload e carichiamo il file JSON, poi clicchiamo su Import documents.

Come aggiornare ed eliminare i documenti

Attualmente Meilisearch Cloud non prevede un modo per modificare o eliminare i documenti, ma possiamo utilizzare le route API REST o l’SDK. Il codice che segue mostra come aggiornare o eliminare i documenti utilizzando gli endpoint dell’API REST. Questo tutorial utilizza cURL per lavorare con le route, ma possiamo anche utilizzare una piattaforma API come Postman.

  1. Per aggiornare i documenti, inviamo una richiesta a PUT sulla seguente route:
    /indexes/{index_uid}/documents

    index_uid è il nome dell’indice del progetto:

    Nome indice evidenziato
    Nome indice evidenziato.

  2. Con questo percorso possiamo aggiungere o aggiornare un elenco di documenti se questi esistono già. Per aggiornare un documento, dobbiamo allegare la sua chiave primaria. Il vecchio documento subisce un aggiornamento parziale basato sui campi del nuovo documento. L’aggiornamento preserva i campi non inclusi nel nuovo documento, consentendo loro di rimanere inalterati. Di seguito è riportato un esempio di come aggiornare il titolo di un documento nell’indice dei libri da JavaScript for Kids a JavaScript Coding for Kids e aggiungere un campo editore:
    curl \
        -X PUT '/indexes/books/documents' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer ' \
            --data-binary '[
            {
                "id": "71nDBQAAQBAJ",
                "title": "JavaScript Coding for Kids",
                "publisher": "No Starch Press"
            }
        ]'
  3. Sostituiamo <your-project-url> e <your-admin-api-key> con i valori corrispondenti nella pagina di Project overview:
    "taskUid": 26, "indexUid": "books", "status": "enqueued", "type": "documentAdditionOrUpdate", "equeuedAt": "2023-05-26T07:52:24.127920065Z"
  4. Per eliminare i documenti, Meilisearch prevede tre route (endpoint):
    /indexes/{index_uid}/documents // Deleting all documents
    /indexes/{index_uid}/documents/{document_id} // Deleting a single document
    /indexes/{index_uid}/documents/delete-batch // Deleting a selection of  
    documents

    Possiamo ottenere il sito document_id dai dati originali del file books.json dopo aver recuperato il documento da MeiliSearch Cloud o dal database.

Di seguito troviamo un esempio di come cancellare il libro aggiornato in precedenza:

curl \
    -H 'Authorization: Bearer ' \
    -X DELETE '/indexes/books/documents/71nDBQAAQBAJ'

Dopo aver inviato la richiesta, la risposta dovrebbe essere simile a questa:

"taskUid": 10, "indexUid": "books", "status": "enqueued", "type": "documentDeletion", "equeuedAt": "2023-05-26T07:20:11.1291066"

Come aggiungere MeiliSearch a un servizio web

  1. Iniziamo clonando il progetto iniziale da GitHub eseguendo i comandi qui sotto nel terminale:
    git clone https://github.com/Tammibriggs/meilisearch-app.git
    cd meilisearch​-app
    npm install

    Se controlliamo il file package.json, dovremmo vedere il comando start. Eseguiamo npm start per eseguire il progetto Node.js su localhost port3000. Dopo aver digitato http://localhost:3000/ nel browser, dovremmo vedere quanto segue:

    Applicazione demo starter di Meilisearch.
    Applicazione demo starter di Meilisearch.

  2. Una volta che l’applicazione è pronta e funzionante, possiamo aggiungervi Meilisearch in modo che il modulo di ricerca inizi a restituire i risultati di Meilisearch quando viene inviato. Per farlo, installiamo Meilisearch eseguendo questo comando nel terminale:
    npm install meilisearch
  3. Dobbiamo anche installare il pacchetto dotenv npm per caricare le credenziali sensibili da un file .env . Eseguiamo questo comando nel terminale:
    npm install dotenv
  4. Creiamo un file .env nella cartella principale del progetto e aggiungiamo quanto segue:
    YOUR_PROJECT_URL= '<your-project-url>'
    YOUR_SEARCH_API_KEY= '<your-admin-api-key>'

    Assicuriamoci di sostituire <your-project-url> e <your-admin-api-key> con i valori corrispondenti.

  5. Successivamente, importiamo meilisearch e il pacchetto dotenv nel file server.js e configuriamo dotenv:
    import {MeiliSearch} from 'meilisearch'
    import dotenv from 'dotenv';
    dotenv.config();
  6. Quindi, inizializziamo Meilisearch per iniziare a lavorare sul progetto books-app. Andiamo al file server.js e aggiungiamo il seguente codice dopo la definizione della variabile searchValue:
    const client = new MeiliSearch({ host: process.env.YOUR_PROJECT_URL, apiKey: process.env.YOUR_SEARCH_API_KEY })
  7. Una funzionalità importante è la ricerca nell’indice dei libri in Meilisearch utilizzando il valore di ricerca allegato all’URL al momento dell’invio del modulo. Per abilitare questa funzionalità, aggiungiamo il seguente codice dopo la definizione della variabile client:
    const index = client.index('books')  
    const searchResults = !!searchValue && await index.search(searchValue)

    Questo codice crea un riferimento all’indice dei libri. Quindi, utilizza il metodo search() per cercare i documenti che corrispondono al valore di ricerca nell’indice dei libri se definiamo searchValue.

  8. Infine, per visualizzare i risultati della ricerca, modifichiamo il metodo render() come segue:
    res.render('index', {
        books: searchResults ? searchResults.hits : [],
        searchValue
    })

    Ora siamo pronti per iniziare la ricerca nell’indice dei libri:

    Ricerca nell'indice di 'libri' con il modulo di ricerca
    Ricerca nell’indice di ‘libri’ con il modulo di ricerca

  9. Dopo aver aggiunto i codici di cui sopra, il file server.js dovrebbe avere questo aspetto:
    import express from 'express';
    import { MeiliSearch } from 'meilisearch';
    import dotenv from 'dotenv';
    dotenv.config();
    
    const app = express();
    const PORT = process.env.PORT || 3000;
    
    app.set('view engine', 'ejs');
    app.use(express.static('public'));
    
    app.get('/', async (req, res) => {
    	const searchValue = req.query.search;
    	const client = new MeiliSearch({
    		host: process.env.YOUR_PROJECT_URL,
    		apiKey: process.env.YOUR_SEARCH_API_KEY,
    	});
    	const index = client.index('books');
    	const searchResults = !!searchValue && (await index.search(searchValue));
    
    	res.render('index', {
    		books: searchResults ? searchResults.hits : [],
    		searchValue,
    	});
    });
    
    app.listen(PORT, () => {
    	console.log(`listening at http://localhost:${PORT}`);
    });

È possibile accedere al codice completo di questa guida su GitHub.

Riepilogo

Meilisearch è un’eccellente soluzione di motore di ricerca che migliora le funzionalità di ricerca e l’esperienza utente di un sito web. La sua eccezionale velocità, l’algoritmo di ranking incentrato sulla rilevanza e il processo di integrazione senza soluzione di continuità lo rendono uno strumento prezioso per chi vuole ottimizzare le funzionalità di ricerca del proprio sito web.

Il servizio di Hosting di Applicazioni di Kinsta migliora le prestazioni delle applicazioni alimentate da Meilisearch. Grazie a un’infrastruttura solida e ad ambienti server ottimizzati, Kinsta garantisce una rapida funzionalità di ricerca, migliorando l’esperienza dell’utente. La scalabilità della piattaforma soddisfa le esigenze di Meilisearch, garantendo operazioni di ricerca affidabili ed efficienti.

A quale motore di ricerca vi affidate per i vostri progetti? Fatecelo sapere nella sezione commenti!

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).