Des plateformes de commerce électronique aux systèmes de gestion de contenu (CMS), les applications web génèrent et traitent d’énormes quantités de données. L’extraction efficace d’informations pertinentes à partir de ces données est cruciale pour une expérience utilisateur transparente. C’est pourquoi la fonctionnalité de recherche traditionnelle qui utilise la correspondance littérale des requêtes mot à mot ne suffit pas. Vous avez besoin d’une recherche plein texte.

Une recherche en texte intégral examine le contenu complet des documents ou des bases de données, ce qui vous permet d’extraire des informations pertinentes de vastes ensembles de données sur la base de mots ou d’expressions spécifiques. Elle tient compte de facteurs tels que la fréquence d’occurrence et le contenu multilingue, ce qui permet d’obtenir des résultats de recherche plus précis et plus complets.

Meilisearch est un pionnier dans cette catégorie de moteurs de recherche, car il exploite la puissance de la recherche plein texte pour offrir un outil flexible et puissant, conçu en pensant aux développeurs et aux utilisateurs finaux.

Ce tutoriel montre comment intégrer Meilisearch dans un projet web Node.js.

Qu’est-ce que Meilisearch ?

Meilisearch est un moteur de recherche open source qui fournit des résultats de recherche rapides et pertinents aux utilisateurs finaux. Il tolère les fautes de frappe et fonctionne avec des réglages par défaut pour s’adapter à la plupart des projets.

Meilisearch est également hautement personnalisable et offre de nombreuses fonctionnalités permettant d’ajuster la pertinence des résultats de recherche. Parmi ces fonctionnalités, la plus remarquable est celle des règles de classement, que vous pouvez adapter à votre projet.

Il offre une API RESTful intuitive pour une intégration transparente dans pratiquement n’importe quel site web d’entreprise. Vous pouvez l’héberger vous-même ou utiliser sa solution officielle hébergée dans le cloud, Meilisearch Cloud, pour démarrer rapidement et sans effort. Ce tutoriel utilise Meilisearch Cloud.

Pré-requis

Pour suivre ce tutoriel, vous avez besoin de :

Comment configurer Meilisearch

  1. Naviguez vers Meilisearch Cloud et créez un compte ou connectez-vous. Assurez-vous de confirmer votre adresse e-mail.
  2. Ensuite, cliquez sur Créer un projet, un serveur exécutant une instance Meilisearch – où vous ajouterez les ensembles de données de votre site web.
  3. Ajoutez un Nom de projet (par exemple, book-app) et choisissez votre région préférée. Cliquez ensuite sur Créer. Après avoir créé votre projet, vous pouvez cliquer sur Réglages pour voir les détails de votre projet, comme l’URL pour accéder aux ensembles de données, les clés API pour protéger votre instance Meilisearch, et d’autres informations.
    La page de présentation du projet book-app.
    La page de présentation du projet book-app.

    Il existe trois clés API, chacune représentant un niveau d’autorisation différent:

    • Clé principale – Cette clé déverrouille toutes les routes et est la seule à avoir accès aux points de terminaison pour la création et la suppression des clés API. N’utilisez la clé principale que pour gérer les clés API à partir d’un environnement protégé.
    • Clé API de recherche par défaut – Cette clé ne donne accès qu’à l’itinéraire de recherche. Vous pouvez l’utiliser dans le code côté client.
    • Clé API Admin par défaut – Cette clé permet d’accéder à toutes les routes API, à l’exception de /keys, qui permet de créer et de supprimer des clés API. Vous ne pouvez utiliser cette clé que dans un environnement protégé.

Comment indexer des données avec Meilisearch

Les index sont les composants de base qui stockent et organisent les données consultables. Ils agissent comme des conteneurs pour les documents – des objets contenant un ou plusieurs champs.

Chaque index de Meilisearch est indépendant et personnalisable, ce qui permet de définir des règles de classement et des options de filtrage individualisées.

Comment créer un index et ajouter des documents

  1. Dans la barre de navigation, cliquez sur l’onglet Index de votre projet.
  2. Cliquez sur Créer un index. Saisissez ensuite un nom d’index (par exemple, livres) et cliquez sur Créer un index.
  3. Sélectionnez la manière dont vous souhaitez importer vos documents. Pour ce guide, importez un fichier JSON, qui comprend 13 entrées de livres provenant de l’API Google Book.
  4. Cliquez sur Téléversement de fichier et téléchargez le fichier JSON, puis cliquez sur Importer des documents.

Comment mettre à jour et supprimer des documents

Meilisearch Cloud n’inclut pas actuellement de moyen de modifier ou de supprimer des documents, mais vous pouvez utiliser les routes de l’API REST ou le SDK. Le code ci-dessous montre comment mettre à jour ou supprimer des documents à l’aide des points d’extrémité de l’API REST. Ce tutoriel utilise cURL pour travailler avec les routes, mais vous pouvez également utiliser une plateforme API comme Postman.

  1. Pour mettre à jour des documents, envoyez une requête PUT sur la route suivante :
    /indexes/{index_uid}/documents

    Le index_uid ci-dessus est le nom de l’index de votre projet :

    Nom de l'index en surbrillance.
    Nom de l’index en surbrillance.

  2. Avec cette route, vous pouvez ajouter ou mettre à jour une liste de documents s’ils existent déjà. Pour mettre à jour un document, vous devez attacher sa clé primaire. L’ancien document subit une mise à jour partielle basée sur les champs du nouveau document. Vous trouverez ci-dessous un exemple de mise à jour du titre d’un document dans l’index du livre, de JavaScript for Kids à JavaScript Coding for Kids, ainsi que l’ajout d’un champ publisher :
    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. Remplacez <your-project-url> et <your-admin-api-key> par les valeurs correspondantes dans votre page de présentation du projet:
    "taskUid": 26, "indexUid": "books", "status": "enqueued", "type": "documentAdditionOrUpdate", "equeuedAt": "2023-05-26T07:52:24.127920065Z"
  4. Pour supprimer des documents, Meilisearch propose trois itinéraires (points de terminaison,) :
    /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

    Vous pouvez obtenir le site document_id à partir des données originales du fichier books.json après avoir récupéré le document dans MeiliSearch Cloud ou dans votre base de données.

Vous trouverez ci-dessous un exemple de suppression du livre que vous avez mis à jour ci-dessus :

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

Après avoir envoyé la demande, votre réponse devrait ressembler à ceci :

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

Comment ajouter MeiliSearch à un service web

  1. Commencez par cloner le projet starter depuis GitHub en exécutant les commandes suivantes dans votre terminal :
    git clone https://github.com/Tammibriggs/meilisearch-app.git
    cd meilisearch​-app
    npm install

    Si vous vérifiez le fichier package.json, vous devriez voir la commande start. Exécutez npm start pour lancer le projet Node.js sur le port3000 de localhost. Lorsque vous entrez http://localhost:3000/ dans votre navigateur, vous devriez voir ce qui suit :

    Meilisearch demo starter app.
    Meilisearch demo starter app.

  2. Une fois que l’application est opérationnelle, vous pouvez y ajouter Meilisearch afin que le formulaire de recherche renvoie les résultats de Meilisearch lorsqu’il est soumis. Pour ce faire, installez Meilisearch en exécutant la commande suivante dans le terminal :
    npm install meilisearch
  3. Vous devez également installer le paquet dotenv npm pour charger les informations d’identification sensibles à partir d’un fichier .env . Exécutez la commande suivante dans le terminal :
    npm install dotenv
  4. Créez un fichier . env dans le dossier racine du projet et ajoutez les éléments suivants :
    YOUR_PROJECT_URL= '<your-project-url>'
    YOUR_SEARCH_API_KEY= '<your-admin-api-key>'

    Veillez à remplacer <your-project-url> et <your-admin-api-key> par les valeurs correspondantes.

  5. Ensuite, importez meilisearch et le paquet dotenv dans le fichier server.js et configurez dotenv:
    import {MeiliSearch} from 'meilisearch'
    import dotenv from 'dotenv';
    dotenv.config();
  6. Ensuite, initialisez Meilisearch pour pouvoir commencer à travailler sur votre projet books-app. Naviguez jusqu’au fichier server.js et ajoutez le code suivant après la définition de la variable searchValue:
    const client = new MeiliSearch({ host: process.env.YOUR_PROJECT_URL, apiKey: process.env.YOUR_SEARCH_API_KEY })
  7. Une fonctionnalité importante est la recherche dans l’index de vos livres dans Meilisearch en utilisant la valeur de recherche attachée à l’URL lors de la soumission du formulaire. Pour activer cette fonctionnalité, ajoutez le code suivant après la définition de la variable client:
    const index = client.index('books')  
    const searchResults = !!searchValue && await index.search(searchValue)

    Ce code crée une référence à l’index du livre. Ensuite, il utilise la méthode search() pour rechercher les documents correspondant à la valeur de recherche dans l’index du livre si vous définissez searchValue.

  8. Enfin, pour afficher les résultats de la recherche, modifiez la méthode render() comme suit :
    res.render('index', {
        books: searchResults ? searchResults.hits : [],
        searchValue
    })

    Vous êtes maintenant prêt à lancer la recherche dans l’index du livre :

    Recherche dans l'index books à l'aide du formulaire de recherche
    Recherche dans l’index « books » à l’aide du formulaire de recherche

  9. Après avoir ajouté les codes ci-dessus, votre fichier server.js devrait ressembler à ceci :
    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}`);
    });

Vous pouvez accéder au code complet de ce tutoriel sur GitHub.

Résumé

Meilisearch est une excellente solution de moteur de recherche qui améliore les capacités de recherche et l’expérience utilisateur d’un site web. Sa vitesse exceptionnelle, son algorithme de classement axé sur la pertinence et son processus d’intégration transparent en font un outil inestimable si vous cherchez à optimiser la fonctionnalité de recherche de votre site web.

Le service d’hébergement d’applications de Kinsta augmente de manière transparente les performances des applications alimentées par Meilisearch. Grâce à une infrastructure robuste et à des environnements de serveurs rationalisés, Kinsta garantit une fonctionnalité de recherche rapide, améliorant ainsi l’expérience de l’utilisateur. L’évolutivité de la plateforme répond aux exigences de Meilisearch, garantissant des opérations de recherche fiables et efficaces.

Sur quel moteur de recherche vous appuyez-vous pour vos projets ? Faites-le nous savoir dans la section des commentaires !

Jeremy Holcombe Kinsta

Rédacteur en chef du contenu et du marketing chez Kinsta, développeur web WordPress et rédacteur de contenu. En dehors de WordPress, j'aime la plage, le golf et le cinéma. J'ai aussi des problèmes avec les personnes de grande taille ;).