Document de recherche sur la sélection des moteurs de recherche
Introduction à Elasticsearch*
Elasticsearch est un moteur de recherche et d’analyse distribué en temps réel. Cela vous aide à traiter des données à grande échelle plus rapidement que jamais.
Il peut être utilisé pour la recherche en texte intégral, la recherche structurée et l’analyse, et bien sûr, vous pouvez combiner les trois.
Elasticsearch est un moteur de recherche construit sur le moteur de recherche en texte intégral Apache Lucene™, qui peut être considéré comme le framework de moteur de recherche open source le plus avancé et le plus efficace et complet disponible aujourd’hui.
Mais Lucene n’est qu’un framework, et pour tirer pleinement parti de ses fonctionnalités, il faut utiliser JAVA et intégrer Lucene dans votre programme. Il faut beaucoup d’apprentissage pour comprendre comment ça fonctionne, et Lucene est vraiment compliquée.
Elasticsearch utilise Lucene comme moteur interne, mais lorsqu’il est utilisé pour la recherche en texte intégral, il suffit d’utiliser une API unifiée sans comprendre les principes complexes de fonctionnement de Lucene qui la sous-tendent.
Bien sûr, Elasticsearch n’est pas aussi simple que Lucene, il inclut non seulement des fonctions de recherche en texte intégral, mais peut aussi effectuer les tâches suivantes :
- Stockage de fichiers en temps réel distribué et indexation de chaque champ afin qu’il puisse être recherché.
- Moteur de recherche distribué avec analyses en temps réel.
- Il peut s’étendre à des centaines de serveurs pour gérer des pétaoctets de données structurées ou non structurées.
Avec autant de fonctionnalités intégrées dans un seul serveur, vous pouvez facilement communiquer avec l’API RESTful d’ES via le client ou l’un de vos langages de programmation préférés.
Commencer avec Elasticsearch est très simple. Il existe de nombreux défauts très raisonnables, ce qui en fait un bon moyen pour les débutants d’éviter de devoir gérer des théories complexes dès qu’ils commencent.
Il est installé et prêt à l’emploi, et il peut être très productif avec un faible coût d’apprentissage.
Au fur et à mesure que vous en apprendrez, vous pouvez également profiter de fonctionnalités plus avancées d’Elasticsearch, et l’ensemble du moteur peut être configuré de manière flexible. Vous pouvez personnaliser votre propre Elasticsearch selon vos besoins.
Cas d’utilisation :
- Wikipédia utilise Elasticsearch pour effectuer des recherches en texte intégral et surligner des mots-clés, ainsi que des suggestions de recherche telles que chercher-en-le-temps-taper et « avez-vous-voulu dire ».
- The Guardian utilise Elasticsearch pour traiter les journaux de visiteurs afin que les éditeurs puissent être informés en temps réel des réactions du public à différents articles.
- StackOverflow combine la recherche en texte intégral avec la géolocalisation et des informations pertinentes pour fournir une représentation des questions liées à des questions similaires à celle-ci.
- GitHub utilise Elasticsearch pour récupérer plus de 130 milliards de lignes de code.
- Chaque jour, Goldman Sachs l’utilise pour indexer 5 To de données, et de nombreuses banques d’investissement l’utilisent pour analyser les mouvements du marché boursier.
Mais Elasticsearch ne s’adresse pas seulement aux grandes entreprises, il a aussi aidé de nombreuses startups comme DataDog et Klout à élargir leurs capacités.
Avantages et inconvénients d’Elasticsearch** :
mérite
- Elasticsearch est distribué. Aucun autre composant n’est requis, et la distribution est en temps réel, ce qu’on appelle la « réplication Push ».
- Elasticsearch prend entièrement en charge la recherche quasi en temps réel avec Apache Lucene.
- La gestion de la multitenance ne nécessite aucune configuration particulière, tandis que Solr nécessite des réglages plus avancés.
- Elasticsearch utilise le concept de Gateway pour faciliter la sauvegarde.
- Chaque nœud forme une structure réseau égale, et lorsque certains nœuds échouent, d’autres nœuds sont automatiquement assignés pour travailler à leur place.
défaut
- Un seul développeur (l’organisation actuelle Elasticsearch GitHub est plus que cela, elle a déjà des mainteneurs assez actifs)
- Pas assez automatique (pas adapté à la nouvelle API Index Warmup actuelle)
À propos de Solr*
Solr (prononcé « solar ») est une plateforme de recherche d’entreprise open source pour le projet Apache Lucene. Ses principales fonctionnalités incluent la recherche en texte intégral, le marquage de cliché, la recherche facettée, le clustering dynamique, l’intégration de bases de données et le traitement du texte enrichi (par exemple, Word, PDF). Solr est hautement évolutif et offre une recherche distribuée ainsi que la réplication par index. Solr est le moteur de recherche de niveau entreprise le plus populaire, et Solr4 ajoute également la prise en charge du NoSQL.
Solr est un serveur de recherche autonome en texte intégral écrit en Java qui fonctionne sur un conteneur de servlets tel qu’Apache, Tomcat ou Jetty. Solr utilise la bibliothèque de recherche Java Lucene comme base pour l’indexation et la recherche en texte complet, et dispose d’API HTTP/XML et JSON similaires à REST. Les puissantes capacités de configuration externe de Solr facilitent l’adaptation à de nombreux types d’applications sans codage Java. Solr dispose d’une architecture de plugins pour supporter une personnalisation plus avancée.
En raison de la fusion des projets Apache Lucene et Apache Solr en 2010, les deux projets ont été créés et mis en œuvre par la même équipe de développement de l’Apache Software Foundation. En ce qui concerne la technologie ou les produits, Lucene/Solr ou Solr/Lucene est pareil.
Avantages et inconvénients de Solr :
mérite
- Solr dispose d’une communauté plus large et plus mature d’utilisateurs, de développeurs et de contributeurs.
- Prend en charge l’ajout d’index dans plusieurs formats, tels que HTML, PDF, Microsoft Office, et des formats de texte brut tels que JSON, XML, CSV, etc.
- Solr est relativement mature et stable.
- La recherche tout en indexant n’est pas prise en compte, et la vitesse est plus rapide.
défaut
- Lorsque l’index est établi, l’efficacité de la recherche diminue, et l’efficacité de la recherche en temps réel n’est pas élevée.
Elasticsearch vs Solr*
Solr est plus rapide lorsqu’il s’agit simplement de rechercher des données existantes.
Lors de l’indexation en temps réel, Solr provoque un blocage d’IO et de mauvaises performances de requête, ce qu’Elasticsearch a clairement en avantage.
À mesure que la quantité de données augmente, l’efficacité de recherche de Solr diminue, tandis qu’Elasticsearch ne change pas de manière significative.
En résumé, l’architecture de Solr n’est pas adaptée aux applications de recherche en temps réel.
Essais de production réels*
La figure ci-dessous montre une augmentation de 50 fois la vitesse moyenne de requête après le passage de Solr à Elasticsearch.
Résumé de la comparaison Elasticsearch vs Solr
- Les deux sont faciles à installer ;
- Solr utilise Zookeeper pour la gestion distribuée, tandis qu’Elasticsearch lui-même dispose d’une gestion d’orchestration distribuée ;
- Solr prend en charge plus de formats de données, tandis qu’Elasticsearch ne prend en charge que les formats de fichiers JSON ;
- Solr offre officiellement plus de fonctionnalités, tandis qu’Elasticsearch se concentre davantage sur les fonctions principales, et les fonctions avancées sont principalement fournies par des plugins tiers.
- Solr surpasse Elasticsearch dans les applications de recherche traditionnelles, mais est nettement moins efficace qu’Elasticsearch lorsqu’il s’agit d’applications de recherche en temps réel.
- Solr est une solution puissante pour les applications de recherche traditionnelles, mais Elasticsearch est mieux adapté aux applications émergentes de recherche en temps réel.
Autres solutions de moteurs de recherche open source basées sur Lucene*
1 : Utiliser Lucene directement
Note : Lucene est une bibliothèque de recherche JAVA qui n’est pas une solution complète en soi et nécessite un effort de développement supplémentaire.
Avantages : solution mature avec de nombreux cas réussis. Des projets de haut niveau Apache qui continuent de progresser rapidement. Communauté de développement grande et active, un grand nombre de développeurs. Ce n’est qu’une bibliothèque de classes, avec assez de place pour la personnalisation et l’optimisation : après une simple personnalisation, elle peut répondre à la plupart des besoins courants ; Optimisé pour supporter 1 milliard+ de recherches.
Inconvénients : Nécessite un effort de développement supplémentaire. Toute la mise à l’échelle, la distribution, la fiabilité, etc. doivent être implémentées par vous-même ; En temps non réel, il y a un délai entre l’indexation et la recherche, et la scalabilité du schéma actuel de recherche « Lucene Near Real Time Search » doit être encore améliorée
La connexion hyperlientérée est visible.
2 : Katta
Note : Système de recherche distribué, évolutif, tolérant aux pannes, quasi-temps basé sur Lucene.
Avantages : Distribué dès la sortie de la boîte avec Hadoop. Il possède un mécanisme de mise à l’échelle et de tolérance aux pannes.
Inconvénients : Ce n’est qu’une solution de recherche, et vous devez quand même implémenter la partie indexation vous-même. En termes de fonction de recherche, seuls les besoins les plus fondamentaux sont satisfaits. Il y a moins d’histoires de réussite et la maturité du projet est légèrement inférieure. Comme il doit supporter la distribution, il sera difficile de le personnaliser pour certaines requêtes complexes.
La connexion hyperlientérée est visible.
3 : Contrib/index Hadoop
Note : Le mode Map/Reduction, une solution d’indexation distribuée, peut être utilisé avec Katta.
Avantages : indexation distribuée et scalabilité.
Inconvénients : Seul le schéma d’indexation, pas l’implémentation de la recherche. Fonctionne en mode batch avec un mauvais support de la recherche en temps réel.
La connexion hyperlientérée est visible.
4 : La solution open source de LinkedIn
Description : Une gamme de solutions basées sur Lucene, incluant Zoie pour la recherche quasi en temps réel, Bobo pour la recherche de facets, Decomposer pour les algorithmes d’apprentissage automatique, Krati pour les dépôts de synthèse, Sensei pour l’enveloppement de schémas de base de données, et bien plus encore
Avantages : solution éprouvée qui supporte une implémentation distribuée, évolutive et riche en fonctionnalités
Inconvénients : trop étroitement lié à LinkedIn et faible personnalisation
La connexion hyperlientérée est visible.
5 : Lucandra
Note : Basé sur Lucene, l’index existe dans la base de données Cassandra
Avantages : Faites référence aux avantages de Cassandra
Inconvénients : Faites référence aux inconvénients de Cassandra. De plus, ce n’est qu’une démo et cela n’a pas été largement vérifié
La connexion hyperlientérée est visible.
6 :HBasene
Note : Basé sur Lucene, l’indice existe dans la base de données HBase
Avantages : Référez-vous aux avantages de la HBase
Inconvénients : Référez-vous aux inconvénients de l’HBase. De plus, dans l’implémentation, les termes lucène sont stockés sous forme de lignes, mais les listes d’affichage correspondant à chaque terme sont stockées sous forme de colonnes. À mesure que le nombre de listes de publication pour un seul terme augmente, la rapidité de la requête sera fortement affectée
La connexion hyperlientérée est visible.
7 : Xunsearch
Note : Xunsearch adopte une conception hiérarchique structurée, incluant des services back-end et des packages de développement front-end, avec des hiérarchies claires et sans intersection. Le backend est un daemon écrit en C/C++, tandis que le frontend utilise PHP, le langage de script le plus populaire, plus pratique pour les projets de recherche web. Pour plus de détails, voir Design architectural.
La connexion hyperlientérée est visible.
|