sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur använder man Elasticsearch med MongoDB?

Det här svaret borde vara tillräckligt för att du ska kunna följa den här handledningen om att bygga en funktionell sökkomponent med MongoDB, Elasticsearch och AngularJS.

Om du funderar på att använda facetterad sökning med data från ett API så är Matthiasns BirdWatch Repo något du kanske vill titta på.

Så här är hur du kan ställa in ett Elasticsearch-kluster för en enda nod för att indexera MongoDB för användning i en NodeJS, Express-app på en ny EC2 Ubuntu 14.04-instans.

Se till att allt är uppdaterat.

sudo apt-get update

Installera NodeJS.

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

Installera MongoDB - Dessa steg är direkt från MongoDB docs. Välj vilken version du är bekväm med. Jag håller fast vid v2.4.9 eftersom det verkar vara den senaste versionen som MongoDB-River stöder utan problem.

Importera MongoDB offentliga GPG-nyckel.

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

Uppdatera din källlista.

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

Skaffa 10gen-paketet.

sudo apt-get install mongodb-10gen

Välj sedan din version om du inte vill ha den senaste. Om du ställer in din miljö på en Windows 7- eller 8-maskin, håll dig borta från v2.6 tills de löser några buggar med att köra den som en tjänst.

apt-get install mongodb-10gen=2.4.9

Förhindra att versionen av din MongoDB-installation stöts upp när du uppdaterar.

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

Starta MongoDB-tjänsten.

sudo service mongodb start

Dina databasfiler är som standard /var/lib/mongo och dina loggfiler till /var/log/mongo.

Skapa en databas genom mongo-skalet och tryck in lite dummydata i den.

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

Nu för att konvertera den fristående MongoDB till en replikuppsättning.

Stäng först av processen.

mongo YOUR_DATABASE_NAME
use admin
db.shutdownServer()

Nu kör vi MongoDB som en tjänst, så vi skickar inte in alternativet "--replSet rs0" i kommandoradsargumentet när vi startar om mongod-processen. Istället lägger vi den i filen mongod.conf.

vi /etc/mongod.conf

Lägg till dessa rader, subb för din db och logga sökvägar.

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

Öppna nu mongoskalet igen för att initiera replikuppsättningen.

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.

Installera nu Elasticsearch. Jag följer bara denna hjälpsamma sammanfattning.

Se till att Java är installerat.

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

Håll dig till v1.1.x nu tills Mongo-River plugin-felet fixas i v1.2.1.

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

Se till att /etc/elasticsearch/elasticsearch.yml har följande konfigurationsalternativ aktiverade om du bara utvecklar på en enda nod för tillfället:

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

Starta Elasticsearch-tjänsten.

sudo service elasticsearch start

Kontrollera att det fungerar.

curl http://localhost:9200

Om du ser något liknande så är du bra.

{
  "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"
}

Installera nu Elasticsearch-plugins så att det kan spela med MongoDB.

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

Dessa två plugins är inte nödvändiga men de är bra för att testa frågor och visualisera ändringar i dina index.

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

Starta om Elasticsearch.

sudo service elasticsearch restart

Äntligen indexera en samling från MongoDB.

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"
  }
}'

Kontrollera att ditt index finns i Elasticsearch

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

Kontrollera din klusterhälsa.

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

Den är förmodligen gul med några otilldelade skärvor. Vi måste berätta för Elasticsearch vad vi vill arbeta med.

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

Kontrollera klustrets hälsa igen. Det borde vara grönt nu.

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

Gå och spela.



  1. Mongo Fråga $gt,$lt

  2. Steg för att installera MongoDB på Amazon Linux

  3. MongoDB Regular Expression Search - Börjar med att använda javascript-drivrutinen och NodeJS

  4. Hantera långvarig verksamhet i MongoDB