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.