Meilisearch

Démo de recherche de films : barre de recherche vide au-dessus d'une grille d'affiches, 13 277 résultats en 5 ms.

Résultats classés à chaque lettre tapée, fautes comprises

Meilisearch est un moteur de recherche écrit en Rust, taillé pour la barre de recherche d'un site ou d'une application. Les documents JSON arrivent par l'API REST et s'indexent de façon asynchrone : une recherche lancée juste après l'envoi peut revenir vide. Dans l'exemple du README, wondre woman trouve Wonder Woman. Le moteur fait du plein texte, du sémantique et de l'hybride ; pour la recherche à la frappe, le README annonce des résultats en moins de 50 millisecondes.

Fautes de frappe, facettes et vecteurs gérés côté moteur

  • Tolérance aux fautes active d'office : une faute admise dès cinq caractères, deux dès neuf, et une faute sur la première lettre compte double.
  • Filtres, facettes, tri et géorecherche : trier par prix ou par date, filtrer selon des coordonnées géographiques, monter une navigation à facettes.
  • Embeddings calculés par le moteur : une fois un embedder déclaré (OpenAI, Cohere, Mistral, un modèle Hugging Face local...), Meilisearch vectorise chaque document par lots et ne recalcule que ce qui change. semanticRatio, à 0,5 par défaut, dose plein texte et sémantique.
  • Multi-tenant par jetons : clés d'API aux permissions fines et tenant tokens, pour servir à chaque client d'un SaaS ses propres résultats.
  • Langues : traitement optimisé du chinois, du japonais, de l'hébreu et des langues à alphabet latin.
  • Accès pour les agents : serveur MCP natif sur /mcp, encore expérimental, et vector store LangChain.

Réplication sous contrat Enterprise et base liée à sa version

La réplication et le sharding demandent l'édition Enterprise. La Community Edition est sous MIT, gratuite y compris en usage commercial. Les modules Enterprise relèvent de la Business Source License 1.1 : Meili SAS les interdit en production sans contrat commercial, et chaque version passe sous MIT quatre ans après sa sortie. Or la documentation range dans cette édition la réplication et le sharding, disponibles à partir de la v1.37. Une instance Community auto-hébergée tient donc sur une seule machine, sans réplica. Le README recommande d'ailleurs Meilisearch Cloud, avec un essai de 14 jours, avant l'auto-hébergement.

Sans --env production, toutes les routes sont publiques. Une instance démarre en development, où la clé maîtresse est facultative. En production, Meilisearch refuse de démarrer sans une clé d'au moins 16 octets et coupe l'interface de recherche intégrée, que la politique de versions réserve aux tests. La télémétrie anonymisée est active d'office ; --no-analytics la désactive.

La documentation vise la recherche d'application, pas l'analytique. Sa comparaison avec Elasticsearch laisse à ce dernier les logs, les métriques, les agrégations et les volumes de plusieurs milliards de documents. Une requête ne compte que ses dix premiers mots, et une recherche renvoie au plus 1 000 résultats tant que maxTotalHits n'est pas relevé. Pour un site statique sans serveur, Pagefind indexe le HTML généré et cherche dans le navigateur.

Le stockage LMDB ne rend pas l'espace libéré au système. La base est mappée en mémoire : selon la documentation, elle fonctionne au mieux quand elle tient en RAM, un rapport RAM/disque d'environ 1/3 ne pèse pas sensiblement sur les performances, et un SSD NVMe vaut mieux qu'un montage NFS. Supprimer des documents ne réduit pas le fichier, qui tend à grossir avec le temps.

Dernière version : v1.56.0, du 26 octobre 2026. La branche 1.x court depuis février 2023 ; 32 versions mineures sont sorties en un an, et les correctifs sont repris sur plusieurs branches à la fois (v1.52.4, v1.53.3 et v1.54.3 le 1er octobre). Une base reste liée à la version qui l'a créée. La mise à jour passe par un snapshot, le nouveau binaire et l'option --upgrade-db, opération que la documentation dit non atomique, avec un dump en recours si le binaire refuse. La politique de versions traite ces ruptures de format comme des versions mineures.