ElasticSearch
Um mecanismo de busca eficiente e fácil de customizar e manter é uma parte importante do nosso objetivo de fazer com que os usuários possam encontrar serviços do Governo de forma rápida e fácil.
Estudamos algumas ferramentas existentes, e decidimos basear nossa implementação no ElasticSearch.
Características
O ElasticSearch é um mecanismo de indexação e busca de código aberto, que utiliza o Apache Lucene como meio de armazenamento, e incorpora diversas funcionalidades adicionais, necessárias para volumes de dados maiores, como replicação e particionamento dos índices em vários nodos em cluster.
Seu acesso é por meio de APIs REST, ou programaticamente, em Java.
Prós
- Também age como um banco de dados sem esquema (schema-less), onde não é necessário definir os tipos de documentos em configurações ou metadados.
- Documentos e tipos de dados dos campos são inferidos (e ajustados posteriormente caso haja alterações).
- Vários tipos diferentes de documentos podem ser indexados em um único índice.
- Sub-documentos e sub-tipos são suportados, para pesquisas mais específicas.
- Consultas podem ser feitas de forma flexível (tanto na query string quanto no corpo da requisição, em formato JSON).
- Suporta versionamento de documentos, o que evita document locking ao fazer consultas e inserções em paralelo.
- É possível utilizar parametrização para fazer roteamento de requisições manualmente, garantindo que certos dados estarão em nodos ou partições específicas, para maior performance.
- Suporta operações de percolation, onde pode-se consultar as próprias consultas que retornam um determinado documento, o que facilita o desenvolvimento de ferramentas de alerta e monitoramento.
- A maioria das configurações pode ser alterada em tempo de execução, simplificando a operação do índice.
- Estabilidade em situações de carga anormal garantidas por testes automatizados do Jepsen.
Contras
- Ainda é necessário reiniciar o servidor após a mudança de algumas configurações de cluster.
- Algumas mudanças no esquema de documentos requerem a reindexação dos mesmos.
- Não oferece mecanismos de controle de acesso e permissões próprios; estes devem ser providos por outras partes da arquitetura.
- Configurações de infraestrutura necessárias para obter redundância e performance ideal.
Populando
Em desenvolvimento
Para realizar a importação dos dados iniciais (em src/main/resources/portaldeservicos.xml
) é necessária a execução de um importador embutido na aplicação. Em desenvolvimento, esta operação está disponível segunindo o link ServicosGovBr:type=Importador/importar.
Esta operação é destrutiva, e reconstrói o índice do [ElasticSearch] a partir dos dados armazenados no XML.
Em outros ambientes
Em outros ambientes a importação dos dados se dá automaticamente quando o servidor é iniciado.