Configurando ElasticSearch com MongoDB

Recentemente, configurei uma instância de dados de indexação ElasticSearch do MongoDB. Achei que seria útil para outras pessoas colocar minhas anotações online, já que passei horas coletando instruções de vários sites.

De um modo geral, a documentação do ElasticSearch é uma droga. Ele pressupõe um nível de familiaridade com a indexação de pesquisa pronto para uso que o desenvolvedor médio não tem. Configurar o ES ou Solr ou Sphinx é muito mais uma tarefa da administração do sistema, e configurá-lo é uma disciplina por si só.

O ambiente

Eu usei o EC2 executando uma instância do Unbuntu, então minhas notas são bem específicas para esse ambiente. Sempre que possível, usei o gerenciador de pacotes embutido (apt / aptitude) e o gerenciador de serviços (Upstart).

MongoDB

Se você não estiver começando do zero, pode pular esta seção no que se refere à instalação do Mongo.

Para colocar o Mongo em funcionamento no Ubuntu, você precisará seguir as excelentes instruções no site da 10gen .

Você irá adicionar outro upstream para o apt e, em seguida, puxar para baixo e instalar o serviço mongod no Upstart. Não se preocupe, o apt se encarrega de fazer tudo isso por você.

Não tente pular esta etapa. Embora a biblioteca de pacotes apt padrão do Ubuntu contenha o Mongo, é uma versão muito antiga. Eu já tive essa mordida antes.

Configure o Mongo como um conjunto de réplicas

Mesmo se estiver executando uma instância autônoma do Mongo, você precisará convertê-la em um conjunto de réplicas. A razão é que o plug-in ElasticSearch depende do log de operação (ou ‘oplog’, um log de todas as alterações usadas pelo Mongo para se replicar) para enviar novas atualizações para o ElasticSearch. O Mongo carece de suporte integrado para gatilhos, então essa é a segunda melhor opção.

Novamente, siga as instruções aqui para converter sua instância. No entanto, ignore a linha sobre como iniciá-lo com a linha de comando. Já que estamos executando como um serviço, edite para incluir o parâmetro. Não importa o nome do conjunto de replicação, apenas que você se lembre dele e seja consistente com ele.-replSet/etc/mongod.confreplSet

Você pode encontrar mais informações sobre o arquivo de configuração do Mongo aqui .

Instalando ElasticSearch

Achei essa essência inestimável para colocar a versão mais recente do ES instalada e em execução no meu sistema. Ele instalará primeiro um Java runtime, seguido por ES e, em seguida, um wrapper de serviço simples.

Depois de instalar o ES e confirmar que está funcionando enviando uma solicitação HTTP para , você deve instalar dois plug-ins para ativar o suporte para MongoDB.localhost:9200

A primeira é uma dependência chamada Mapper Attachments. Você pode instalar por meio do script de plug-in ES:

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

$ ES_HOME está onde o ES está instalado. Se você seguiu as instruções acima, ele será lançado ./usr/local/share/elasticsearch

O segundo plugin é o ES ‘river’ para Mongo. A sintaxe para instalá-lo é um pouco diferente, pois é um plug-in de terceiros:

plugin -url https://github.com/downloads/richardwilly98/elasticsearch-river-mongodb/elasticsearch-river-mongodb-1.6.1.zip -install river-mongodb

Assim que esses dois plug-ins forem instalados com êxito, você estará pronto para começar. Reinicie o serviço ES antes de prosseguir com a configuração para garantir.

Configurando ElasticSearch

Não quero me aprofundar muito na configuração de seu índice de pesquisa aqui. É um tópico muito rico com muitas coisas específicas para seus dados. Os analisadores padrão que o ES usa são muito bons de qualquer maneira, então vamos ver como você dirige isso.

Você cria e gerencia índices no ES por meio de uma interface RESTful. A maneira mais fácil que encontrei é usando curlscripts bash para enviar cargas JSON que irão instruir o ES sobre como olhar nossos dados.

Exemplo:

#!/bin/sh
curl
-XPUT "localhost:9200/_river/ffxi/_meta" -d '
{

"type": "mongodb",

"mongodb": {

"servers": [

{ "host": "127.0.0.1", "port": 27017 }

],

"options": { "secondary_read_preference": true },

"db": "ffxi",

"collection": "pages"

},

"index": {

"name": "pagesidx",

"type": "page"

}

}'

Observe que o url contém _river. Esta é uma pequena diferença que você notará ao usar plug-ins ‘river’, que é um suporte não nativo para bancos de dados. No entanto, este formato serve apenas para definir e configurar um índice. Quando você consulta, fica mais parecido com:

curl -XGET 'localhost:9200/pagesidx/_search?q=param1