Ich habe viele Blogs und Websites zum Konfigurieren von Elasticsearch für MongoDB durchgesehen, um Sammlungen in MongoDB zu indizieren, aber keine davon war einfach.
Bitte erläutern Sie mir einen schrittweisen Prozess zur Installation von elasticsearch, der Folgendes umfassen sollte:
- Aufbau
- im Browser ausführen
Ich verwende Node.js mit express.js, bitte helfen Sie entsprechend.
mongodb
elasticsearch
Bibin David
quelle
quelle
Antworten:
Diese Antwort sollte ausreichen, damit Sie dieses Lernprogramm zum Erstellen einer funktionalen Suchkomponente mit MongoDB, Elasticsearch und AngularJS befolgen können .
Wenn Sie die facettierte Suche mit Daten aus einer API verwenden möchten, sollten Sie sich Matthiasns BirdWatch Repo ansehen.
So können Sie einen Elasticsearch-Cluster mit einem einzelnen Knoten einrichten, um MongoDB für die Verwendung in einer NodeJS, Express-App auf einer neuen EC2 Ubuntu 14.04-Instanz zu indizieren.
Stellen Sie sicher, dass alles auf dem neuesten Stand ist.
Installieren Sie NodeJS.
MongoDB installieren - Diese Schritte stammen direkt aus MongoDB-Dokumenten. Wählen Sie die Version, mit der Sie vertraut sind. Ich bleibe bei v2.4.9, weil es die neueste Version zu sein scheint, die MongoDB-River ohne Probleme unterstützt.
Importieren Sie den öffentlichen MongoDB-GPG-Schlüssel.
Aktualisieren Sie Ihre Quellenliste.
Holen Sie sich das 10gen-Paket.
Wählen Sie dann Ihre Version aus, wenn Sie nicht die neueste Version möchten. Wenn Sie Ihre Umgebung auf einem Windows 7- oder Windows 8-Computer einrichten, halten Sie sich von Version 2.6 fern, bis einige Fehler bei der Ausführung als Dienst behoben sind.
Verhindern Sie, dass die Version Ihrer MongoDB-Installation beim Aktualisieren beschädigt wird.
Starten Sie den MongoDB-Dienst.
Ihre Datenbankdateien sind standardmäßig / var / lib / mongo und Ihre Protokolldateien / var / log / mongo.
Erstellen Sie eine Datenbank über die Mongo-Shell und verschieben Sie einige Dummy-Daten hinein.
Nun zum Konvertieren des eigenständigen MongoDB in eine Replica Set .
Beenden Sie zuerst den Prozess.
Jetzt führen wir MongoDB als Dienst aus, sodass wir die Option "--replSet rs0" im Befehlszeilenargument nicht übergeben, wenn wir den Mongod-Prozess neu starten. Stattdessen fügen wir es in die Datei mongod.conf ein.
Fügen Sie diese Zeilen hinzu und geben Sie Ihre Datenbank- und Protokollpfade ein.
Öffnen Sie nun die Mongo-Shell erneut, um das Replikatset zu initialisieren.
Installieren Sie nun Elasticsearch. Ich folge nur diesem hilfreichen Kern .
Stellen Sie sicher, dass Java installiert ist.
Bleiben Sie vorerst bei v1.1.x, bis der Fehler im Mongo-River-Plugin in v1.2.1 behoben ist.
Stellen Sie sicher, dass in /etc/elasticsearch/elasticsearch.yml die folgenden Konfigurationsoptionen aktiviert sind, wenn Sie derzeit nur auf einem einzelnen Knoten entwickeln:
Starten Sie den Elasticsearch-Dienst.
Überprüfen Sie, ob es funktioniert.
Wenn Sie so etwas sehen, sind Sie gut.
Installieren Sie nun die Elasticsearch-Plugins, damit sie mit MongoDB abgespielt werden können.
Diese beiden Plugins sind nicht erforderlich, eignen sich jedoch zum Testen von Abfragen und zum Visualisieren von Änderungen an Ihren Indizes.
Starten Sie Elasticsearch neu.
Indexieren Sie schließlich eine Sammlung aus MongoDB.
Überprüfen Sie, ob sich Ihr Index in Elasticsearch befindet
Überprüfen Sie den Zustand Ihres Clusters.
Es ist wahrscheinlich gelb mit einigen nicht zugewiesenen Scherben. Wir müssen Elasticsearch mitteilen, mit was wir arbeiten möchten.
Überprüfen Sie den Clusterzustand erneut. Es sollte jetzt grün sein.
Geh spielen.
quelle
Die Verwendung von River kann Probleme verursachen, wenn Ihr Betrieb skaliert. River wird bei starker Beanspruchung eine Menge Speicher verbrauchen. Ich empfehle, Ihre eigenen Elasticsearch-Modelle zu implementieren. Wenn Sie Mungo verwenden, können Sie Ihre Elasticsearch-Modelle direkt darin einbauen oder Mongoosastic verwenden, was dies im Wesentlichen für Sie erledigt.
Ein weiterer Nachteil von Mongodb River ist, dass Sie mit mongodb 2.4.x branch und ElasticSearch 0.90.x nicht weiterkommen. Sie werden feststellen, dass Sie viele wirklich nette Funktionen verpassen, und das Mongodb River-Projekt produziert einfach nicht schnell genug ein brauchbares Produkt, um stabil zu bleiben. Das heißt, Mongodb River ist definitiv nichts, mit dem ich in Produktion gehen würde. Es hat mehr Probleme aufgeworfen als es wert ist. Unter starker Last wird das Schreiben zufällig gelöscht, es wird viel Speicher verbraucht, und es gibt keine Einstellung, um dies zu begrenzen. Außerdem wird River nicht in Echtzeit aktualisiert, sondern liest Oplogs von Mongodb, und dies kann nach meiner Erfahrung Aktualisierungen um bis zu 5 Minuten verzögern.
Wir mussten kürzlich einen großen Teil unseres Projekts neu schreiben, da es wöchentlich vorkommt, dass bei ElasticSearch etwas schief geht. Wir waren sogar so weit gegangen, einen Dev Ops-Berater einzustellen, der auch zustimmt, dass es am besten ist, sich von River zu entfernen.
AKTUALISIEREN: Elasticsearch-mongodb-river unterstützt jetzt ES v1.4.0 und mongodb v2.6.x. Bei umfangreichen Einfüge- / Aktualisierungsvorgängen treten jedoch wahrscheinlich immer noch Leistungsprobleme auf, da dieses Plugin versucht, die Oplogs von Mongodb zu lesen, um sie zu synchronisieren. Wenn es viele Operationen gibt, seit die Sperre (oder eher die Verriegelung) entsperrt ist, werden Sie eine extrem hohe Speichernutzung auf Ihrem Elasticsearch-Server feststellen. Wenn Sie einen großen Betrieb planen, ist der Fluss keine gute Option. Die Entwickler von ElasticSearch empfehlen Ihnen weiterhin, Ihre eigenen Indizes zu verwalten, indem Sie direkt mit ihrer API über die Clientbibliothek für Ihre Sprache kommunizieren, anstatt River zu verwenden. Dies ist nicht wirklich der Zweck des Flusses. Twitter-River ist ein großartiges Beispiel dafür, wie River verwendet werden sollte. Es ist im Wesentlichen eine großartige Möglichkeit, Daten von externen Quellen zu beziehen.
Bedenken Sie auch, dass der Mongodb-Fluss in der Version zurückfällt, da er nicht von der ElasticSearch Organization, sondern von einem Dritten verwaltet wird. Die Entwicklung blieb lange nach der Veröffentlichung von v1.0 auf dem Zweig v0.90 hängen, und als eine Version für v1.0 veröffentlicht wurde, war sie erst stabil, als elasticsearch v1.3.0 veröffentlichte. Mongodb-Versionen fallen ebenfalls zurück. Möglicherweise befinden Sie sich in einer schwierigen Situation, wenn Sie zu einer späteren Version wechseln möchten, insbesondere mit ElasticSearch, das sich in einer so intensiven Entwicklung befindet und viele sehr erwartete Funktionen auf dem Weg ist. Es war sehr wichtig, auf dem neuesten Stand von ElasticSearch zu bleiben, da wir uns stark darauf verlassen, unsere Suchfunktionalität als Kernbestandteil unseres Produkts ständig zu verbessern.
Alles in allem erhalten Sie wahrscheinlich ein besseres Produkt, wenn Sie es selbst tun. Es ist nicht so schwierig. Es ist nur eine weitere Datenbank, die Sie in Ihrem Code verwalten können, und sie kann ohne größere Umgestaltungen problemlos in Ihre vorhandenen Modelle eingefügt werden.
quelle
not_analyzed
ist. Andernfalls können Sie sie nicht abfragen. Gehen Sie dazu vor, wie analysierte Felder mit einem Token versehen werden.Ich fand Mongo-Stecker nützlich. Es ist von Mongo Labs (MongoDB Inc.) und kann jetzt mit Elasticsearch 2.x verwendet werden
Elastic 2.x Doc Manager: https://github.com/mongodb-labs/elastic2-doc-manager
mongo-connector erstellt eine Pipeline von einem MongoDB-Cluster zu einem oder mehreren Zielsystemen wie Solr, Elasticsearch oder einem anderen MongoDB-Cluster. Es synchronisiert Daten in MongoDB mit dem Ziel und beendet dann das MongoDB-Oplog, um die Operationen in MongoDB in Echtzeit zu verfolgen. Es wurde mit Python 2.6, 2.7 und 3.3+ getestet. Eine ausführliche Dokumentation finden Sie im Wiki.
https://github.com/mongodb-labs/mongo-connector https://github.com/mongodb-labs/mongo-connector/wiki/Usage%20with%20ElasticSearch
quelle
River ist eine gute Lösung, wenn Sie eine nahezu Echtzeitsynchronisation und eine allgemeine Lösung wünschen.
Wenn Sie bereits Daten in MongoDB haben und diese sehr einfach wie "One-Shot" an Elasticsearch senden möchten, können Sie mein Paket in Node.js https://github.com/itemsapi/elasticbulk testen .
Es werden Node.js-Streams verwendet, sodass Sie Daten aus allen unterstützenden Streams importieren können (z. B. MongoDB-, PostgreSQL-, MySQL-, JSON-Dateien usw.).
Beispiel für MongoDB to Elasticsearch:
Pakete installieren:
Skript erstellen dh script.js:
Versenden Sie Ihre Daten:
Es ist nicht extrem schnell, aber es funktioniert für Millionen von Datensätzen (dank Streams).
quelle
Hier erfahren Sie, wie Sie dies auf Mongodb 3.0 tun. Ich habe diesen schönen Blog benutzt
Test im Browser:
http: // localhost: 9200 / _search? q = home
quelle
Hier habe ich eine weitere gute Option gefunden, um Ihre MongoDB-Daten nach Elasticsearch zu migrieren. Ein Go-Daemon, der Mongodb in Echtzeit mit Elasticsearch synchronisiert. Es ist der Monstache. Es ist erhältlich bei: Monstache
Unterhalb des anfänglichen Setps zum Konfigurieren und Verwenden.
Schritt 1:
Schritt 2 :
Schritt 3: Überprüfen Sie die Replikation.
Schritt 4. Laden Sie " https://github.com/rwynn/monstache/releases " herunter . Entpacken Sie den Download und passen Sie Ihre PATH-Variable so an, dass sie den Pfad zum Ordner für Ihre Plattform enthält.
"monstache -v"
Gehen Sie zu cmd und geben Sie # 4.13.1 ein. Monstache verwendet das TOML-Format für seine Konfiguration. Konfigurieren Sie die zu migrierende Datei mit dem Namen config.tomlSchritt 5.
Meine config.toml ->
Schritt 6.
quelle
Da Mongo-Connector nun tot erscheint, hat mein Unternehmen beschlossen, ein Tool für die Verwendung von Mongo-Änderungsströmen für die Ausgabe an Elasticsearch zu entwickeln.
Unsere ersten Ergebnisse sehen vielversprechend aus. Sie können es unter https://github.com/electionsexperts/mongo-stream überprüfen . Wir befinden uns noch in einem frühen Entwicklungsstadium und würden Vorschläge oder Beiträge begrüßen.
quelle