sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan bruger man Elasticsearch med MongoDB?

Dette svar burde være nok til at få dig sat op til at følge denne vejledning om at bygge en funktionel søgekomponent med MongoDB, Elasticsearch og AngularJS.

Hvis du ønsker at bruge facetteret søgning med data fra en API, så er Matthiasns BirdWatch Repo noget, du måske vil se på.

Så her er, hvordan du kan opsætte en enkelt node Elasticsearch "cluster" til at indeksere MongoDB til brug i en NodeJS, Express-app på en ny EC2 Ubuntu 14.04-instans.

Sørg for, at alt er opdateret.

sudo apt-get update

Installer NodeJS.

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

Installer MongoDB - Disse trin er direkte fra MongoDB docs.Vælg den version, du er komfortabel med. Jeg holder fast i v2.4.9, fordi det ser ud til at være den seneste version, som MongoDB-River understøtter uden problemer.

Importer MongoDB offentlige GPG-nøgle.

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

Opdater din kildeliste.

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

Få 10gen-pakken.

sudo apt-get install mongodb-10gen

Vælg derefter din version, hvis du ikke vil have den nyeste. Hvis du sætter dit miljø op på en Windows 7- eller 8-maskine, hold dig væk fra v2.6, indtil de løser nogle fejl med at køre det som en tjeneste.

apt-get install mongodb-10gen=2.4.9

Undgå, at versionen af ​​din MongoDB-installation stødes op, når du opdaterer.

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

Start MongoDB-tjenesten.

sudo service mongodb start

Dine databasefiler er som standard /var/lib/mongo og dine logfiler til /var/log/mongo.

Opret en database gennem mongo-skallen og skub nogle dummy-data ind 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 skal du konvertere den selvstændige MongoDB til et replikasæt.

Luk først processen.

mongo YOUR_DATABASE_NAME
use admin
db.shutdownServer()

Nu kører vi MongoDB som en tjeneste, så vi sender ikke "--replSet rs0"-indstillingen i kommandolinjeargumentet, når vi genstarter mongod-processen. I stedet lægger vi det i mongod.conf-filen.

vi /etc/mongod.conf

Tilføj disse linjer, subb efter din db og log stier.

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

Åbn nu mongo-skallen igen for at initialisere replikasættet.

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.

Installer nu Elasticsearch. Jeg følger bare denne nyttige oversigt.

Sørg for, at Java er installeret.

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

Hold dig til v1.1.x indtil videre, indtil Mongo-River plugin-fejlen bliver rettet 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

Sørg for, at /etc/elasticsearch/elasticsearch.yml har følgende konfigurationsmuligheder aktiveret, hvis du kun udvikler på en enkelt node i øjeblikket:

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

Start Elasticsearch-tjenesten.

sudo service elasticsearch start

Bekræft, at det virker.

curl http://localhost:9200

Hvis du ser noget som dette, så er du god.

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

Installer nu Elasticsearch plugins, så det kan spille 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

Disse to plugins er ikke nødvendige, men de er gode til at teste forespørgsler og visualisere ændringer i dine indekser.

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

Genstart Elasticsearch.

sudo service elasticsearch restart

Indekser endelig en samling fra 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"
  }
}'

Tjek, at dit indeks er i Elasticsearch

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

Tjek din klyngesundhed.

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

Den er formentlig gul med nogle ikke-tildelte skår. Vi skal fortælle Elasticsearch, hvad vi vil arbejde med.

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

Tjek klyngens helbred igen. Det skulle være grønt nu.

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

Gå og spil.



  1. Få sidst indsatte dokument-id i MongoDB med Java-driver

  2. ServiceStack Redis, hvordan man returnerer Lua-tabellen som liste

  3. Indsæt json-fil i mongodb

  4. Hvordan løser man mongoDB-relateret problem effektivt?