Installation Meilisearch · 22 min read · Oct 26, 2025

Comment installer et configurer Meilisearch sur Debian 12

Meilisearch est un moteur de recherche open-source écrit en langage Rust. Étant écrit en Rust, il nécessite moins de ressources pour fonctionner et peut être exécuté à l’aide d’un seul binaire en ligne de commande. Le processus d’installation est plus simple que celui des moteurs de recherche alternatifs et nécessite moins d’étapes. Ses fonctionnalités incluent la correspondance floue et l’indexation sans schéma. Il est livré avec une interface web à des fins de démonstration. Il peut être intégré dans diverses applications web via différentes bibliothèques disponibles dans plusieurs langages comme JavaScript, Python, PHP, Ruby, etc.

Dans ce tutoriel, vous apprendrez comment installer Meilisearch en production sur un serveur Debian 12 et l’utiliser pour effectuer plusieurs recherches simples.

Prérequis

  • Un serveur exécutant Debian 12 avec un minimum de 2 Go de RAM.

  • Un utilisateur non-root avec des privilèges sudo.

  • Le pare-feu uncomplicated (UFW) est activé et en cours d’exécution.

  • Un nom de domaine entièrement qualifié (FQDN) comme meilisearch.example.com pointant vers votre serveur. Cela est bénéfique si vous souhaitez servir Meilisearch via SSL en utilisant un serveur proxy.

  • Tout est à jour. $ sudo apt update && sudo apt upgrade

  • Quelques paquets essentiels sont requis pour le tutoriel. Certains d’entre eux peuvent déjà être installés sur votre serveur. $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

Étape 1 - Configurer le pare-feu

La première étape avant d’installer des paquets est de configurer le pare-feu pour autoriser les connexions HTTP et HTTPS.

Vérifiez l’état du pare-feu.

$ sudo ufw status

Vous devriez voir quelque chose comme ce qui suit.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Autorisez les ports HTTP et HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Vérifiez à nouveau l’état pour confirmer.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Étape 2 - Installer Meilisearch

Il existe plusieurs façons d’installer Meilisearch. Nous allons utiliser la méthode la plus simple qui consiste à copier le fichier binaire sur notre serveur.

Installez Meilisearch.

$ curl -L https://install.meilisearch.com | sh

Rendez le binaire exécutable.

$ chmod +x meilisearch

Pour l’instant, le binaire n’est utilisable que depuis le répertoire où vous l’avez téléchargé. Pour pouvoir l’utiliser de n’importe où, déplacez le fichier binaire dans le répertoire /usr/local/bin.

$ sudo mv ./meilisearch /usr/local/bin/

Confirmez que Meilisearch est installé et fonctionne correctement.

$ meilisearch --version
meilisearch 1.7.6

Étape 3 - Créer un utilisateur système pour Meilisearch

Exécuter Meilisearch en tant que root peut créer des problèmes de sécurité. Pour les éviter, créez un utilisateur système pour exécuter Meilisearch.

$ sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch

Étape 4 - Configurer Meilisearch

Avant de continuer, nous devons créer une clé maître que Meilisearch utilise pour le processus d’authentification. Vous pouvez utiliser l’utilitaire en ligne de commande OpenSSL pour la créer. Exécutez la commande suivante pour créer une clé maître de 30 caractères. Vous pouvez choisir n’importe quelle longueur pour votre clé maître. Plus elle est longue, mieux c’est.

$ openssl rand -hex 30

Vous devriez recevoir une sortie similaire avec une clé de 30 caractères. Copiez cette valeur car nous en aurons besoin dans les étapes à venir.

65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611

Récupérez le dernier fichier de configuration du dépôt GitHub de Meilisearch et copiez-le dans le répertoire /etc.

$ sudo sh -c 'curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml'

Ouvrez-le pour l’éditer.

$ sudo nano /etc/meilisearch.toml

Mettez à jour les lignes suivantes dans le fichier pour configurer le chemin de la base de données, le chemin de dump, le répertoire de snapshot et l’environnement de travail, et ajoutez la clé maître que vous avez générée précédemment pour l’authentification.

Les valeurs mises à jour dans le fichier de configuration devraient ressembler à ce qui suit.

env = "production"
master_key = "173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be"
db_path = "/var/lib/meilisearch/data"
dump_dir = "/var/lib/meilisearch/dumps"
snapshot_dir = "/var/lib/meilisearch/snapshots"

Meilisearch collecte des données régulières de manière anonyme. Vous devriez le désactiver en utilisant l’option suivante. Décommentez-la pour désactiver la télémétrie de Meilisearch.

no_analytics = true

Par défaut, Meilisearch utilise au maximum les deux tiers de la RAM disponible sur votre système. Vous pouvez contrôler cela en décommentant et en définissant la variable suivante. Vous pouvez également spécifier la valeur comme le nombre exact d’octets pour être précis et exact.

max_indexing_memory = "1 GiB"

Meilisearch utilise au maximum la moitié des cœurs CPU disponibles. Vous pouvez cependant contrôler cette valeur en décommentant et en définissant la variable suivante.

max_indexing_threads = 1

Définir cette valeur à plus que le nombre de cœurs CPU de la machine indiquera à Meilisearch d’utiliser le maximum de cœurs disponibles.

Une autre configuration que vous devez connaître est la quantité de charge utile maximale que Meilisearch peut accepter. La valeur par défaut est fixée à 100 Mo. Vous pouvez la changer en configurant la variable suivante.

http_payload_size_limit = "100 MB"

Une fois terminé, enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Étape 5 - Créer des répertoires et donner des permissions

Créez les répertoires où Meilisearch stockera sa base de données, ses dumps de base de données et ses snapshots.

$ sudo mkdir /var/lib/meilisearch/dumps -p
$ sudo mkdir /var/lib/meilisearch/snapshots

Définissez le propriétaire et le groupe de ces répertoires sur l’utilisateur système que nous avons créé pour Meilisearch.

$ sudo chown -R meilisearch:meilisearch /var/lib/meilisearch

Définissez le propriétaire et le groupe sur le fichier binaire de Meilisearch.

$ sudo chown meilisearch:meilisearch /usr/local/bin/meilisearch

Définissez les permissions appropriées sur le répertoire.

$ sudo chmod 750 /var/lib/meilisearch

Étape 6 - Exécuter Meilisearch en tant que service

Pour rendre Meilisearch disponible à tout moment pour les requêtes de recherche, il est préférable de l’exécuter en tant que service système. Pour cela, nous devons créer un fichier de service pour cela.

Créez et ouvrez /etc/systemd/system/meilisearch.service pour l’éditer.

$ sudo nano /etc/systemd/system/meilisearch.service

Collez le code suivant dedans.

[Unit]
Description=Meilisearch
After=systemd-user-sessions.service

[Service]
Type=simple
WorkingDirectory=/var/lib/meilisearch
ExecStart=/usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml
User=meilisearch
Group=meilisearch

[Install]
WantedBy=multi-user.target

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Activez le service.

$ sudo systemctl enable meilisearch

Démarrez le service Meilisearch.

$ sudo systemctl start meilisearch 

Vérifiez l’état du service

$ sudo systemctl status meilisearch

Vous devriez recevoir une sortie similaire.

? meilisearch.service - Meilisearch
     Loaded: loaded (/etc/systemd/system/meilisearch.service; enabled; preset: enabled)
     Active: active (running) since Fri 2024-05-03 03:02:53 UTC; 5s ago
   Main PID: 1008 (meilisearch)
      Tasks: 6 (limit: 2251)
     Memory: 23.0M
        CPU: 10ms
     CGroup: /system.slice/meilisearch.service
             ??1008 /usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml

May 03 03:02:53 meilisearch meilisearch[1008]: Commit date:                "unknown"
May 03 03:02:53 meilisearch meilisearch[1008]: Package version:        "1.7.6"
May 03 03:02:53 meilisearch meilisearch[1008]: Anonymous telemetry:        "Disabled"
May 03 03:02:53 meilisearch meilisearch[1008]: A master key has been set. Requests to Meilisearch won't be authorized unless you provide an authentication key.
May 03 03:02:53 meilisearch meilisearch[1008]: Check out Meilisearch Cloud!        https://www.meilisearch.com/cloud?utm_campaign=oss&utm_source=engine&utm_medium=cli
May 03 03:02:53 meilisearch meilisearch[1008]: Documentation:                        https://www.meilisearch.com/docs
May 03 03:02:53 meilisearch meilisearch[1008]: Source code:                        https://github.com/meilisearch/meilisearch
May 03 03:02:53 meilisearch meilisearch[1008]: Discord:                        https://discord.meilisearch.com
May 03 03:02:53 meilisearch meilisearch[1008]: 2024-05-03T03:02:53.891366Z  INFO actix_server::builder: starting 2 workers
May 03 03:02:53 meilisearch meilisearch[1008]: 2024-05-03T03:02:53.891396Z  INFO actix_server::server: Actix runtime found; starting in Actix runtime

Meilisearch est installé et en cours d’exécution. Exposons le service à l’extérieur en utilisant le serveur Nginx comme proxy inverse et utilisons Let’s Encrypt pour le servir via SSL.

Étape 7 - Installer Nginx

Debian 12 est livré avec une version plus ancienne de Nginx. Vous devez télécharger le dépôt officiel de Nginx pour installer la dernière version.

Importez la clé de signature de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Ajoutez le dépôt pour la version principale de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Mettez à jour les dépôts du système.

$ sudo apt update

Installez Nginx.

$ sudo apt install nginx

Vérifiez l’installation. Sur les systèmes Debian, la commande suivante ne fonctionnera qu’avec sudo.

$ sudo nginx -v
nginx version: nginx/1.25.5

Démarrez le serveur Nginx.

$ sudo systemctl start nginx

Vérifiez l’état du service.

$ sudo systemctl status nginx
? nginx.service - nginx - serveur web haute performance
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Fri 2024-05-03 03:04:02 UTC; 5s ago
       Docs: https://nginx.org/en/docs/
    Process: 1699 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 1700 (nginx)
      Tasks: 3 (limit: 2251)
     Memory: 2.9M
        CPU: 7ms
     CGroup: /system.slice/nginx.service
             ??1700 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??1701 "nginx: worker process"
             ??1702 "nginx: worker process"

May 03 03:04:02 meilisearch systemd[1]: Starting nginx.service - nginx - serveur web haute performance...
May 03 03:04:02 meilisearch systemd[1]: Started nginx.service - nginx - serveur web haute performance.

Étape 8 - Installer SSL

Nous devons installer Certbot pour générer le certificat SSL. Vous pouvez soit installer Certbot en utilisant le dépôt de Debian, soit obtenir la dernière version en utilisant l’outil Snapd. Nous allons utiliser la version Snapd.

Debian 12 ne vient pas avec Snapd installé. Installez le paquet Snapd.

$ sudo apt install -y snapd

Exécutez les commandes suivantes pour vous assurer que votre version de Snapd est à jour.

$ sudo snap install core && sudo snap refresh core

Installez Certbot.

$ sudo snap install --classic certbot

Utilisez la commande suivante pour vous assurer que la commande Certbot peut être exécutée en créant un lien symbolique vers le répertoire /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Vérifiez si Certbot fonctionne correctement.

$ certbot --version
certbot 2.10.0

Exécutez la commande suivante pour générer un certificat SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d meilisearch.example.com

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/meilisearch.example.com sur votre serveur.

Générez un certificat de groupe Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Vérifiez la liste des minuteries systemd. Certbot installe et démarre automatiquement une minuterie à des fins de renouvellement.

$ sudo systemctl list-timers

Vous trouverez snap.certbot.renew.service comme l’un des services programmés pour s’exécuter.

NEXT                        LEFT           LAST                        PASSED    UNIT                        ACTIVATES                   ---------------------------------------------------------------------------------------------------------------------------------------  
Fri 2024-05-03 17:17:15 UTC 14h left      Fri 2024-05-03 02:54:42 UTC 11min ago apt-daily.timer              apt-daily.service
Fri 2024-05-03 06:42:20 UTC 3h 36min left Fri 2024-05-03 02:54:42 UTC 11min ago apt-daily-upgrade.timer      apt-daily-upgrade.service
Fri 2024-05-03 10:39:00 UTC 7h left       -                           -         snap.certbot.renew.timer     snap.certbot.renew.service

Faites un essai à sec du processus pour vérifier si le renouvellement SSL fonctionne correctement.

$ sudo certbot renew --dry-run

Si vous ne voyez pas d’erreurs, vous êtes prêt. Votre certificat se renouvellera automatiquement.

Étape 9 - Configurer Nginx

Ouvrez le fichier /etc/nginx/nginx.conf pour l’éditer.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Créez et ouvrez le fichier /etc/nginx/conf.d/meilisearch.conf pour l’éditer.

$ sudo nano /etc/nginx/conf.d/meilisearch.conf

Collez le code suivant dedans. Remplacez meilisearch.example.com par votre nom de domaine.

server {

    listen 443 ssl;
    listen [::]:443 ssl;

    http2 on;
    http3 on;
    quic_retry on;

    server_name meilisearch.example.com;

    access_log  /var/log/nginx/meilisearch.access.log;
    error_log   /var/log/nginx/meilisearch.error.log;

    ssl_certificate      /etc/letsencrypt/live/meilisearch.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/meilisearch.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/meilisearch.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_early_data on;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://localhost:7700;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  meilisearch.example.com;
    return 301   https://$host$request_uri;
}

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Vérifiez votre configuration Nginx.

$ sudo nginx -t

Redémarrez le serveur Nginx.

$ sudo systemctl restart nginx

Meilisearch fonctionne maintenant et est disponible via l’URL https://meilisearch.example.com. Vous devriez voir le texte suivant lorsque vous ouvrez l’URL.

{"status":"Meilisearch is running"}

Cette URL ne peut être utilisée que pour rechercher via la ligne de commande. Si vous souhaitez accéder à Meilisearch via une interface, vous devrez l’intégrer à un autre CMS ou logiciel pour le faire fonctionner, ce qui est en dehors de ce tutoriel. Meilisearch est livré avec une interface frontend intégrée, mais cela ne fonctionne que si vous l’utilisez à des fins de développement. Vous pouvez changer l’environnement de l’instance en development dans le fichier de configuration et redémarrer Meilisearch pour activer l’interface. Cela devrait ressembler à ce qui suit.

Tableau de bord de recherche de développement Meilisearch

Pour un environnement de production, vous devrez intégrer Meilisearch à un autre CMS.

Commençons à l’utiliser pour indexer des documents et l’utiliser pour la recherche.

Étape 10 - Chargement de données d’exemple dans Meilisearch

Le projet Meilisearch fournit un fichier JSON d’exemple formaté avec des données extraites de The Movie Database (TMDB). Téléchargez le fichier.

$ wget https://www.meilisearch.com/movies.json

Vous pouvez exécuter la commande tail pour voir une partie des données. Cela devrait ressembler à ce qui suit.

$ tail -n 3 movies.json

{"id":460070,"title":"J.T. LeRoy","overview":"Une jeune femme nommée Savannah Knoop passe six ans à prétendre être un écrivain transgenre nommé JT Leroy, la persona littéraire inventée de sa belle-sœur.","genres":["Drama"],"poster":"https://image.tmdb.org/t/p/w500/43ffZhMCWQhzMneGP4kDWoPV48X.jpg","release_date":1556236800},
{"id":460071,"title":"Lizzie","overview":"Massachusetts, 1892. Une femme non mariée de 32 ans et un paria social, Lizzie vit une vie claustrophobe sous le contrôle froid et dominateur de son père. Lorsque Bridget Sullivan, une jeune femme de ménage, vient travailler pour la famille, Lizzie trouve un esprit sympathique et de cœur, et une intimité secrète se transforme rapidement en un plan maléfique.","genres":["Crime","Drama","Thriller"],"poster":"https://image.tmdb.org/t/p/w500/z2iuBcwznen3kC9z4LeOzBSz1BB.jpg","release_date":1536883200}
]

Comme vous pouvez le voir, chaque entrée individuelle contient un id, un titre, un lien vers l’image de l’affiche, un aperçu du film, une date de sortie et une liste de genres. La date de sortie est au format EPOCH.

Chargeons les données dans Meilisearch en utilisant curl via une requête HTTP POST.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/documents' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' \
  --data-binary @movies.json

Passons en revue les arguments de la commande :

  • -X POST - spécifie que nous effectuons une requête HTTP POST et envoyons des données.
  • -H Content-Type - spécifie le type de contenu du fichier.
  • -H Authorization: Bearer - est pour passer la clé maître avec vos requêtes.
  • –data-binary - spécifie le fichier à inclure.

Ici, nous créons un nouvel index Meilisearch à l’emplacement /indexes/movies/documents. Vous devriez recevoir une sortie similaire vous indiquant que la requête a été mise en file d’attente. Meilisearch traite toutes les requêtes de manière asynchrone.

{"taskUid":0,"indexUid":"movies","status":"enqueued","type":"documentAdditionOrUpdate","enqueuedAt":"2024-05-03T03:12:55.599798591Z"}

Vous pouvez également exécuter la commande ci-dessus en remplaçant l’URL http://localhost:7700 par https://meilisearch.example.com et cela fonctionnera de la même manière. Vous pouvez le faire pour toutes les commandes de ce tutoriel, mais pour des raisons de simplicité, nous allons nous en tenir à l’URL http://localhost:7700.

Exécutez la commande suivante pour vérifier l’état de la requête.

$ curl -X GET 'http://localhost:7700/indexes/movies/tasks/0'

Vous devriez recevoir une sortie similaire.

{"uid":0,"indexUid":"movies","status":"succeeded","type":"documentAddition","details":{"receivedDocuments":19547,"indexedDocuments":19546},"duration":"PT29.866920116S","enqueuedAt":"2024-05-03T03:13:18.233702815Z","startedAt":"2024-05-03T03:19:45.370142371Z","finishedAt":"2024-05-03T03:20:05.108395540Z"}

Cela nous indique que la tâche a été complétée et que la base de données de films est maintenant entièrement indexée et prête à être utilisée.

Étape 11 - Utiliser des clés limitées pour la recherche

Il y a un outil dont nous avons besoin qui aide à formater le JSON en ligne de commande de manière lisible. Il s’appelle jq. Exécutez la commande suivante pour l’installer.

$ sudo apt install -y jq

Bien que nous ayons ajouté la clé maître au fichier de configuration, vous devrez la passer à nouveau avec chaque requête. Avant de continuer, nous avons besoin d’une clé plus restreinte qui permettra le mode lecture seule. Meiliserch crée par défaut une clé en lecture seule. Récupérons-la.

$ curl -X GET 'http://localhost:7700/keys' -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' | jq

Vous devriez voir une sortie similaire.

{
  "results": [
    {
      "name": "Default Search API Key",
      "description": "Utilisez-la pour rechercher depuis le frontend",
      "key": "591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a",
      "uid": "d004073b-b813-4016-82cb-7995df5149f6",
      "actions": [
        "search"
      ],
      "indexes": [
        "*"
      ],
      "expiresAt": null,
      "createdAt": "2024-05-03T03:02:53.887256411Z",
      "updatedAt": "2024-05-03T03:02:53.887256411Z"
    },
    {
      "name": "Default Admin API Key",
      "description": "Utilisez-la pour tout ce qui n'est pas une opération de recherche. Attention ! Ne l'exposez pas sur un frontend public",
      "key": "0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196",
      "uid": "b4fc2f96-4347-4750-9ba6-2da73c26e2bd",
      "actions": [
        "*"
      ],
      "indexes": [
        "*"
      ],
      "expiresAt": null,
      "createdAt": "2024-05-03T03:02:53.886580786Z",
      "updatedAt": "2024-05-03T03:02:53.886580786Z"
    }
  ],
  "offset": 0,
  "limit": 20,
  "total": 2
}

Désormais, nous utiliserons la clé API de recherche par défaut pour effectuer des recherches.

Étape 12 - Recherche dans les données d’exemple

Il existe deux façons de rechercher en utilisant Meilisearch, vous pouvez soit utiliser l’API via la ligne de commande, soit utiliser l’interface web. L’interface web est assez limitée et ne fonctionne que si vous utilisez Meilisearch dans un environnement de développement, et l’API est la méthode recommandée pour utiliser Meilisearch. Comme nous avons configuré notre recherche pour la production, nous n’utiliserons que la méthode de ligne de commande.

Rechercher via l’API est comme télécharger des données via une requête HTTP POST. Vous faites une requête à l’endpoint /search de l’API. Par exemple, recherchons des films contenant le mot saint.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
  --data-binary '{ "q": "saint" }' | jq

Vous devriez recevoir une sortie formatée en JSON comme suit.

{
  "hits": [
    {
      "id": 25248,
      "title": "Saint Ralph",
      "overview": "Cette comédie/drame canadienne, située à Hamilton, Ontario en 1954, est une histoire douce et - parfois - loufoque qui devient de plus en plus poignante au fil des minutes. C'est le récit fictif d'un élève de 9e année, Ralph (Adam Butcher), qui vit secrètement seul pendant que sa mère veuve et hospitalisée reste plongée dans le coma. Fréquemment en difficulté avec le Père Fitzpatrick (Gordon Pinsent), le principal de son école catholique pour garçons, Ralph est considéré comme une sorte de blague parmi ses pairs jusqu'à ce qu'il décide de réaliser un miracle qui pourrait sauver sa mère, c'est-à-dire gagner le marathon de Boston. Entraîné par un jeune prêtre et ancien coureur, le Père Hibbert (Campbell Scott), dont le cynisme a été soulevé par l'espoir pur du garçon, Ralph s'applique à sa mission peu probable, repoussant les détracteurs et obtenant de l'aide le long d'un chemin très difficile de divers alliés et amis.",
      "genres": [
        "Comedy",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "En 1815, un moine, Tomas Alcala, libère sans le vouloir deux succubes féminins, Munkar et Nakir, sur un 21e siècle sans méfiance. Il est choisi par Dieu pour voyager à travers les siècles et arrêter le déchaînement des démons.",
      "genres": [
        "Fantasy",
        "Horror",
        "Science Fiction",
        "TV Movie"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
      "release_date": 1035590400
    },
    {
      "id": 27023,
      "title": "Saint John of Las Vegas",
      "overview": "Un ancien joueur est attiré à nouveau dans le jeu par un enquêteur vétéran des fraudes d'assurance.",
      "genres": [
        "Comedy"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/kN4Vur1SccouDR0k3tmJXJHdrXw.jpg",
      "release_date": 1264723200
    },
  ...

Pour tester la fonctionnalité de correspondance floue de Meilisearch dans laquelle des mots similaires peuvent être utilisés pour trouver la recherche exacte. Cela est utile en cas de faute de frappe et vous attendez toujours le bon résultat.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
  --data-binary '{ "q": "seint" }' | jq

Ici, nous avons mal orthographié saint en seint et Meilisearch renverra tout de même des entrées contenant le mot saint.

{
  "hits": [
    {
      "id": 10105,
      "title": "Saints and Soldiers",
      "overview": "Cinq soldats américains combattant en Europe pendant la Seconde Guerre mondiale luttent pour retourner sur le territoire allié après avoir été séparés des forces américaines lors du tragique Massacre de Malmedy.",
      "genres": [
        "War",
        "Drama",
        "Action",
        "Adventure",
        "History"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/efhqxap8fLi4v1GEXVvakey0z3S.jpg",
      "release_date": 1063238400
    },
    {
      "id": 25248,
      "title": "Saint Ralph",
      "overview": "Cette comédie/drame canadienne, située à Hamilton, Ontario en 1954, est une histoire douce et - parfois - loufoque qui devient de plus en plus poignante au fil des minutes. C'est le récit fictif d'un élève de 9e année, Ralph (Adam Butcher), qui vit secrètement seul pendant que sa mère veuve et hospitalisée reste plongée dans le coma. Fréquemment en difficulté avec le Père Fitzpatrick (Gordon Pinsent), le principal de son école catholique pour garçons, Ralph est considéré comme une sorte de blague parmi ses pairs jusqu'à ce qu'il décide de réaliser un miracle qui pourrait sauver sa mère, c'est-à-dire gagner le marathon de Boston. Entraîné par un jeune prêtre et ancien coureur, le Père Hibbert (Campbell Scott), dont le cynisme a été soulevé par l'espoir pur du garçon, Ralph s'applique à sa mission peu probable, repoussant les détracteurs et obtenant de l'aide le long d'un chemin très difficile de divers alliés et amis.",
      "genres": [
        "Comedy",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "En 1815, un moine, Tomas Alcala, libère sans le vouloir deux succubes féminins, Munkar et Nakir, sur un 21e siècle sans méfiance. Il est choisi par Dieu pour voyager à travers les siècles et arrêter le déchaînement des démons.",
      "genres": [
        "Fantasy",
        "Horror",
        "Science Fiction",
        "TV Movie"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
      "release_date": 1035590400
    },
 …

Étape 13 - Ajustement du classement de recherche et filtrage des données

Les moteurs de recherche peuvent renvoyer de meilleurs résultats s’ils savent comment classer ou donner de l’importance à certains résultats en fonction de l’importance d’un champ particulier. Meilisearch a un ensemble de règles de biais par défaut que vous pouvez configurer pour améliorer vos résultats de recherche.

Mais d’abord, nous devons vérifier les règles de classement définies par Meilisearch.

$ curl -X GET 'http://localhost:7700/indexes/movies/settings/ranking-rules' -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196'

Vous obtiendrez la sortie suivante.

["words","typo","proximity","attribute","sort","exactness"]
  1. words - les résultats sont triés par le nombre décroissant de termes correspondants.
  2. typo - les résultats sont triés par le nombre croissant de fautes de frappe. Moins de requêtes de fautes de frappe sont renvoyées en haut.
  3. proximity - les résultats sont triés par la distance croissante entre les termes correspondants.
  4. attribute - les résultats sont triés par ordre de classement des attributs.
  5. sort - les résultats sont triés selon les paramètres décidés au moment de la requête.
  6. exactness - les résultats sont triés par la similarité des mots correspondants avec les mots de la requête.

Vous pouvez en savoir plus sur la pertinence dans la documentation officielle de Meilisearch.

Émettez la commande suivante pour changer l’ordre des règles de biais.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/settings/ranking-rules' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '[
      "words",
      "typo",
      "proximity",
      "release_date:asc",
      "attribute",
      "sort",
      "exactness",
      "rank:desc"
  ]'

Maintenant, filtrons les résultats de recherche. Tout d’abord, demandons à Meilisearch d’utiliser uniquement certains attributs pour effectuer la recherche et de laisser de côté les attributs sans signification comme id.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/settings' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '{
      "searchableAttributes": [
          "title",
          "overview",
          "genres"
      ]
  }'

Ici, nous effectuons une recherche en utilisant uniquement les attributs title, overview et genres qui donneront de meilleurs résultats.

Ensuite, nous pouvons formater nos résultats de recherche pour n’afficher que certains attributs tout en cachant les autres.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/settings/displayedAttributes' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '[
          "title",
          "overview",
          "genres",
          "release_date"
      ]'

Cela n’affichera que les attributs que nous avons inclus dans notre requête avec les résultats.

Enfin, vous pouvez également fournir une liste d’attributs à filtrer ou à trier. Cela inclut à la fois le filtrage quantitatif utilisant des opérateurs mathématiques comme < ou > et le filtrage par inclusion dans un ensemble spécifié. Cela s’appelle également une recherche facettée.

$ curl \
  -X PATCH 'http://localhost:7700/indexes/movies/settings' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '{
      "filterableAttributes": [
          "genres",
          "release_date"
      ],
      "sortableAttributes": [
          "release_date"
      ]
  }'

Nous pouvons combiner toutes ces règles pour effectuer une requête comme suit.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
  --data-binary '{ "q": "house", "sort": ["release_date:desc"], "filter": "genres = Horror" }' | jq

Ici, nous recherchons tous les films du genre Horreur, du plus récent au plus ancien, contenant le mot house dans le titre. Vous devriez recevoir une sortie similaire.

{
  "hits": [
    {
      "id": 440559,
      "title": "Housesitters",
      "overview": "Angie et Izzy obtiennent un travail de garde de maison qui semble trop beau pour être vrai. Des mésaventures surnaturelles macabres s'ensuivent.",
      "genres": [
        "Comedy",
        "Horror"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/9Gnu0PBdYzyd7ZkO74XK0xCH0iY.jpg",
      "release_date": 1524873600
    },
    {
      "id": 449550,
      "title": "Housewife",
      "overview": "Housewife est centré sur Holly dont la mère a tué sa sœur et son père quand elle avait sept ans. 20 ans plus tard, perdant lentement son emprise sur la différence entre la réalité et les cauchemars, elle rencontre un médium célèbre qui prétend qu'il est destiné à l'aider.",
      "genres": [
        "Horror"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ohHxS7PIRQb9O6KTrDtqYshYGts.jpg",
      "release_date": 1504828800
    },
    {
      "id": 392703,
      "title": "House of Darkness",
      "overview": "Inspiré par des événements réels, le thriller surnaturel 'House of Darkness' raconte le cas mystérieux d'une famille de San Francisco qui prétendait qu'une force sombre était responsable des événements tragiques qui se sont déroulés. Essayant de sauver leur mariage en difficulté, Kelly (Sara Fletcher, 'Adulthood'), son mari Brian (Gunner Wright, 'J. Edgar') et leur fille Sarah (Mykayla Sohn, 'The Chosen') déménagent dans une ferme rurale à la recherche de sérénité. À leur insu, presque chaque famille ayant vécu dans la maison a subi une forme de tragédie, remontant à près de 100 ans. Peu après leur arrivée, Kelly commence à sentir que le comportement de son mari devient de plus en plus étrange et violent. Kelly découvre également que les voix qu'elle entend résonnant dans les couloirs ne viennent pas de sa fille. Kelly et sa famille seront-elles les prochaines victimes des forces sombres dans la maison ?",
      "genres": [
        "Horror",
        "Thriller",
        "TV Movie"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ueQM9RsT0HLL2RuuiLmD07j8lKB.jpg",
      "release_date": 1460851200
    },
…

Étape 14 - Conclusion

Vous avez terminé l’installation et la configuration de Meilisearch dans un environnement de production sur un serveur Debian 12. Vous avez également effectué quelques recherches de base et appris comment améliorer les résultats de recherche grâce au classement et au filtrage. Si vous avez des questions, postez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.