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.