Vers une renaissance du «search»
On assiste depuis quelques années à une renaissance du "search", alors qu'on pouvait penser que le "game" était plié avec Google pour les moteurs de recherche sur le Web public et Elasticsearch pour les projets open source.
Voici quelques tendances qui témoignent de cette renaissance :
Intelligence Artificielle et Machine Learning : Ces technologies sont de plus en plus utilisées pour améliorer la pertinence des résultats de recherche. Elles permettent d'analyser le comportement des utilisateurs, d'apprendre de ces comportements et de personnaliser les résultats de recherche en fonction des préférences individuelles. L'IA est aussi utilisée pour comprendre le langage naturel, ce qui permet d'obtenir de meilleurs résultats pour des requêtes plus complexes.
Recherche sémantique : En applicant les technologies du point précédent, la recherche sémantique se concentre sur la compréhension du sens et du contexte des mots utilisés dans une requête, plutôt que sur les mots eux-mêmes. Cela permet d'obtenir des résultats plus précis et pertinents.
Recherche focalisée sur la vie privée ou le secret des affaires : Avec une prise de conscience croissante des questions de confidentialité et de sécurité en ligne, des moteurs de recherche axés sur la protection de la vie privée comme DuckDuckGo ont gagné en popularité, de même que l'idée d'indexer soi-même ses propres données sans passer par un service externe à l'entreprise.
Recherche visuelle : La recherche visuelle, qui permet aux utilisateurs de rechercher des informations à partir d'images, est une autre tendance en plein essor. Les technologies d'apprentissage profond (deep learning), là encore en application du point 1, sont de plus en plus utilisées pour analyser et comprendre le contenu des images.
Recherche en temps réel : Avec l'augmentation du volume de données disponibles, la capacité à fournir des résultats de recherche en temps réel devient de plus en plus importante.
Quelques projets open source
Voici quelques projets récents qui témoignent du dynamisme du domaine.
Moteurs d'indexation classiques
Ces outils peuvent être considérés comme une "nouvelle vague" de projets qui prennent la suite de projets déjà anciens comme Lucene (2000) et ses dérivés (dont Elasticsearch (2004)).
Ils offrent des solutions robustes et flexibles pour indexer, rechercher et récupérer des données de manière rapide et précise. Ils proposent en général des fonctionnalités avancées telles que la recherche en texte intégral, la tolérance aux fautes de frappe, le filtrage complexe, etc. Ils sont conçus pour s'intégrer facilement à diverses applications et systèmes, offrant une facilité d'utilisation et une flexibilité sans compromettre la performance.
MeiliSearch : MeiliSearch est un moteur de recherche ultra rapide et open-source. Il offre une recherche en texte intégral avec une faible latence et est facile à utiliser, à déployer et à intégrer dans les applications web.
Sonic : Sonic est un serveur d'index de recherche open-source écrit en Rust. Il est léger et sans schéma. L'index inversé de Sonic, basé sur un automate de Levenshtein, en fait une alternative minimaliste et efficace en termes de ressources aux outils de base de données.
Typesense : Typesense est un moteur de recherche open-source, léger et optimisé pour la vitesse, écrit en C++. Il est conçu pour offrir des expériences de recherche instantanées avec un accent sur la simplicité et la facilité d'installation.
Bleve : Inspiré par Apache Lucene, Bleve est une bibliothèque de recherche en texte intégral et d'indexation pour Go. Elle fournit des composants pour tokeniser, filtrer et analyser le texte, puis créer un index recherchable.
Tantivy : Tantivy est une bibliothèque de moteur de recherche de texte inspirée par Lucene et écrite en Rust. C'est une bibliothèque de bas niveau conçue pour être la base de la construction d'un moteur de recherche complet.
Recherche "client-side"
Il existe plusieurs bibliothèques et frameworks JavaScript qui peuvent être utilisés pour implémenter la recherche côté client. Ces outils offrent généralement une recherche en texte intégral, avec des fonctionnalités comme la mise en évidence des termes de recherche, le support des requêtes booléennes, la tolérance aux fautes de frappe et autres.
Voici quelques options populaires :
MiniSearch : MiniSearch est une bibliothèque de recherche en texte intégral côté client pour JavaScript. Elle offre des fonctionnalités de recherche avancées, comme la prise en charge des requêtes booléennes et la tolérance aux fautes de frappe, tout en restant légère et rapide.
Js-search : Js-search est une bibliothèque qui permet d'effectuer des recherches en texte intégral sur des données côté client. Elle offre une grande flexibilité en termes de configuration et prend en charge plusieurs stratégies de recherche et d'indexation.
Lunr.js : Lunr.js est une petite bibliothèque de recherche en texte intégral pour le navigateur. Elle offre une syntaxe de recherche simple mais puissante et est conçue pour être facile à installer et à utiliser.
Fuse.js : Fuse.js est une bibliothèque légère qui fournit une recherche floue très flexible. Elle est parfaite pour les situations où vous devez rechercher dans une liste d'objets.
**Elasticlunr.js :** Elasticlunr.js est une bibliothèque légère, rapide, et flexible de recherche en texte intégral en JavaScript. Elle est basée sur Lunr.js, mais ajoute des fonctionnalités supplémentaires, comme la possibilité d'ajouter ou de supprimer des documents de l'index après sa création.
Bases de données de vecteurs (vector databases)
Les bases de données de vecteurs visent à permettre le stockage et la recherche de grandes quantités de données à haute dimensionalité, comme les embeddings générés par des modèles de machine learning. Ces bases de données sont particulièrement utiles dans les applications d'IA, car elles permettent des recherches de similarité efficaces et rapides.
Voici quelques projets open source significatifs:
Qdrant : Qdrant est un moteur de recherche de similarité vectorielle et une base de données vectorielle. Il fournit un service prêt à la production avec une API pratique pour stocker, rechercher et gérer des points - des vecteurs avec une charge utile supplémentaire. Qdrant est adapté pour supporter des filtres étendus, ce qui le rend utile pour toutes sortes d'appariements basés sur des réseaux neuronaux ou sémantiques, la recherche à facettes, et d'autres applications. Qdrant est écrit en Rust.
Milvus : Milvus est une base de données vectorielle open-source conçue spécifiquement pour les applications d'IA et de machine learning. Elle supporte une variété de métriques de distance et est évolutive, fiable, et capable de gérer la recherche hybride (vectorielle et scalaire). Milvus est écrit en Go.
Weaviate : Weaviate est une base de données vectorielle open-source qui stocke à la fois des objets et des vecteurs, permettant de combiner la recherche vectorielle avec le filtrage structuré avec la tolérance aux pannes et l'évolutivité d'une base de données native du cloud, le tout accessible via GraphQL, REST, et divers clients de langage. Weaviate est écrit en Go.
Deeplake : Deep Lake est une base de données vectorielle alimentée par un format de stockage unique optimisé pour les applications basées sur l'apprentissage profond et les modèles de langage de grande taille (LLM). Il simplifie le déploiement de produits basés sur LLM de niveau entreprise en offrant un stockage pour tous les types de données (embeddings, audio, texte, vidéos, images, pdfs, annotations, etc.), une recherche vectorielle, la diffusion de données lors de la formation de modèles à grande échelle, la gestion des versions et la lignée de données pour toutes les charges de travail, et des intégrations avec des outils populaires tels que LangChain, LlamaIndex, Weights and Biases, et bien d'autres. Deep Lake est écrit en Python.
Ces bases de données sont conçues pour permettre une manipulation efficace des données vectorielles, et leur utilisation dépendra des besoins spécifiques de votre application ou projet. Compte-tenu de l'importance du langage Python dans le machine learning et l'IA, tous ces projets proposent des SDK en Python.
Conclusion
Les projets que nous avons listés illustrent la manière dont la communauté open-source pousse les limites de la technologie de recherche, en tirant parti des possibilités offertes par les nouveaux langages de programmation et par le machine learning, et en se concentrant sur des problèmes spécifiques, comme l'optimisation des ressources, la facilité d'installation et la compréhension fine des documents indexés.