O que é o Elasticsearch?
O Elasticsearch é um poderoso e altamente escalável motor de busca e análise distribuído, construído sobre a biblioteca de busca Apache Lucene. Projetado para lidar com volumes enormes de dados estruturados, semi-estruturados e não estruturados, é adequado para uma ampla gama de casos de uso, incluindo motores de busca, análise de logs, comércio eletrônico e análise de segurança.
Elasticsearch utiliza uma arquitetura distribuída que permite armazenar e processar grandes volumes de dados em vários nós de um cluster. Os dados são indexados e armazenados em fragmentos, que são distribuídos entre os nós para melhorar a escalabilidade e a tolerância a falhas. O Elasticsearch também suporta a busca e análise em tempo real, permitindo que os usuários consultem e analisem os dados quase em tempo real.
Uma das principais características do Elasticsearch é sua capacidade de busca poderosa. Ele suporta uma ampla gama de consultas de busca, incluindo busca de texto completo, busca geoespacial, entre outras. Também oferece suporte a recursos avançados de análise, como agregações, métricas e visualização de dados.
O Elasticsearch é frequentemente usado em conjunto com outras ferramentas no Elastic Stack, incluindo Logstash para coleta e processamento de dados e Kibana para visualização e análise de dados. Juntas, essas ferramentas oferecem uma solução abrangente para busca e análise que pode ser usada para uma ampla gama de aplicações e casos de uso.
O que é o Apache Lucene?
Apache Lucene é uma biblioteca de pesquisa de código aberto que fornece capacidades poderosas de pesquisa e indexação de texto. É amplamente utilizado por desenvolvedores e organizações para construir aplicativos de pesquisa, que vão desde motores de busca até plataformas de comércio eletrônico.
Lucene funciona indexando o conteúdo de texto dos documentos e armazenando o índice em um formato estruturado que pode ser pesquisado de forma eficiente. O índice é composto por uma série de listas invertidas, que fornecem mapeamentos entre termos e os documentos que os contêm. Quando uma consulta de pesquisa é submetida, Lucene usa o índice para recuperar rapidamente os documentos que correspondem à consulta.
Além de suas capacidades de pesquisa e indexação principais, Lucene oferece uma gama de recursos avançados, incluindo suporte para pesquisa difusa e pesquisa espacial. Também fornece ferramentas para destacar resultados de pesquisa e classificar resultados de pesquisa com base na relevância.
Lucene é usado por uma ampla gama de organizações e projetos, incluindo Elasticsearch. Sua rica coleção de recursos, flexibilidade e extensibilidade a tornam uma escolha popular para construir aplicativos de pesquisa de todos os tipos.
O que é Índice Invertido?
O Índice Invertido de Lucene é uma estrutura de dados usada para pesquisar e recuperar dados de texto de forma eficiente a partir de uma coleção de documentos. O Índice Invertido é uma característica central de Lucene e é usado para armazenar os termos e os documentos associados que compõem o índice.
O Índice Invertido oferece várias vantagens em relação a outras estratégias de busca. Primeiro, permite a recuperação rápida e eficiente de documentos com base em termos de pesquisa. Segundo, pode lidar com uma grande quantidade de dados de texto, tornando-o adequado para casos de uso com grandes coleções de documentos. Finalmente, suporta uma ampla gama de recursos avançados de busca, como correspondência aproximada e stemming, que podem melhorar a precisão e a relevância dos resultados da busca.
Por que Elasticsearch?
Há várias razões pelas quais o Elasticsearch é uma escolha popular para construir aplicativos de busca e análise:
Fácil de escalar (Distribuído): O Elasticsearch é projetado para escalar horizontalmente fora da caixa. Sempre que precisar aumentar a capacidade, basta adicionar mais nós e deixar que o cluster se reorganize para aproveitar o hardware extra.
Um servidor pode conter uma ou mais partes de um ou mais índices, e sempre que novos nós são introduzidos ao cluster, eles são simplesmente adicionados à festa. Cada tal índice, ou parte dele, é chamado de shard, e os shards do Elasticsearch podem ser movidos facilmente pelo cluster.
Tudo está a uma chamada JSON (API RESTful): O Elasticsearch é orientado a API. Quase qualquer ação pode ser realizada usando uma simples API RESTful com JSON sobre HTTP. As respostas são sempre em formato JSON.
Poder desbridado do Lucene por baixo dos panos: O Elasticsearch utiliza o Lucene internamente para construir suas capacidades de busca distribuída e análise de ponta. Uma vez que o Lucene é uma tecnologia estável e comprovada, e está sendo constantemente acrescentada de mais funcionalidades e melhores práticas, ter o Lucene como motor subjacente que alimenta o Elasticsearch.
Excelente DSL de Consulta: A API REST expõe um DSL de consulta muito complexo e capaz que é muito fácil de usar. Cada consulta é apenas um objeto JSON que pode conter praticamente qualquer tipo de consulta ou até vários deles combinados. Usar consultas filtradas, com algumas consultas expressas como filtros Lucene, ajuda a aproveitar o cache e, assim, acelerar consultas comuns ou complexas com partes que podem ser reutilizadas.
Multi-Tenant: Múltiplos índices podem ser armazenados em uma instalação única do Elasticsearch – nó ou cluster. O bom é que você pode consultar múltiplos índices com uma única consulta simples.
Suporte para recursos avançados de busca (Texto Completo): O Elasticsearch usa o Lucene nos bastidores para fornecer as mais poderosas capacidades de busca de texto completo disponíveis em qualquer produto de código aberto. A busca vem com suporte multilíngue, uma linguagem de consulta poderosa, suporte para geolocalização, sugestões did-you-mean com consciência de contexto, preenchimento automático e snippets de busca. Suporte a scripts em filtros e escoradores.
Configurável e Extensível: Muitas configurações do Elasticsearch podem ser alteradas enquanto o Elasticsearch está em execução, mas algumas exigirão um restart (e, em alguns casos, reindexação). A maioria das configurações pode ser alterada usando a API REST também.
Orientado a Documentos: Armazene entidades do mundo real complexas no Elasticsearch como documentos JSON estruturados. Todos os campos são indexados por padrão e todas as indices podem ser usadas em uma única consulta para retornar resultados com uma velocidade impressionante.
Schema Livre: O Elasticsearch permite que você comece facilmente. Envie um documento JSON, e ele tentará detectar a estrutura dos dados, indexar os dados e torná-los pesquisáveis.
Gerenciamento de Conflitos: Controle otimista de versão pode ser usado onde necessário para garantir que os dados nunca sejam perdidos devido a mudanças conflitantes de múltiplos processos.
Comunidade Ativa: A comunidade, além de criar ótimas ferramentas e plugins, é muito solidária e apoiadora. O ambiente geral é excelente, e isso é um importante indicador de qualquer projeto de SO aberto. Também existem alguns livros atualmente sendo escritos por membros da comunidade e muitos posts de blog na internet compartilhando experiências e conhecimento.
Arquitetura do Elasticsearch
Os principais componentes da arquitetura do Elasticsearch são:
Nó: Um nó é uma instância do Elasticsearch que armazena dados e fornece capacidades de pesquisa e indexação. Os nós podem ser configurados para serem um nó mestre ou um nó de dados, ou ambos. Os nós mestres são responsáveis pela gestão em escala de cluster, enquanto os nós de dados armazenam os dados e realizam operações de pesquisa.
Cluster: Um cluster é um grupo de um ou mais nós trabalhando juntos para armazenar e processar dados. Um cluster pode conter múltiplos indices (coleções de documentos) e réplicas (uma maneira de distribuir dados em vários nós).
Índice: Um índice é uma coleção de documentos que compartilham uma estrutura semelhante. Cada documento é representado como um objeto JSON e contém um ou mais campos. O Elasticsearch indexa todos os campos por padrão, facilitando a busca e análise de dados.
Partições (Shards): Um índice pode ser dividido em várias partições, que são essencialmente subconjuntos menores do índice. O particionamento permite o processamento paralelo de dados e armazenamento distribuído em vários nós.
Réplicas: O Elasticsearch pode criar réplicas de cada partição para fornecer tolerância a falhas e alta disponibilidade. As réplicas são cópias da partição original e podem estar localizadas em nós diferentes.
Arquitetura de Cluster de Nós de Dados
Os nós de dados são responsáveis por armazenar e indexar dados, bem como executar operações de busca e agregação. A arquitetura é projetada para ser escalável e distribuída, permitindo o dimensionamento horizontal adicionando mais nós ao cluster.
Aqui estão os principais componentes de uma arquitetura de cluster de nós de dados Elasticsearch:
Nó de Dados: Um nó é uma instância do Elasticsearch que armazena dados e fornece capacidades de busca e indexação. Em um cluster de nós de dados, cada nó é responsável por armazenar uma porção dos dados do índice e atender a consultas de busca contra esses dados.
Estado do Cluster: O estado do cluster é uma estrutura de dados que contém informações sobre o cluster, incluindo a lista de nós, índices, partições e suas localizações. O nó mestre é responsável por manter o estado do cluster e distribuí-lo a todos os outros nós no cluster.
Descoberta e transporte: Nós em um cluster Elasticsearch se comunicam entre si usando dois protocolos: descoberta e transporte. O protocolo de descoberta é responsável por detectar novos nós que estão se juntando ao cluster ou nós que deixaram o cluster. O protocolo de transporte é responsável por enviar e receber dados entre nós.
Solicitação de Índice
A solicitação de índice é executada conforme o diagrama de bloco no Elasticsearch.
Quem está usando o Elasticsearch?
Algumas empresas e organizações que utilizam o Elasticsearch:
Netflix: O Netflix usa o Elasticsearch para impulsionar seu mecanismo de busca e recomendações, permitindo que os usuários encontrem rapidamente conteúdo para assistir.
GitHub: O GitHub usa o Elasticsearch para fornecer capacidades de busca rápidas e eficientes em seus repositórios de código, problemas e solicitações de pull.
Uber: O Uber usa o Elasticsearch para impulsionar sua plataforma de análise em tempo real, permitindo que eles rastreiem e analisem dados em seu serviço de caronas em tempo real.
Wikipedia: A Wikipedia usa o Elasticsearch para impulsionar seu mecanismo de busca e fornecer resultados de busca rápidos e precisos aos usuários.
Source:
https://dzone.com/articles/introduction-to-elasticsearch-1