MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie verwende ich Elasticsearch mit MongoDB?

Diese Antwort sollte ausreichen, um dieses Tutorial zum Erstellen einer funktionalen Suchkomponente mit MongoDB, Elasticsearch und AngularJS zu befolgen.

Wenn Sie die facettierte Suche mit Daten aus einer API verwenden möchten, sollten Sie sich Matthiasns BirdWatch Repo ansehen.

So können Sie also einen Elasticsearch-„Cluster“ mit einem 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.

sudo apt-get update

Installieren Sie NodeJS.

sudo apt-get install nodejs
sudo apt-get install npm

MongoDB installieren – Diese Schritte stammen direkt aus der MongoDB-Dokumentation. Wählen Sie die Version, mit der Sie sich wohlfühlen. 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 GPG-Schlüssel von MongoDB.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

Aktualisieren Sie Ihre Quellenliste.

echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

Holen Sie sich das 10-Generation-Paket.

sudo apt-get install mongodb-10gen

Wählen Sie dann Ihre Version aus, wenn Sie nicht die neueste möchten. Wenn Sie Ihre Umgebung auf einem Windows 7- oder 8-Computer einrichten, halten Sie sich von v2.6 fern, bis sie einige Fehler behoben haben, indem Sie es als Dienst ausführen.

apt-get install mongodb-10gen=2.4.9

Verhindern, dass die Version Ihrer MongoDB-Installation beim Aktualisieren erhöht wird.

echo "mongodb-10gen hold" | sudo dpkg --set-selections

Starten Sie den MongoDB-Dienst.

sudo service mongodb start

Ihre Datenbankdateien sind standardmäßig unter /var/lib/mongo und Ihre Protokolldateien unter /var/log/mongo.

Erstellen Sie eine Datenbank über die Mongo-Shell und schieben Sie einige Dummy-Daten hinein.

mongo YOUR_DATABASE_NAME
db.createCollection(YOUR_COLLECTION_NAME)
for (var i = 1; i <= 25; i++) db.YOUR_COLLECTION_NAME.insert( { x : i } )

Konvertieren Sie nun die eigenständige MongoDB in einen Replikatsatz.

Fahren Sie zuerst den Prozess herunter.

mongo YOUR_DATABASE_NAME
use admin
db.shutdownServer()

Jetzt führen wir MongoDB als Dienst aus, sodass wir die Option „--replSet rs0“ nicht im Befehlszeilenargument übergeben, wenn wir den Mongod-Prozess neu starten. Stattdessen fügen wir es in die Datei mongod.conf ein.

vi /etc/mongod.conf

Fügen Sie diese Zeilen hinzu und fügen Sie Ihre Datenbank- und Protokollpfade hinzu.

replSet=rs0
dbpath=YOUR_PATH_TO_DATA/DB
logpath=YOUR_PATH_TO_LOG/MONGO.LOG

Öffnen Sie nun die Mongo-Shell erneut, um das Replikat-Set zu initialisieren.

mongo DATABASE_NAME
config = { "_id" : "rs0", "members" : [ { "_id" : 0, "host" : "127.0.0.1:27017" } ] }
rs.initiate(config)
rs.slaveOk() // allows read operations to run on secondary members.

Installieren Sie nun Elasticsearch. Ich folge nur diesem hilfreichen Gist.

Stellen Sie sicher, dass Java installiert ist.

sudo apt-get install openjdk-7-jre-headless -y

Bleiben Sie vorerst bei v1.1.x, bis der Mongo-River-Plugin-Fehler in v1.2.1 behoben wird.

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.deb
sudo dpkg -i elasticsearch-1.1.1.deb

curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz
sudo mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/
sudo rm -Rf *servicewrapper*
sudo /usr/local/share/elasticsearch/bin/service/elasticsearch install
sudo ln -s `readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch

Stellen Sie sicher, dass /etc/elasticsearch/elasticsearch.yml die folgenden Konfigurationsoptionen aktiviert hat, wenn Sie derzeit nur auf einem einzelnen Knoten entwickeln:

cluster.name: "MY_CLUSTER_NAME"
node.local: true

Starten Sie den Elasticsearch-Dienst.

sudo service elasticsearch start

Überprüfen Sie, ob es funktioniert.

curl http://localhost:9200

Wenn du so etwas siehst, dann bist du gut.

{
  "status" : 200,
  "name" : "Chi Demon",
  "version" : {
    "number" : "1.1.2",
    "build_hash" : "e511f7b28b77c4d99175905fac65bffbf4c80cf7",
    "build_timestamp" : "2014-05-22T12:27:39Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

Installieren Sie jetzt die Elasticsearch-Plugins, damit es mit MongoDB spielen kann.

bin/plugin --install com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/1.6.0
bin/plugin --install elasticsearch/elasticsearch-mapper-attachments/1.6.0

Diese beiden Plugins sind nicht notwendig, aber sie eignen sich gut zum Testen von Abfragen und zum Visualisieren von Änderungen an Ihren Indizes.

bin/plugin --install mobz/elasticsearch-head
bin/plugin --install lukas-vlcek/bigdesk

Starten Sie Elasticsearch neu.

sudo service elasticsearch restart

Endlich eine Sammlung von MongoDB indizieren.

curl -XPUT localhost:9200/_river/DATABASE_NAME/_meta -d '{
  "type": "mongodb",
  "mongodb": {
    "servers": [
      { "host": "127.0.0.1", "port": 27017 }
    ],
    "db": "DATABASE_NAME",
    "collection": "ACTUAL_COLLECTION_NAME",
    "options": { "secondary_read_preference": true },
    "gridfs": false
  },
  "index": {
    "name": "ARBITRARY INDEX NAME",
    "type": "ARBITRARY TYPE NAME"
  }
}'

Prüfen Sie, ob sich Ihr Index in Elasticsearch befindet

curl -XGET http://localhost:9200/_aliases

Überprüfen Sie Ihren Clusterzustand.

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'

Es ist wahrscheinlich gelb mit einigen nicht zugewiesenen Scherben. Wir müssen Elasticsearch mitteilen, womit wir arbeiten wollen.

curl -XPUT 'localhost:9200/_settings' -d '{ "index" : { "number_of_replicas" : 0 } }'

Überprüfen Sie den Clusterzustand erneut. Es sollte jetzt grün sein.

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'

Geh spielen.