Meilisearch : qu'est-ce que c'est, comment ça marche, quand l'utiliser
Meilisearch est un moteur de recherche open source écrit en Rust, distribué sous forme d'exécutable unique et pensé pour accompagner l'application plutôt que vivre dans sa base de données. Règles de pertinence inspectables, facettes natives, synonymes, tolérance aux fautes configurable par champ et recherche sémantique exécutée en local sans service externe.
Qu'est-ce que Meilisearch
Meilisearch est un moteur de recherche open source écrit en Rust, distribué sous forme d'exécutable unique et conçu pour être installé à côté de l'application plutôt qu'à l'intérieur de sa base de données.
Il reçoit des documents au format JSON, construit un index inversé et répond aux requêtes via une API HTTP. Un index inversé est une structure dans laquelle, pour chaque mot, existe déjà la liste ordonnée des documents qui le contiennent : chercher revient à lire cette liste, non à parcourir une table.
C'est la différence essentielle avec une recherche exécutée à l'intérieur d'une base relationnelle. MySQL et PostgreSQL sont conçus pour garantir l'intégrité et les relations entre les données, non pour chercher du texte ; lorsqu'ils s'en chargent au-delà d'une certaine volumétrie, ils sont lents, imprécis, ou les deux.
Comment Meilisearch décide de l'ordre des résultats
Le classement n'est pas un score opaque mais une séquence de règles appliquées en cascade, visibles et modifiables. Dans la configuration par défaut elles sont au nombre de sept, dans cet ordre : nombre de termes trouvés, nombre de fautes de frappe, proximité entre les termes, importance du champ où la correspondance a eu lieu, critère de tri explicite, position du mot dans le champ, correspondance exacte.
Lorsque deux documents sont à égalité sur la première règle, on passe à la deuxième, et ainsi de suite. Les règles peuvent être réordonnées, supprimées, ou complétées par des règles personnalisées fondées sur un champ numérique, par exemple pour faire peser le volume de ventes ou la note moyenne.
La conséquence pratique la plus importante concerne l'ordre des champs déclarés comme interrogeables : cette liste n'est pas une énumération, c'est une hiérarchie. La règle sur l'importance du champ s'appuie sur cet ordre, et déplacer un champ modifie le classement des résultats.
Tolérance aux fautes, filtres et facettes
Meilisearch tolère les erreurs de saisie de manière configurable : on définit combien d'erreurs accepter selon la longueur du mot, et la tolérance peut être désactivée champ par champ. La distinction est utile, car sur une référence produit une faute de frappe doit produire zéro résultat et non l'article voisin.
Les filtres opèrent sur des champs déclarés filtrables, avec valeurs exactes, opérateurs de comparaison et conditions combinables. À la différence de la recherche textuelle, un filtre sur un champ structuré est une sélection déterministe : la valeur y est ou n'y est pas.
Les facettes en découlent naturellement. À chaque requête, Meilisearch peut renvoyer la distribution des valeurs, c'est-à-dire le nombre de résultats pour chaque couleur, chaque taille, chaque tranche de prix. Aucune requête supplémentaire n'est nécessaire : l'information arrive dans la même réponse.
Les tris multiples fonctionnent de la même façon, en déclarant les champs comme triables.
Synonymes et mots vides : pourquoi ils comptent plus qu'il n'y paraît
Ce sont deux listes dans un panneau de configuration, et sur une langue autre que l'anglais elles produisent un effet disproportionné par rapport à l'effort consenti.
Les mots vides excluent de la recherche les termes dépourvus de valeur discriminante : articles, prépositions, termes de remplissage. Ils deviennent déterminants lorsque le moteur est réglé pour exiger tous les mots de la requête, car sans cette liste une préposition devient un terme obligatoire qu'aucun document ne contient.
Les synonymes déclarent des équivalences entre termes. Ils servent chaque fois que le vocabulaire de celui qui cherche ne coïncide pas avec celui qui a rédigé le catalogue, ce qui est la règle et non l'exception.
Aucune des deux listes n'est préremplie pour le français. Elles doivent être écrites, et écrites en regardant son propre catalogue.
La recherche sémantique en local, sans service externe
Il existe une classe de questions auxquelles aucun moteur lexical ne peut répondre, parce que les termes employés ne figurent dans aucun document. « Quelque chose de chaud pour l'hiver » ne trouve pas un manteau en laine si le mot « chaud » n'est pas écrit dans la fiche.
La recherche sémantique lève cette limite : chaque document et chaque question sont projetés dans un espace numérique où les éléments de sens proche se retrouvent voisins, et le classement s'effectue par proximité. Meilisearch prend également en charge le mode hybride, qui combine correspondance textuelle et proximité sémantique selon un ratio réglable.
L'aspect peu connu est qu'aucun service externe n'est requis. Le moteur d'inférence est intégré à l'exécutable, ce qui explique que le binaire dépasse les trois cents mégaoctets : Meilisearch peut télécharger et exécuter le modèle en local, sans clé API, sans coût par requête et sans qu'aucune donnée ne quitte la machine.
Les autres options restent disponibles pour qui les préfère : OpenAI, un serveur Ollama personnel, une API HTTP quelconque, ou des vecteurs calculés en amont et transmis tels quels.
Quels sont les prérequis pour le faire tourner
Meilisearch est réputé frugal comparé à des alternatives comme Elasticsearch, qui exige une machine virtuelle Java et un dimensionnement sensiblement supérieur. Pour des catalogues de l'ordre de quelques dizaines de milliers de documents, il est raisonnable de partir d'une machine à un cœur et deux gigaoctets de mémoire.
Deux avertissements opérationnels valent plus que n'importe quelle estimation.
Le premier concerne l'ingestion : Meilisearch est optimisé pour recevoir les documents par lots. Les envoyer un par requête HTTP fait supporter à chaque envoi l'intégralité du coût fixe de l'opération, et l'écart sur les temps d'indexation se compte en ordres de grandeur. C'est l'une des causes les plus fréquentes de lenteur apparente.
Le second concerne la recherche sémantique : générer les représentations vectorielles revient à exécuter un réseau de neurones une fois par document, avec un pic de mémoire à la clé. Sur une machine dépourvue d'espace de pagination, le système d'exploitation peut terminer le processus. Les données ne sont pas perdues, le stockage résistant aux arrêts brutaux, mais le service reste indisponible. Prévoir le swap avant d'activer la fonction prend cinq minutes.
Les erreurs de configuration les plus fréquentes
Le modèle d'embedding par défaut est entraîné sur un corpus anglophone. En activant la recherche sémantique sans rien spécifier, un catalogue en français produit des représentations qui ne distinguent pas les documents, et aucun message ne le signale.
Les modèles non prédéfinis exigent l'identifiant explicite de révision. En indiquant seulement le nom du modèle, l'opération échoue avec une erreur de récupération de ressource qui n'indique pas la cause.
La classe d'entraînement du modèle compte autant que la langue. Les modèles entraînés à comparer des phrases entre elles donnent des résultats décevants là où sont attendus des modèles entraînés à répondre à une question courte par un document long.
Enfin, certains modèles documentent des préfixes à antéposer aux questions et aux documents. Appliqués à la lettre, ils peuvent dégrader les résultats et, en mode hybride, compromettre la composante textuelle, qui se met à chercher le préfixe comme s'il s'agissait d'un mot.
Quand Meilisearch n'est pas le bon choix
Meilisearch est pensé pour la recherche documentaire et pour l'expérience de recherche instantanée. Ce n'est pas un système d'analyse de journaux, ce n'est pas un moteur d'agrégations statistiques complexes et il ne remplace pas un entrepôt de données. Pour ces usages, Elasticsearch demeure plus indiqué, au prix d'une complexité opérationnelle supérieure.
Ce n'est pas davantage la réponse à un catalogue de quelques centaines d'éléments sans attributs, où la recherche native du CMS peut suffire.
Meilisearch figure aujourd'hui parmi les options les plus solides pour qui souhaite une recherche rapide et maîtrisable sans s'engager dans un abonnement : licence ouverte, installation simple, latences de l'ordre de la milliseconde, facettes et synonymes natifs, recherche sémantique intégrée et aucune dépendance externe obligatoire.
Il demeure un outil, et comme tout outil il rend à proportion de la manière dont il est configuré. Les décisions qui comptent ne portent pas sur le moteur, mais sur les données qu'on lui donne à lire et sur l'ordre dans lequel on lui demande de les regarder.