J'ai parcouru de nombreux blogs et sites sur la configuration d'Elasticsearch pour MongoDB pour indexer les collections dans MongoDB, mais aucun d'entre eux n'était simple.
Veuillez m'expliquer un processus étape par étape pour installer elasticsearch, qui devrait inclure:
- configuration
- exécuter dans le navigateur
J'utilise Node.js avec express.js, alors aidez-moi en conséquence.
mongodb
elasticsearch
bibin david
la source
la source
Réponses:
Cette réponse devrait être suffisante pour vous permettre de suivre ce didacticiel sur la création d'un composant de recherche fonctionnel avec MongoDB, Elasticsearch et AngularJS .
Si vous cherchez à utiliser la recherche à facettes avec les données d'une API, le BirdWatch Repo de Matthiasn est quelque chose que vous voudrez peut-être regarder.
Voici donc comment vous pouvez configurer un "cluster" Elasticsearch à nœud unique pour indexer MongoDB à utiliser dans une application NodeJS, Express sur une nouvelle instance EC2 Ubuntu 14.04.
Assurez-vous que tout est à jour.
Installez NodeJS.
Installez MongoDB - Ces étapes proviennent directement de la documentation MongoDB. Choisissez la version avec laquelle vous êtes à l'aise. Je m'en tiens à la v2.4.9 car elle semble être la version la plus récente que MongoDB-River prend en charge sans problème.
Importez la clé GPG publique MongoDB.
Mettez à jour votre liste de sources.
Obtenez le package 10gen.
Ensuite, choisissez votre version si vous ne voulez pas la plus récente. Si vous configurez votre environnement sur une machine Windows 7 ou 8, restez à l'écart de la version 2.6 jusqu'à ce qu'ils résolvent certains bogues en l'exécutant en tant que service.
Empêchez la version de votre installation MongoDB d'être modifiée lors de la mise à jour.
Démarrez le service MongoDB.
Par défaut, vos fichiers de base de données sont / var / lib / mongo et vos fichiers journaux / var / log / mongo.
Créez une base de données via le shell mongo et insérez-y des données factices.
Maintenant, pour convertir le MongoDB autonome en un jeu de répliques .
Arrêtez d'abord le processus.
Maintenant, nous exécutons MongoDB en tant que service, donc nous ne passons pas l'option "--replSet rs0" dans l'argument de ligne de commande lorsque nous redémarrons le processus mongod. Au lieu de cela, nous le mettons dans le fichier mongod.conf.
Ajoutez ces lignes, en remplaçant vos chemins de base de données et de journal.
Ouvrez à nouveau le shell mongo pour initialiser le jeu de répliques.
Installez maintenant Elasticsearch. Je suis juste ce Gist utile .
Assurez-vous que Java est installé.
Restez avec la v1.1.x pour le moment jusqu'à ce que le bogue du plugin Mongo-River soit corrigé dans la v1.2.1.
Assurez-vous que /etc/elasticsearch/elasticsearch.yml a les options de configuration suivantes activées si vous ne développez que sur un seul nœud pour le moment:
Démarrez le service Elasticsearch.
Vérifiez que cela fonctionne.
Si vous voyez quelque chose comme ça, vous êtes bon.
Installez maintenant les plugins Elasticsearch pour qu'il puisse jouer avec MongoDB.
Ces deux plugins ne sont pas nécessaires, mais ils sont utiles pour tester les requêtes et visualiser les modifications apportées à vos index.
Redémarrez Elasticsearch.
Indexez enfin une collection de MongoDB.
Vérifiez que votre index est dans Elasticsearch
Vérifiez la santé de votre cluster.
Il est probablement jaune avec des fragments non attribués. Nous devons dire à Elasticsearch avec quoi nous voulons travailler.
Vérifiez à nouveau la santé du cluster. Il devrait être vert maintenant.
Va jouer.
la source
L'utilisation de la rivière peut présenter des problèmes lorsque votre opération évolue. River utilisera une tonne de mémoire lorsqu'il est soumis à de lourdes opérations. Je vous recommande de mettre en œuvre vos propres modèles elasticsearch, ou si vous utilisez mangouste, vous pouvez y intégrer vos modèles elasticsearch ou utiliser mongoosastic qui le fait essentiellement pour vous.
Un autre inconvénient de Mongodb River est que vous serez bloqué en utilisant la branche mongodb 2.4.x et ElasticSearch 0.90.x. Vous commencerez à découvrir que vous manquez de nombreuses fonctionnalités vraiment intéressantes, et le projet mongodb river ne produit tout simplement pas un produit utilisable assez rapidement pour rester stable. Cela dit, Mongodb River n'est certainement pas quelque chose avec lequel je voudrais entrer en production. Cela a posé plus de problèmes que sa valeur. Il abandonnera aléatoirement l'écriture sous une charge importante, il consommera beaucoup de mémoire et il n'y a pas de paramètre pour limiter cela. De plus, River ne se met pas à jour en temps réel, il lit les oplogs de mongodb, ce qui peut retarder les mises à jour jusqu'à 5 minutes selon mon expérience.
Nous avons récemment dû réécrire une grande partie de notre projet, car c'est une occurrence hebdomadaire que quelque chose ne va pas avec ElasticSearch. Nous étions même allés jusqu'à embaucher un consultant Dev Ops, qui reconnaît également qu'il est préférable de s'éloigner de River.
METTRE À JOUR: Elasticsearch-mongodb-river prend désormais en charge ES v1.4.0 et mongodb v2.6.x. Cependant, vous rencontrerez toujours des problèmes de performances lors d'opérations d'insertion / mise à jour lourdes car ce plugin tentera de lire les oplogs de mongodb pour les synchroniser. S'il y a beaucoup d'opérations depuis le déverrouillage du verrou (ou plutôt du verrou), vous remarquerez une utilisation extrêmement élevée de la mémoire sur votre serveur elasticsearch. Si vous prévoyez d'avoir une grande opération, la rivière n'est pas une bonne option. Les développeurs d'ElasticSearch vous recommandent toujours de gérer vos propres index en communiquant directement avec leur API en utilisant la bibliothèque cliente de votre langage, plutôt qu'en utilisant River. Ce n'est pas vraiment le but de la rivière. Twitter-river est un excellent exemple d'utilisation de la rivière. C'est essentiellement un excellent moyen de trouver des données à partir de sources extérieures,
Considérez également que mongodb-river est en retard dans la version, car il n'est pas maintenu par ElasticSearch Organization, il est maintenu par un tiers. Le développement était bloqué sur la branche v0.90 pendant longtemps après la sortie de la v1.0, et lorsqu'une version pour v1.0 a été publiée, il n'était pas stable jusqu'à ce qu'elasticsearch publie la v1.3.0. Les versions de Mongodb sont également en retard. Vous pouvez vous retrouver dans une situation difficile lorsque vous cherchez à passer à une version ultérieure de chacun, en particulier avec ElasticSearch sous un développement aussi lourd, avec de nombreuses fonctionnalités très attendues en cours. Rester à jour sur la dernière ElasticSearch a été très important car nous comptons fortement sur l'amélioration constante de notre fonctionnalité de recherche en tant qu'élément central de notre produit.
Dans l'ensemble, vous obtiendrez probablement un meilleur produit si vous le faites vous-même. Ce n'est pas si difficile. C'est juste une autre base de données à gérer dans votre code, et elle peut facilement être ajoutée à vos modèles existants sans refactorisation majeure.
la source
not_analyzed
, sinon vous aurez du mal à le rechercher, faites en sorte que les champs analysés soient tokenisés.J'ai trouvé mongo-connector utile. Il s'agit de Mongo Labs (MongoDB Inc.) et peut être utilisé maintenant avec Elasticsearch 2.x
Gestionnaire de documentation Elastic 2.x: https://github.com/mongodb-labs/elastic2-doc-manager
mongo-connector crée un pipeline à partir d'un cluster MongoDB vers un ou plusieurs systèmes cibles, tels que Solr, Elasticsearch ou un autre cluster MongoDB. Il synchronise les données de MongoDB avec la cible, puis suit le journal d'opération MongoDB, en suivant les opérations de MongoDB en temps réel. Il a été testé avec Python 2.6, 2.7 et 3.3+. Une documentation détaillée est disponible sur le wiki.
https://github.com/mongodb-labs/mongo-connector https://github.com/mongodb-labs/mongo-connector/wiki/Usage%20with%20ElasticSearch
la source
River est une bonne solution une fois que vous souhaitez avoir une synchronisation presque en temps réel et une solution générale.
Si vous avez déjà des données dans MongoDB et que vous souhaitez les envoyer très facilement à Elasticsearch comme "one-shot", vous pouvez essayer mon package dans Node.js https://github.com/itemsapi/elasticbulk .
Il utilise les flux Node.js afin que vous puissiez importer des données de tout ce qui prend en charge les flux (c'est-à-dire MongoDB, PostgreSQL, MySQL, fichiers JSON, etc.)
Exemple pour MongoDB vers Elasticsearch:
Installer les packages:
Créez un script ie script.js:
Envoyez vos données:
Ce n'est pas extrêmement rapide mais cela fonctionne pour des millions d'enregistrements (grâce aux flux).
la source
Voici comment faire cela sur mongodb 3.0. J'ai utilisé ce joli blog
Test sur navigateur:
http: // localhost: 9200 / _search? q = home
la source
Ici, j'ai trouvé une autre bonne option pour migrer vos données MongoDB vers Elasticsearch. Un démon go qui synchronise mongodb avec elasticsearch en temps réel. C'est le Monstache. Il est disponible à: Monstache
Ci-dessous le setp initial pour le configurer et l'utiliser.
Étape 1:
Étape 2 :
Étape 3: Vérifiez la réplication.
Étape 4. Téléchargez le " https://github.com/rwynn/monstache/releases ". Décompressez le téléchargement et ajustez votre variable PATH pour inclure le chemin d'accès au dossier de votre plate-forme. Aller à cmd et tapez
"monstache -v"
# 4.13.1 Monstache utilise le format TOML pour sa configuration. Configurez le fichier pour la migration nommé config.tomlÉtape 5.
Mon config.toml ->
Étape 6.
la source
Étant donné que mongo-connector semble maintenant mort, mon entreprise a décidé de créer un outil pour utiliser les flux de modifications Mongo pour les envoyer vers Elasticsearch.
Nos premiers résultats semblent prometteurs. Vous pouvez le vérifier sur https://github.com/electionsexperts/mongo-stream . Nous sommes encore au début du développement et nous serions heureux de recevoir des suggestions ou des contributions.
la source