Nous avons là un nouveau projet pour indexer une grande quantité de données et pour fournir en temps réel. J'ai aussi une recherche complexe avec des facettes, du texte intégral, géospatial ...
Le premier prototype consiste à indexer dans MongoDB et ensuite à Elasticsearch, car j'avais lu qu'Elasticsearch n'applique pas de somme de contrôle aux fichiers stockés et que l'index ne peut pas être entièrement fiable. Mais depuis les dernières versions (dans la version 1.5), il y a maintenant une somme de contrôle et je suppose que nous pouvons utiliser Elasticsearch comme magasin de données principal? Et quel est l'avantage d'utiliser MongoDB en plus d'Elasticsearch?
Je ne trouve pas de réponse à jour sur ces fonctionnalités dans Elasticsearch
Merci beaucoup
Parler des arguments pour utiliser Mongo au lieu de/avec ES:
Gestion des utilisateurs/rôles.
shield
. Mais il n'est expédié que pour un abonnement Gold/Platinum à des fins de production.Schéma
Lucene
et écrit en Java
. L'idée de base de cet outil - indexer et rechercher des documents, et travailler de cette façon nécessite la cohérence de l'index. À l'arrière-plan, tous les documents doivent être ajustés dans un index plat lucene
, ce qui nécessite une certaine compréhension de la façon dont ES doit traiter vos valeurs et documents imbriqués, et comment vous devez organiser vos index pour maintenir l'équilibre entre la vitesse et l'exhaustivité des données. /cohérence. Travailler avec ES vous oblige à garder constamment à l'esprit certaines choses sur le schéma. C'est-à-dire: comme vous pouvez indexer presque n'importe quoi sur ES sans mettre à l'avance le mappage correspondant, ES peut "deviner" le mappage à la volée mais parfois le faire mal et parfois le mappage implicite est mauvais, car une fois qu'il est mis, il ne peut pas être changé w/o réindexation de tout l'indice. Donc, il vaut mieux ne pas traiter ES comme un magasin sans schéma, car vous pouvez marcher sur un râteau un certain temps (et ce sera douleur :)), mais Traitez-le plutôt comme un schéma intensif, au moins lorsque vous travaillez avec des documents, qui peut être découpé en champs concrets.Gestion des données non de type table.
gridFS
. Cela vous permet de gérer de gros morceaux de données derrière la même interface. C'est-à-dire que vous pouvez stocker des données binaires dans Mongo et les récupérer dans la même interface, du point de vue de votre code.Eh bien, choisissez le bon outil pour le bon travail. Si vous avez besoin de capacités de recherche telles que la recherche en texte intégral, les facettes, etc., rien ne peut battre un moteur de recherche à part entière. ElasticSearch (ES) ou Solr n'est qu'une question de choix.
Vous pouvez réellement alimenter (indexer) des documents dans ES pour les rechercher, puis récupérer les détails complets d'une entrée particulière à partir de MongoDB ou de toute autre base de données.
Je peux vous faciliter la tâche, jetez un oeil à mon travail open source qui utilise MongoDB, ES, Redis et RabbitMQ, tous intégrés en un seul endroit, ici sur github
Veuillez noter que l'application est intégrée en .Net C #.
J'ai récemment développé une fonctionnalité dans mon entreprise,
nous voulions effectuer quelques recherches et classer le résultat en fonction de sa pertinence sur plusieurs facteurs et conditions.
Donc, dans mon application, nous utilisions déjà MongoDB comme Db,
Donc, sur l'index ElasticSearch, j'ai exporté certains des champs de MongoDB sur lesquels je veux effectuer des recherches et des filtres. Donc, selon les conditions requises, j'ai également préparé ma requête mongo et ma requête elasticsearch et effectué la recherche. Ensuite, j'ai filtré et trié le résultat selon mes besoins. L'ensemble du testament a été conçu de telle manière que, même en cas d'erreur de ES, mongo récupère les enregistrements. Si j'obtiens le résultat d'ES alors, le résultat de mongo dépendra du résultat d'ES. C'est ainsi que j'ai utilisé mongo et ES en combinaison.
N'oubliez pas non plus de gérer correctement toutes les mises à jour, suppressions et nouvelles insertions d'enregistrements.
Et juste pour savoir, les résultats pour moi étaient vraiment bons.
Après avoir utilisé Elasticsearch sur la production, je peux ajouter à ce fil quelques notes:
Maintenant sur la vraie question:
À mon avis, utiliser uniquement Elasticsearch est suffisant et peut réduire la complexité d'avoir plusieurs systèmes de stockage NoSQL.
Je pense que cela vaut la peine lorsque vous faites un duo de base de données relationnelle et transactionnelle + moteur de recherche NoSQL, mais avoir deux systèmes qui servent à peu près les mêmes fins est un peu trop qualifié