Documento de pesquisa sobre seleção de motores de busca
Introdução ao Elasticsearch*
Elasticsearch é um mecanismo de busca e análise distribuído em tempo real. Isso ajuda você a processar dados em grande escala mais rápido do que nunca.
Ele pode ser usado para busca em texto completo, busca estruturada e análises, e, claro, você pode combinar os três.
Elasticsearch é um mecanismo de busca construído sobre o mecanismo de busca em texto completo Apache Lucene™, que pode ser considerado o framework de motor de busca open source mais avançado e eficiente disponível atualmente.
Mas Lucene é apenas um framework, e para aproveitar ao máximo seus recursos, você precisa usar JAVA e integrar Lucene ao seu programa. É preciso muito aprender para entender como funciona, e Lucene é realmente complicado.
O Elasticsearch usa o Lucene como seu motor interno, mas ao usá-lo para busca em texto completo, você só precisa usar uma API unificada sem entender os complexos princípios operacionais do Lucene por trás dele.
Claro, o Elasticsearch não é tão simples quanto o Lucene, ele não só inclui funções de busca em texto completo, como também pode executar as seguintes tarefas:
- Armazenamento distribuído em tempo real e indexação de cada campo para que ele possa ser pesquisado.
- Mecanismo de busca distribuído com análises em tempo real.
- Ele pode escalar para centenas de servidores para lidar com petabytes de dados estruturados ou não estruturados.
Com tantos recursos integrados em um único servidor, você pode facilmente se comunicar com a API RESTful do ES via o cliente ou qualquer uma das suas linguagens de programação preferidas.
Começar com o Elasticsearch é muito simples. Ele vem com muitos padrões muito razoáveis, o que o torna uma boa forma para iniciantes evitarem ter que lidar com teorias complexas assim que começam.
Ele está instalado e pronto para uso, e pode ser muito produtivo com um pequeno custo de aprendizado.
À medida que você aprende mais, também pode aproveitar recursos mais avançados do Elasticsearch, e todo o motor pode ser configurado de forma flexível. Você pode personalizar seu próprio Elasticsearch de acordo com suas necessidades.
Casos de Uso:
- A Wikipédia usa o Elasticsearch para fazer buscas em texto completo e destacar palavras-chave, além de sugestões de busca como pesquisar enquanto você escreve e "você queria dizer".
- O Guardian usa o Elasticsearch para processar registros de visitantes, permitindo que os editores sejam informados sobre reações públicas a diferentes artigos em tempo real.
- O StackOverflow combina busca em texto completo com geolocalização e informações relevantes para fornecer uma representação de perguntas relacionadas a mais semelhantes a esta.
- O GitHub usa o Elasticsearch para recuperar mais de 130 bilhões de linhas de código.
- Todos os dias, o Goldman Sachs o utiliza para indexar 5TB de dados, e muitos bancos de investimento o utilizam para analisar os movimentos do mercado de ações.
Mas o Elasticsearch não é apenas para grandes empresas, ele também ajudou muitas startups como DataDog e Klout a expandirem suas capacidades.
Prós e contras do Elasticsearch**:
mérito
- Elasticsearch é distribuído. Nenhum outro componente é necessário, e a distribuição é em tempo real, conhecida como "replicação Push".
- O Elasticsearch suporta totalmente busca quase em tempo real com o Apache Lucene.
- Gerenciar multitenência não requer configuração especial, enquanto Solr exige configurações mais avançadas.
- O Elasticsearch usa o conceito de Gateway para facilitar o backup.
- Cada nó forma uma estrutura de rede igual e, quando alguns nós falham, outros nós são automaticamente designados para trabalhar em seu lugar.
deficiência
- Apenas um desenvolvedor (a atual organização GitHub do Elasticsearch é mais do que isso, já tem mantenedores bastante ativos)
- Não é automático o suficiente (não é adequado para a nova API Index Warmup atual)
Sobre Solr*
Solr (pronuncia-se "solar") é uma plataforma de busca empresarial de código aberto para o projeto Apache Lucene. Seus principais recursos incluem busca em texto completo, marcação de acertos, busca facetada, clustering dinâmico, integração de banco de dados e processamento de texto enriquecido (por exemplo, Word, PDF). O Solr é altamente escalável e oferece busca distribuída e replicação de índice. Solr é o mecanismo de busca empresarial mais popular, e Solr4 também adiciona suporte a NoSQL.
Solr é um servidor de busca autônomo, em texto completo, escrito em Java que roda em um contêiner servlet, como Apache, Tomcat ou Jetty. Solr utiliza a biblioteca de busca Java Lucene como base para indexação e busca em texto completo, e possui APIs HTTP/XML e JSON semelhantes a REST. As poderosas capacidades de configuração externa de Solr facilitam a adaptação a muitos tipos de aplicações sem necessidade de codificação em Java. Solr possui uma arquitetura de plugins para suportar personalizações mais avançadas.
Devido à fusão dos projetos Apache Lucene e Apache Solr em 2010, os dois projetos foram criados e implementados pela mesma equipe de desenvolvimento da Apache Software Foundation. Quando se trata de tecnologia ou produtos, Lucene/Solr ou Solr/Lucene é igual.
Prós e contras do Solr:
mérito
- O Solr possui uma comunidade maior e mais madura de usuários, desenvolvedores e colaboradores.
- Suporta a adição de índices em múltiplos formatos, como HTML, PDF, formatos de software Microsoft Office e formatos de texto simples como JSON, XML, CSV, etc.
- Solr é relativamente maduro e estável.
- A busca enquanto indexa não é considerada, e a velocidade é maior.
deficiência
- Quando o índice é estabelecido, a eficiência da busca diminui, e a eficiência da busca em tempo real não é alta.
Elasticsearch vs Solr*
O Solr é mais rápido quando simplesmente busca dados existentes.
Ao indexar em tempo real, o Solr causa bloqueio de IO e desempenho ruim de consultas, o que o Elasticsearch tem uma vantagem clara.
À medida que a quantidade de dados aumenta, a eficiência de busca do Solr diminui, enquanto o Elasticsearch não muda significativamente.
Em resumo, a arquitetura do Solr não é adequada para aplicações de busca em tempo real.
Testes de produção no mundo real*
A figura abaixo mostra um aumento de 50 vezes na velocidade média de consulta após a troca do Solr para o Elasticsearch.
Resumo da comparação entre Elasticsearch e Solr
- Ambos são fáceis de instalar;
- Solr utiliza o Zookeeper para gerenciamento distribuído, enquanto o próprio Elasticsearch possui gerenciamento de orquestração distribuída;
- Solr suporta mais formatos de dados, enquanto Elasticsearch suporta apenas formatos de arquivo JSON;
- O Solr oficialmente oferece mais recursos, enquanto o próprio Elasticsearch foca mais nas funções principais, e funções avançadas são fornecidas principalmente por plugins de terceiros.
- Solr supera o Elasticsearch em aplicações tradicionais de busca, mas é significativamente menos eficiente que o Elasticsearch ao lidar com aplicações de busca em tempo real.
- Solr é uma solução poderosa para aplicações tradicionais de busca, mas o Elasticsearch é mais adequado para aplicações emergentes de busca em tempo real.
Outras soluções de mecanismos de busca open source baseadas em Lucene*
1: Use Lucene diretamente
Nota: Lucene é uma biblioteca de busca JAVA que não é uma solução completa por si só e requer esforço adicional de desenvolvimento.
Vantagens: Solução madura com muitos casos bem-sucedidos. Projetos de alto nível do Apache que continuam avançando rapidamente. Grande e ativa comunidade de desenvolvimento, um grande número de desenvolvedores. É apenas uma biblioteca de classes, com espaço suficiente para personalização e otimização: após personalização simples, pode atender à maioria das necessidades comuns; Otimizado para suportar 1 bilhão+ de buscas.
Contras: Requer esforço adicional de desenvolvimento. Todo escalonamento, distribuição, confiabilidade, etc. precisa ser implementado por você mesmo; Em não-tempo real, há um atraso entre indexação e busca, e a escalabilidade do esquema atual de busca "Lucene Near Real Time search" precisa ser ainda melhorada
O login do hiperlink está visível.
2:Katta
Nota: Esquema de busca distribuído, escalável, tolerante a falhas e quase em tempo real de suporte baseado em Lucene.
Prós: Distribuído pronto com Hadoop. Possui um mecanismo de escala e tolerância a falhas.
Desvantagens: É apenas uma solução de busca, e você ainda precisa implementar a parte da indexação por conta própria. Em termos de função de busca, apenas as necessidades mais básicas são atendidas. Há menos histórias de sucesso e a maturidade do projeto é um pouco menor. Como precisa suportar distribuição, será difícil personalizá-lo para alguns requisitos complexos de consulta.
O login do hiperlink está visível.
3: Contrib/índice Hadoop
Nota: O modo Map/Reduce, uma solução de indexação distribuída, pode ser usado com o Katta.
Vantagens: Indexação distribuída e escalabilidade.
Desvantagens: Apenas o esquema de indexação, não a implementação da busca. Funciona em modo batch com suporte ruim para busca em tempo real.
O login do hiperlink está visível.
4: A solução de código aberto do LinkedIn
Descrição: Uma variedade de soluções baseadas no Lucene, incluindo Zoie para busca quase em tempo real, Bobo para busca de facet, Decomposer para algoritmos de aprendizado de máquina, Krati para repositórios de sumarização, Sensei para envolvimento de esquemas de banco de dados e mais
Vantagens: Solução comprovada que suporta implementação distribuída, escalável e rica em recursos
Contras: Muito ligado à empresa do LinkedIn e baixa personalização
O login do hiperlink está visível.
5:Lucandra
Nota: Com base no Lucene, o índice existe no banco de dados Cassandra
Prós: Consulte as vantagens da Cassandra
Contras: Consulte as desvantagens de Cassandra. Além disso, isso é apenas uma demonstração e não foi amplamente verificado
O login do hiperlink está visível.
6:HBasene
Nota: Com base no Lucene, o índice existe no banco de dados HBase
Benefícios: Consulte as vantagens da HBase
Desvantagens: Consulte as desvantagens da HBase. Além disso, na implementação, os termos lucene são armazenados como linhas, mas as listas de postagem correspondentes a cada termo são armazenadas como colunas. À medida que o número de listas de postagem para um único termo cresce, a velocidade da consulta será muito afetada
O login do hiperlink está visível.
7: Xunsearch
Nota: O Xunsearch adota um design hierárquico estruturado, incluindo serviços de back-end e pacotes de desenvolvimento front-end, com hierarquias claras e sem interseção. O backend é um daemon escrito em C/C++, enquanto o frontend usa PHP, a linguagem de script mais popular, mais conveniente para projetos de busca na web. Para detalhes, veja Design de Arquitetura.
O login do hiperlink está visível.
|