sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo usar Elasticsearch con MongoDB?

Esta respuesta debería ser suficiente para que pueda seguir este tutorial sobre la creación de un componente de búsqueda funcional con MongoDB, Elasticsearch y AngularJS.

Si desea utilizar la búsqueda por facetas con datos de una API, BirdWatch Repo de Matthiasn es algo que podría interesarle.

Así es como puede configurar un "clúster" de Elasticsearch de un solo nodo para indexar MongoDB para usar en una aplicación NodeJS, Express en una instancia EC2 Ubuntu 14.04 nueva.

Asegúrate de que todo esté actualizado.

sudo apt-get update

Instale NodeJS.

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

Instale MongoDB:estos pasos provienen directamente de los documentos de MongoDB. Elija la versión con la que se sienta cómodo. Me quedo con v2.4.9 porque parece ser la versión más reciente compatible con MongoDB-River sin problemas.

Importe la clave GPG pública de MongoDB.

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

Actualice su lista de fuentes.

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

Obtenga el paquete 10gen.

sudo apt-get install mongodb-10gen

Luego elige tu versión si no quieres la más reciente. Si está configurando su entorno en una máquina con Windows 7 u 8, manténgase alejado de v2.6 hasta que resuelvan algunos errores al ejecutarlo como un servicio.

apt-get install mongodb-10gen=2.4.9

Evite que la versión de su instalación de MongoDB se actualice cuando actualice.

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

Inicie el servicio MongoDB.

sudo service mongodb start

Sus archivos de base de datos están predeterminados en /var/lib/mongo y sus archivos de registro en /var/log/mongo.

Cree una base de datos a través del shell mongo e inserte algunos datos ficticios en ella.

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

Ahora, para convertir el MongoDB independiente en un conjunto de réplicas.

Primero cierre el proceso.

mongo YOUR_DATABASE_NAME
use admin
db.shutdownServer()

Ahora estamos ejecutando MongoDB como un servicio, por lo que no pasamos la opción "--replSet rs0" en el argumento de la línea de comando cuando reiniciamos el proceso mongod. En cambio, lo ponemos en el archivo mongod.conf.

vi /etc/mongod.conf

Agregue estas líneas, reemplazando su base de datos y rutas de registro.

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

Ahora abra el shell mongo nuevamente para inicializar el conjunto de réplicas.

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.

Ahora instale Elasticsearch. Solo estoy siguiendo este Gist útil.

Asegúrese de que Java esté instalado.

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

Siga con la versión 1.1.x por ahora hasta que el error del complemento Mongo-River se solucione en la versión 1.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

Asegúrese de que /etc/elasticsearch/elasticsearch.yml tenga habilitadas las siguientes opciones de configuración si solo está desarrollando en un solo nodo por ahora:

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

Inicie el servicio Elasticsearch.

sudo service elasticsearch start

Verifica que esté funcionando.

curl http://localhost:9200

Si ves algo como esto, estás bien.

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

Ahora instale los complementos de Elasticsearch para que pueda jugar con MongoDB.

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

Estos dos complementos no son necesarios, pero son buenos para probar consultas y visualizar cambios en sus índices.

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

Reinicie Elasticsearch.

sudo service elasticsearch restart

Finalmente, indexe una colección de 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"
  }
}'

Comprueba que tu índice está en Elasticsearch

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

Comprueba el estado de tu clúster.

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

Probablemente sea amarillo con algunos fragmentos sin asignar. Tenemos que decirle a Elasticsearch con qué queremos trabajar.

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

Vuelva a comprobar el estado del clúster. Debería ser verde ahora.

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

Ve a jugar.