Dit antwoord zou voldoende moeten zijn om u in staat te stellen deze tutorial te volgen over het bouwen van een functionele zoekcomponent met MongoDB, Elasticsearch en AngularJS.
Als u gefacetteerd zoeken wilt gebruiken met gegevens van een API, dan is Matthiasn's BirdWatch Repo iets dat u misschien wilt bekijken.
Dus hier leest u hoe u een Elasticsearch-"cluster" met één knooppunt kunt instellen om MongoDB te indexeren voor gebruik in een NodeJS, Express-app op een nieuwe EC2 Ubuntu 14.04-instantie.
Zorg ervoor dat alles up-to-date is.
sudo apt-get update
Installeer NodeJS.
sudo apt-get install nodejs
sudo apt-get install npm
Installeer MongoDB - Deze stappen komen rechtstreeks uit MongoDB-documenten. Kies de versie waar u zich prettig bij voelt. Ik blijf bij v2.4.9 omdat het de meest recente versie lijkt te zijn die MongoDB-River zonder problemen ondersteunt.
Importeer de MongoDB openbare GPG-sleutel.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
Werk je bronnenlijst bij.
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
Download het 10gen-pakket.
sudo apt-get install mongodb-10gen
Kies vervolgens uw versie als u niet de meest recente wilt. Als u uw omgeving instelt op een Windows 7- of 8-machine, blijf dan weg van v2.6 totdat ze een aantal bugs hebben opgelost door het als een service uit te voeren.
apt-get install mongodb-10gen=2.4.9
Voorkom dat de versie van uw MongoDB-installatie wordt verhoogd wanneer u bijwerkt.
echo "mongodb-10gen hold" | sudo dpkg --set-selections
Start de MongoDB-service.
sudo service mongodb start
Uw databasebestanden staan standaard op /var/lib/mongo en uw logbestanden op /var/log/mongo.
Maak een database via de mongo-shell en duw er wat dummy-gegevens in.
mongo YOUR_DATABASE_NAME
db.createCollection(YOUR_COLLECTION_NAME)
for (var i = 1; i <= 25; i++) db.YOUR_COLLECTION_NAME.insert( { x : i } )
Nu de standalone MongoDB converteren naar een replicaset.
Sluit eerst het proces af.
mongo YOUR_DATABASE_NAME
use admin
db.shutdownServer()
Nu gebruiken we MongoDB als een service, dus we geven de optie "--replSet rs0" niet door in het opdrachtregelargument wanneer we het mongod-proces opnieuw starten. In plaats daarvan plaatsen we het in het bestand mongod.conf.
vi /etc/mongod.conf
Voeg deze regels toe, subbbing voor uw db- en logpaden.
replSet=rs0
dbpath=YOUR_PATH_TO_DATA/DB
logpath=YOUR_PATH_TO_LOG/MONGO.LOG
Open nu de mongo-shell opnieuw om de replicaset te initialiseren.
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.
Installeer nu Elasticsearch. Ik volg gewoon deze nuttige kern.
Zorg ervoor dat Java is geïnstalleerd.
sudo apt-get install openjdk-7-jre-headless -y
Blijf voorlopig bij v1.1.x totdat de bug van de Mongo-River-plug-in is opgelost in 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
Zorg ervoor dat /etc/elasticsearch/elasticsearch.yml de volgende configuratie-opties heeft ingeschakeld als je voorlopig alleen op een enkel knooppunt ontwikkelt:
cluster.name: "MY_CLUSTER_NAME"
node.local: true
Start de Elasticsearch-service.
sudo service elasticsearch start
Controleer of het werkt.
curl http://localhost:9200
Als je zoiets ziet, zit je goed.
{
"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"
}
Installeer nu de Elasticsearch-plug-ins zodat het met MongoDB kan spelen.
bin/plugin --install com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/1.6.0
bin/plugin --install elasticsearch/elasticsearch-mapper-attachments/1.6.0
Deze twee plug-ins zijn niet nodig, maar ze zijn goed voor het testen van zoekopdrachten en het visualiseren van wijzigingen in uw indexen.
bin/plugin --install mobz/elasticsearch-head
bin/plugin --install lukas-vlcek/bigdesk
Start Elasticsearch opnieuw.
sudo service elasticsearch restart
Indexeer eindelijk een verzameling van 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"
}
}'
Controleer of uw index in Elasticsearch staat
curl -XGET http://localhost:9200/_aliases
Controleer uw clusterstatus.
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
Het is waarschijnlijk geel met wat niet-toegewezen scherven. We moeten Elasticsearch vertellen waar we mee willen werken.
curl -XPUT 'localhost:9200/_settings' -d '{ "index" : { "number_of_replicas" : 0 } }'
Controleer de clusterstatus opnieuw. Het zou nu groen moeten zijn.
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
Ga spelen.