ElasticSearch vs Solr
Définition :
Elasticsearch a été créé par Shay Banon, fondateur de Compass Project en 2004. Lors de la conception de la troisième version de Compass, Banon se rend compte qu'il est nécessaire de réécrire une grande partie du logiciel pour gérer les montées en charge. De là est né Elasticsearch, une solution construite pour être distribuée et pour utiliser du JSON via des requêtes HTTP, ce qui rend le moteur de recherche utilisable avec n'importe quel langage de programmation.
Solr quand à lui, à été créé par l'entreprise CNET Networks puis qui a été repris par la Fondation Apache en 2006. Le projet vient du simple souhait de l'entreprise d'améliorer ses recherches. Ce moteur de recherche est principalement basé en Java, mais la communauté l'a exporté sous plusieurs langages.
Avantages :
Un point fort d’Elasticsearch est l'utilisation des recherches potentielles (percolate). Cette fonctionnalité permet d'enregistrer les termes recherchés comme une recherche potentielle et par la suite d'effectuer une recherche à travers ses résultats pré définis plus rapidement. Ce sont des index dédiés qui sont entretenus par Elasticsearch à chaque ajout de nouveaux documents.
En termes d'administration Elasticsearch peut modifier sa configuration, à la volée sans redémarrage, directement avec son API en REST/JSON. Le format des fichiers de configuration sont en YAML permettant d’avoir des fichiers plus concis
Là où Elasticsearch apporte un plus, est sa capacité à facilement intégrer des données externes à travers des connecteurs d'import déjà packagés appelés des "rivières" (river). Il y a déjà plus d'une vingtaine de rivières existantes intégrant les classiques JDBC ou LDAP, en passant par des bases de données NoSQL comme CouchDB ou MongoDB, jusqu'à des rivières plus orientées WEB comme Twitter, Dropbox ou Wikipedia.
Solr possède comme avantage d'avoir pour format le XML, CSV et JSON, contrairement à Elasticsearch qui ne possède que le dernier. De plus le format renvoyé par Solr et beaucoup plus vaste que pour ES (ElasticSearch), une recherche peut renvoyer du PHP, du Java natif ou encore du Python.
Solr étend aussi les capacités de Lucene, qui est une bibliothèque Java qui permet de rechercher et d'indexer du texte, notamment au niveau des performances, de la gestion du cache, et des optimisations lors d'un traffic de recherche très important.
Ce moteur à déjà fait ses preuves dans le monde de l'entreprise, en effet DuckDuckGo se base sur Solr pour son moteur de recherche, il en est de même pour BestBuy, eBay, Instagram, Adobe.
Un des gros avantages de Solr est que l'ont peut recharger le fichier de configuration solrconfig.xml pendant l'éxecution, ce qui peut etre très pratique en cas de souci d'indexation ou autre.
Inconvénients :
Réindexation sans interruption de service :
Les données indexées proviennent d’une base de données relationnelle. Une fois construit, l’index est mis à jour en temps réel par un système sophistiqué de notifications.
Malgré ce dispositif, il est parfois nécessaire ou préférable de reconstruire totalement l’index. Voici quelques exemples : exécution de scripts SQL de rattrapage sur la base de données source, chargement en masse de nouvelles données, pertes de notification, évolution du mapping de l’index.
En fonction de la sollicitation de la base de données source et du cluster Elasticsearch, l’alimentation d’un index de plusieurs dizaines de millions de documents peut prendre jusqu’à 2h. Or, les services de recherche ont une haute disponibilité avec un SLA de 24/7. Hors de question de les interrompre pendant cette plage horaire de maintenance.
IDF
Pour calculer le score d’un document, Elasticsearch se base notamment sur l’Inverse Document Frequency (IDF). La formule statistique sous-jacente à l’IDF peut se traduire en une phrase : la fréquence d’un terme influe sur son score. Et plus précisément : plus le terme est rare dans les documents indexés, plus il est pertinent et son score est élevé. En soit, ce critère parait être du bon sens. Mais dans des applications de gestion nécessitant une précision accrue, cela n’est pas toujours le résultat souhaité.
Solr possède de nombreux inconvénients tel que:
- Sa configuration est assez complexe à mettre en place
- Quand on met à jour des données, il y a 15 secondes d'attente pour qu'elles soient disponible dans le moteur de recherche
- il est impossible d'utiliser une version autre que la dernière version de Solr
Pour conclure, ce qui va le plus influer dans le choix du moteur de recherche, concerne le langage que vous utilisez, et le format d'entrée et de sortie de résultats de la recherche que vous souhaitez. Les performances sont à peu près égales, à savoir qu'ES est plus puissant que Solr quand il y a plus d'un million d'objets à rechercher.