Como utilizar a pesquisa elastica com o MongoDB?

já vi muitos blogs e sites sobre como configurar a pesquisa elastica para o MongoDB indexar Coleções em MongoDB, mas nenhum deles era simples.

por favor, explique-me um processo passo a passo para instalar a elasticsearch, que deve incluir:

  • Configuração
  • Executar no navegador

estou a usar o nó.js com express.js, por favor, ajuda em conformidade.

Author: Mandeep Singh, 2014-05-24

6 answers

Esta resposta deve ser suficiente para que você se prepare para seguir este tutorial em construir um componente de pesquisa funcional com MongoDB, Elasticsearch, e AngularJS.

Se você está olhando para usar a pesquisa facetada com dados de uma API então Matthiasn Birdwatch Repo é algo que você pode querer ver.

Então, aqui está como você pode configurar um único nó Elasticsearch "cluster" para indexar MongoDB para uso em uma aplicação NodeJS, Express em um novo Ubuntu EC2 14.04 instancia. Certifica-te que está tudo actualizado.
sudo apt-get update

Instale NodeJS.

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

Instale MongoDB - estes passos são direitos dos docs MongoDB. Escolha qualquer versão com que se sinta confortável. Continuo com o v2. 4. 9 porque parece ser a versão mais recente do MongoDB-River suporta sem problemas.

Importar a chave pública MongoDB GPG.

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

Actualiza a tua lista de fontes.

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

Traz o 10gen pacote.

sudo apt-get install mongodb-10gen
Então escolha a sua versão se não quiser a mais recente. Se você está configurando o seu ambiente em uma máquina windows 7 ou 8 fique longe de v2. 6 até que eles trabalham alguns bugs para fora com executá-lo como um serviço.
apt-get install mongodb-10gen=2.4.9
Evite que a versão da sua instalação MongoDB seja aumentada quando se actualizar.
echo "mongodb-10gen hold" | sudo dpkg --set-selections
Começa o serviço MongoDB.
sudo service mongodb start

Os seus ficheiros de base de dados por omissão para o /var/lib / mongo e os seus ficheiros de registo para / var/log / mongo.

Crie uma base de dados através da casca de mongo e introduza alguns dados falsos nela.
mongo YOUR_DATABASE_NAME
db.createCollection(YOUR_COLLECTION_NAME)
for (var i = 1; i <= 25; i++) db.YOUR_COLLECTION_NAME.insert( { x : i } )

Agora paraconverter o MongoDB autônomo em um conjunto de réplicas {[[30]}.

Primeiro desliga o processo.
mongo YOUR_DATABASE_NAME
use admin
db.shutdownServer()
Agora estamos a executar o MongoDB como um serviço, para não passarmos na opção "--replSet rs0" no argumento da linha de comando quando reiniciarmos o processo mongod. Em vez disso, pusemo-lo no mongod.ficheiro conf.
vi /etc/mongod.conf

Adicione estas linhas, para os seus caminhos de db e log.

replSet=rs0
dbpath=YOUR_PATH_TO_DATA/DB
logpath=YOUR_PATH_TO_LOG/MONGO.LOG
Agora abra a casca de mongo novamente para inicializar o 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.
Agora instale a busca elastica. Só estou a seguir esta ajuda.

Certifique-se que o Java está instalado.

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

Fique com v1. 1.x por agora até que o bug plugin Mongo-River seja corrigido em 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

Certifica-te /etc/pesquisa elastica/pesquisa elastica.o yml tem as seguintes opções de configuração activadas se só estiver a desenvolver num nó único por agora:

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

Iniciar o serviço de pesquisa elastica.

sudo service elasticsearch start
Verifique se está a funcionar.
curl http://localhost:9200
Se vires algo assim, estás bem.
{
  "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"
}
Agora instale os plugins Elasticsearch para que possa brincar com o MongoDB.
bin/plugin --install com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/1.6.0
bin/plugin --install elasticsearch/elasticsearch-mapper-attachments/1.6.0
Estes dois plugins não são necessários, mas são bons para testar consultas e visualizar alterações nos seus índices.
bin/plugin --install mobz/elasticsearch-head
bin/plugin --install lukas-vlcek/bigdesk

Reiniciar Pesquisa Elastica.

sudo service elasticsearch restart

Finalmente índice a colecção 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"
  }
}'

Verifique se o seu índice está na pesquisa elastica

curl -XGET http://localhost:9200/_aliases
Verifique a saúde do seu grupo.
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
Deve ser amarelo com cacos não classificados. Temos de dizer à Elasticsearch com o que queremos trabalhar.
curl -XPUT 'localhost:9200/_settings' -d '{ "index" : { "number_of_replicas" : 0 } }'
Verifique novamente a saúde dos aglomerados. Deve estar Verde agora.
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
Vai brincar.
 250
Author: Donald Gary, 2015-10-05 16:43:59
O uso do rio pode causar problemas quando a operação aumenta. O River vai usar uma tonelada de memória quando estiver sob forte operação. Eu recomendo a implementação de seus próprios modelos elasticsearch, ou se você está usando mangusto você pode construir seus modelos elasticsearch nele ou usar mongoosastic que essencialmente faz isso para você. Outra desvantagem para o Rio Mongodb é que você vai ficar preso usando mongodb 2.4.x branch, and ElasticSearch 0.90.X. Você vai começar a achar que você está perdendo um monte de recursos realmente bons, e o projeto rio mongodb simplesmente não produz um produto utilizável rápido o suficiente para manter estável. Dito isto, o Rio Mongodb não é definitivamente algo com que eu iria para a produção. Já causou mais problemas do que o seu valor. Ele vai cair aleatoriamente escrever sob carga pesada, ele vai consumir muita memória, e não há nenhuma configuração para tapar isso. Além disso, river não se atualiza em tempo real, lê oplogs do mongodb, e isso pode atrasar atualizações para como cinco minutos na minha experiência. Recentemente tivemos de reescrever uma grande parte do nosso projecto, porque é uma ocorrência semanal que algo corre mal com a pesquisa elastica. Nós até fomos ao ponto de contratar um consultor da Dev Ops, que também concorda que é o melhor para se afastar do Rio.

Actualização: Elasticsearch-mongodb-river agora suporta ES v1. 4. 0 e mongodb v2. 6.x. no entanto, você ainda provavelmente vai ter problemas de desempenho em operações pesadas de inserção / atualização como este o 'plugin' irá tentar ler os oplogs do mongodb para sincronizar. Se houver um monte de operações desde que o bloqueio(ou fechamento em vez disso) desbloqueia, você vai notar uma utilização de memória extremamente alta em seu servidor elasticsearch. Se você planeja ter uma grande operação, river não é uma boa opção. Os desenvolvedores da ElasticSearch ainda recomendam que você gerencie seus próprios índices comunicando diretamente com sua API usando a biblioteca cliente para seu idioma, em vez de usar a river. Este não é o propósito do river. O Twitter-river é um grande exemplo de como o rio deve ser usado. É essencialmente uma ótima maneira de fonte de dados de fontes externas, mas não muito confiável para alto tráfego ou uso interno.

{[1] também considere que o rio mongodb fica para trás na versão, uma vez que não é mantido pela Organização ElasticSearch, é mantido por um terceiro partido. O desenvolvimento foi preso em v0.90 ramo por um longo tempo após o lançamento de v1.0, e quando uma versão para v1.0 foi lançado não era estável até elasticsearch lançou v1. 3. 0. Versões Mongodb também ficam para trás. Você pode encontrar - se em um local apertado quando você está olhando para se mover para uma versão posterior de cada um, especialmente com ElasticSearch sob um desenvolvimento tão pesado, com muitas características muito antecipadas no caminho. Manter-se a par da mais recente pesquisa elastica tem sido muito importante, uma vez que contamos fortemente em melhorar constantemente a nossa funcionalidade de pesquisa como parte fundamental do nosso produto. Em suma, é provável que consiga um produto melhor se o fizer. se. Não é assim tão difícil. É apenas um outro banco de dados para gerenciar em seu código, e ele pode facilmente ser deixado em seus modelos existentes sem grande refactoring.
 32
Author: tsturzl, 2016-06-23 00:17:02
Achei o conector mongo útil. É a forma Mongo Labs (MongoDB Inc.) e pode ser usado agora com Elasticsearch 2.x

Elástico 2.Gestor de doc x: https://github.com/mongodb-labs/elastic2-doc-manager

O conector Mongo cria um gasoduto de um aglomerado MongoDB para um ou mais sistemas-alvo, como Solr, Elasticsearch ou outro aglomerado MongoDB. Ele sincroniza dados em MongoDB para o alvo, em seguida, segue o Oplog MongoDB, mantendo-se com as operações em MongoDB em tempo. Ele foi testado com python 2.6, 2.7 e 3.3+. A documentação detalhada está disponível no wiki.

Https://github.com/mongodb-labs/mongo-connector https://github.com/mongodb-labs/mongo-connector/wiki/Usage%20with%20ElasticSearch

 4
Author: Lokendra Chauhan, 2016-09-26 13:29:51
Como fazer isto no mongodb 3.0? Eu usei esse blog legal
  1. Instale o mongodb.
  2. Criar pastas de Dados:
$ mkdir RANDOM_PATH/node1
$ mkdir RANDOM_PATH/node2> 
$ mkdir RANDOM_PATH/node3
  1. iniciar instâncias Mongod
$ mongod --replSet test --port 27021 --dbpath node1
$ mongod --replSet test --port 27022 --dbpath node2
$ mongod --replSet test --port 27023 --dbpath node3
  1. Configure o conjunto de réplicas:
$ mongo
config = {_id: 'test', members: [ {_id: 0, host: 'localhost:27021'}, {_id: 1, host: 'localhost:27022'}]};    
rs.initiate(config);
  1. Instalar A Pesquisa Elastica:
a. Download and unzip the [latest Elasticsearch][2] distribution

b. Run bin/elasticsearch to start the es server.

c. Run curl -XGET http://localhost:9200/ to confirm it is working.
  1. Instalar e configurar o Rio MongoDB:

$ bin / plugin --instalar suplemento.github.richardwilly98.elasticsearch / elasticsearch-river-mongodb

$ bin/plugin --install elasticsearch/elasticsearch-mapper-attachments

  1. Criar o "rio"e o índice:

Curl-XPUT 'http://localhost:8080/_river/mongodb/_meta' -d '{ "tipo":"mongodb", "mongodb": "db": "mydb", "colecção": "foo" }, "indice": { "nome", "tipo": "aleatório" } }'

  1. Teste no navegador:

    Http://localhost:9200/_search?q = casa

 2
Author: Priyanshu Chauhan, 2015-11-03 09:35:53

Desde que o conector mongo agora aparece morto, a minha empresa decidiu construir uma ferramenta para usar o Mongo mudar fluxos para a pesquisa elastica.

Os nossos resultados iniciais parecem promissores. Podes verificar em https://github.com/everyone-counts/mongo-stream ainda estamos no início do desenvolvimento, e gostaríamos de receber sugestões ou contribuições.
 1
Author: Jud, 2018-02-06 01:11:00
O Rio é uma boa solução quando se quer ter uma sincronização em tempo quase real e uma solução geral.

Se já tiver dados em MongoDB e quiser enviá-los muito facilmente para a busca elastica como "one-shot", pode tentar o meu pacote no nó.js https://github.com/itemsapi/elasticbulk.

Está a usar o nó.fluxos de js para que você possa importar dados de tudo o que está suportando fluxos (ou seja, MongoDB, PostgreSQL, MySQL, arquivos JSON, etc)

Exemplo para MongoDB to Elasticsearch:

Instalar Pacotes:

npm install elasticbulk
npm install mongoose
npm install bluebird

Criar um script ou seja, um script.js:

const elasticbulk = require('elasticbulk');
const mongoose = require('mongoose');
const Promise = require('bluebird');
mongoose.connect('mongodb://localhost/your_database_name', {
  useMongoClient: true
});

mongoose.Promise = Promise;

var Page = mongoose.model('Page', new mongoose.Schema({
  title: String,
  categories: Array
}), 'your_collection_name');

// stream query 
var stream = Page.find({
}, {title: 1, _id: 0, categories: 1}).limit(1500000).skip(0).batchSize(500).stream();

elasticbulk.import(stream, {
  index: 'my_index_name',
  type: 'my_type_name',
  host: 'localhost:9200',
})
.then(function(res) {
  console.log('Importing finished');
})

Envia os teus dados:

node script.js
Não é extremamente rápido, mas trabalha para milhões de discos (graças aos fluxos).
 0
Author: Mateusz Rzepa, 2018-01-16 09:03:39