sql >> Database >  >> NoSQL >> MongoDB

Hoe Elasticsearch gebruiken met MongoDB?

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.



  1. MongoDB versus DynamoDB:wat u moet weten

  2. De cache_store instellen in een initializer

  3. Redis:Hoe kan ik een normale set doorsnijden met een gesorteerde set?

  4. Waarom neemt MongoDB zoveel ruimte in beslag?