Solr vs. ElasticSearch

Quais são as principais diferenças arquitetônicas entre essas tecnologias?

Além disso, quais casos de uso são geralmente mais apropriados para cada um?

Atualizar

Agora que o escopo da questão foi corrigido, devo acrescentar algo a esse respeito também:

Existem muitas comparações entre o Apache Solr e o ElasticSearch disponíveis, então eu vou referenciar aquelas que eu achei mais úteis, isto é, cobrindo os aspectos mais importantes:

  • Bob Yoplait já ligou a resposta de Kimchy a ElasticSearch, Sphinx, Lucene, Solr, Xapian. Qual se encheckbox para qual uso? , que resume as razões pelas quais ele foi em frente e criou o ElasticSearch , que em sua opinião fornece um modelo distribuído muito superior e facilidade de uso em comparação com o Solr.

  • A Busca em Tempo Real de Ryan Sonnek : Solr vs Elasticsearch fornece uma análise / comparação perspicaz e explica por que ele mudou de Solr para ElasticSeach, apesar de já ser um usuário feliz de Solr – ele resume isso da seguinte forma:

    O Solr pode ser a arma de escolha ao criar aplicativos de pesquisa padrão , mas o Elasticsearch o leva para o próximo nível com uma arquitetura para criar aplicativos de pesquisa modernos em tempo real . A percolação é uma característica excitante e inovadora que sozinho sopra Solr para fora da água. Elasticsearch é escalável, rápido e um sonho para se integrar . Adios Solr, foi bom conhecer você. [ênfase minha]

  • O artigo da Wikipedia sobre ElasticSearch cita uma comparação com a renomada revista iX da Alemanha, listando vantagens e desvantagens, que praticamente resumem o que já foi dito acima:

    Vantagens :

    • O ElasticSearch é distribuído. Nenhum projeto separado é necessário. As réplicas também estão em tempo real, o que é chamado de “Replicação de envio”.
    • O ElasticSearch suporta totalmente a pesquisa quase em tempo real do Apache Lucene.
    • O tratamento de multitenancy não é uma configuração especial, em que, com o Solr, é necessária uma configuração mais avançada.
    • O ElasticSearch introduz o conceito do Gateway, que facilita os backups completos.

    Desvantagens :

    • Apenas um desenvolvedor principal [não é mais aplicável de acordo com a organização atual do elasticsearch GitHub , além de ter uma base de commiters bastante ativa em primeiro lugar]
    • Nenhum recurso de autowarming [não aplicável mais de acordo com a nova API de aquecimento do índice ]

Resposta inicial

São tecnologias completamente diferentes que abordam casos de uso completamente diferentes, portanto, não podem ser comparadas de maneira alguma de forma significativa:

  • Apache Solr – O Apache Solr oferece os resources do Lucene em um servidor de pesquisa rápido e fácil de usar com resources adicionais, como lapidação, escalabilidade e muito mais

  • Amazon ElastiCache – O Amazon ElastiCache é um serviço da Web que facilita a implantação, operação e dimensionamento de um cache na memory na nuvem.

    • Observe que o Amazon ElastiCache é compatível com protocolo Memcached, um sistema de cache de objects de memory amplamente adotado, para que códigos, aplicativos e ferramentas populares que você usa hoje com ambientes Memcached existentes funcionem perfeitamente com o serviço (consulte Memcached para obter detalhes).

[ênfase minha]

Talvez isso tenha sido confundido com as duas tecnologias relacionadas a seguir de uma forma ou de outra:

  • ElasticSearch – É um mecanismo de pesquisa de código aberto (Apache 2), distribuído e RESTful, criado sobre o Apache Lucene.

  • Amazon CloudSearch – O Amazon CloudSearch é um serviço de pesquisa totalmente gerenciado na nuvem que permite aos clientes integrar facilmente a funcionalidade de pesquisa rápida e altamente escalável em seus aplicativos.

As ofertas do Solr e do ElasticSearch soam muito semelhantes à primeira vista, e ambas usam o mesmo mecanismo de pesquisa de back-end, ou seja, o Apache Lucene .

Embora o Solr seja mais antigo, versátil, maduro e amplamente utilizado, o ElasticSearch foi desenvolvido especificamente para solucionar as deficiências do Solr com requisitos de escalabilidade em ambientes de nuvem modernos, que são difíceis de serem resolvidos com o Solr .

Como tal, provavelmente seria mais útil comparar o ElasticSearch com o recém-lançado Amazon CloudSearch (veja a postagem introdutória Iniciar pesquisa em uma hora por menos de US $ 100 / mês ), porque ambos afirmam cobrir os mesmos casos de uso em princípio.

Eu vejo algumas das respostas acima estão um pouco desatualizadas. Da minha perspectiva, e eu trabalho com Solr (Cloud e não-Cloud) e ElasticSearch diariamente, aqui estão algumas diferenças interessantes:

  • Comunidade: Solr tem uma comunidade de usuários, desenvolvedores e colaboradores maior e mais madura. ES tem uma comunidade de usuários menor, mas ativa, e uma comunidade crescente de colaboradores
  • Maturidade: Solr é mais maduro, mas ES cresceu rapidamente e eu considero estável
  • Performance: difícil de julgar. Eu / nós não fizemos benchmarks de desempenho direto. Uma pessoa no LinkedIn comparou Solr vs. ES vs. Sensei uma vez, mas os resultados iniciais devem ser ignorados porque eles usaram uma configuração não especializada para Solr e ES.
  • Design: As pessoas adoram Solr. A API Java é um pouco detalhada, mas as pessoas gostam de como ela é montada. O código Solr infelizmente nem sempre é muito bonito. Além disso, o ES tem sharding, replicação em tempo real, documento e roteamento integrados. Embora algumas delas também existam em Solr, parece um pouco como um pensamento posterior.
  • Suporte: existem empresas que fornecem suporte técnico e de consultoria para o Solr e o ElasticSearch. Eu acho que a única empresa que fornece suporte para ambos é o Sematext (disclosure: I’m Sematext founder)
  • Escalabilidade: ambos podem ser escalados para clusters muito grandes. O ES é mais fácil de dimensionar do que a versão 4.0 do Solr anterior ao Solr, mas com o Solr 4.0 esse não é mais o caso.

Para uma cobertura mais completa do tópico Solr vs. ElasticSearch, consulte http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/ . Este é o primeiro post da série de posts do Sematext fazendo comparação direta e neutra entre Solr e ElasticSearch. Divulgação: Eu trabalho no Sematext.

Vejo que muitas pessoas aqui responderam a essa pergunta do ElasticSearch versus Solr em termos de resources e funcionalidade, mas não vejo muita discussão aqui (ou em outro lugar) sobre como elas se comparam em termos de desempenho.

Por isso decidi conduzir minha própria investigação . Eu peguei um micro-serviço de fonte de dados heterogêneo já codificado que já usava o Solr para pesquisa de termos. Eu troquei o Solr pelo ElasticSearch, então eu executei ambas as versões na AWS com um aplicativo de teste de carga já codificado e capturei as métricas de desempenho para análise subseqüente.

Aqui está o que eu encontrei. O ElasticSearch teve uma taxa de transferência 13% maior em termos de indexação de documentos, mas o Solr foi dez vezes mais rápido. Quando se tratava de procurar documentos, o Solr tinha cinco vezes mais throughput e era cinco vezes mais rápido que o ElasticSearch.

Eu tenho trabalhado em busca solr e elástica para aplicativos .Net. A principal diferença que eu enfrentei é

Pesquisa elástica:

  • Mais código e menos configuração, no entanto, há APIs para mudar, mas ainda é uma mudança de código
  • para tipos complexos, digite dentro de tipos, ou seja, tipos nesteds (não foi possível atingir em solr)

Solr:

  • menos código e mais configuração e, portanto, menos manutenção
  • para agrupar os resultados durante a consulta (muito trabalho a ser realizado na pesquisa elástica em resumo, não de maneira direta)

Desde a longa história do Apache Solr, acho que uma das forças do Solr é seu ecossistema . Existem muitos plugins Solr para diferentes tipos de dados e finalidades.

solr stack

Plataforma de pesquisa nas seguintes camadas de baixo para cima:

  • Dados
    • Objetivo: representar vários tipos e origens de dados
  • Edifício de documentos
    • Objetivo: Criar informações do documento para indexação
  • Indexação e pesquisa
    • Objetivo: criar e consultar um índice de documento
  • Aprimoramento de lógica
    • Objetivo: lógica adicional para o processamento de consultas e resultados de pesquisa
  • Serviço de plataforma de pesquisa
    • Finalidade: Adicionar funcionalidades adicionais do núcleo do mecanismo de pesquisa para fornecer uma plataforma de serviço.
  • Aplicação de interface do usuário
    • Finalidade: interface ou aplicativos de pesquisa do usuário final

Artigo de referência: Enterprise search

Embora todos os links acima tenham mérito e tenham me beneficiado muito no passado, como linguista “exposto” a vários mecanismos de pesquisa Lucene nos últimos 15 anos, devo dizer que o desenvolvimento de pesquisa elástica é muito rápido em Python. Dito isto, alguns dos códigos não me pareceram intuitivos. Então, eu procurei um componente da pilha ELK, Kibana, de uma perspectiva de código aberto, e descobri que eu poderia gerar o código um tanto enigmático da elasticsearch com muita facilidade em Kibana. Além disso, também pude fazer consultas do Chrome Sense no Kibana. Se você usar o Kibana para avaliar, isso acelerará ainda mais sua avaliação. O que levou horas para ser executado em outras plataformas foi instalado e executado no JSON no Sense no topo do elasticsearch (interface RESTful) em alguns minutos, na pior das hipóteses (os maiores conjuntos de dados); em segundos na melhor das hipóteses. A documentação do elasticsearch, com mais de 700 páginas, não respondeu a perguntas que eu normalmente tinha resolvido em SOLR ou outra documentação do Lucene, que obviamente levou mais tempo para ser analisada. Além disso, você pode querer dar uma olhada em Aggregates in elastic-search, que levou Faceting a um novo nível.

Quadro maior: se você estiver fazendo ciência de dados, analítica de texto ou linguística computacional, o elasticsearch possui alguns algoritmos de sorting que parecem inovar bem na área de recuperação de informações. Se você estiver usando qualquer algoritmo TF / IDF, Freqüência de Texto / Freqüência de Documento Inversa, elasticsearch estende este algoritmo de 1960 para um novo nível, mesmo usando BM25, Melhor Correspondência 25 e outros algoritmos de Classificação de Relevância. Então, se você está pontuando ou classificando palavras, frases ou frases, o elasticsearch faz essa pontuação rapidamente, sem a grande sobrecarga de outras abordagens de análise de dados que levam horas – outra economia de tempo de elasticsearch. Com es, combinando alguns dos pontos fortes do bucket de agregações com a pontuação e a sorting de relevância de dados JSON em tempo real, você pode encontrar uma combinação vencedora, dependendo da abordagem ágil (histórias) ou arquitetural (casos de uso).

Nota: ver uma discussão semelhante sobre agregações acima, mas não em agregações e pontuação de relevância – meu pedido de desculpas por qualquer sobreposição. Divulgação: Eu não trabalho para elástico e não será capaz de beneficiar no futuro próximo de seu excelente trabalho devido a um caminho arquitetônico diferente, a menos que eu faça algum trabalho de caridade com elasticsearch, o que não seria uma má idéia

Eu criei uma tabela de grandes diferenças entre elasticsearch e Solr e splunk, você pode usá-lo como atualização de 2016: insira a descrição da imagem aqui

Eu tenho usado Elasticsearch por 3 anos e Solr por cerca de um mês, eu sinto que o cluster elasticsearch é muito fácil de instalar em comparação com a instalação do Solr. Elasticsearch tem um pool de documentos de ajuda com grande explicação. Um dos casos de uso foi a agregação de histograma, que estava disponível no ES, mas não no Solr.

Se você já estiver usando o SOLR, mantenha-se fiel a ele. Se você estiver iniciando, vá para a pesquisa Elastic.

Máximo de grandes problemas foram corrigidos no SOLR e é bastante maduro.

Eu só uso o Elastic-search. Desde que eu encontrei solr é muito difícil de começar. Recursos da pesquisa elástica:

  1. Fácil de começar, muito pouca configuração. Até mesmo um novato pode configurar um cluster passo a passo.
  2. API Restful simples que usa a consulta NoSQL. E muitas bibliotecas de idiomas para facilitar o access.
  3. Bom documento, você pode ler o livro:. Existe uma versão web no site oficial.

Adicionar um documento nested em solr muito complexo e pesquisa de dados nesteds também muito complexo. mas Elastic Search fácil de adicionar documento nested e pesquisa

Imagine o caso de uso:

  1. Muito (100+) de pequenos índices de pesquisa (10Mb-100Mb, 1000-100000 documentos).
  2. Eles estão usando muitos aplicativos (microservices)
  3. Cada aplicativo pode usar mais de um índice
  4. Pequeno por índice de tamanho, sim. Mas a carga enorme (centenas de solicitações de pesquisa por segundo) e as solicitações são complexas (várias agregações, condições e assim por diante)
  5. Downtimes não são permitidos
  6. Tudo isso é trabalhar anos e constantemente em crescimento.

A ideia de ter uma instância ES individual para cada índice – é enorme sobrecarga neste caso.

Com base na minha experiência, esse tipo de caso de uso é muito complexo para suportar com o Elasticsearch.

Por quê?

PRIMEIRO.

O maior problema é o descumprimento fundamental da compatibilidade retroativa.

Quebrar as mudanças é tão legal! (Nota: imagine o SQL-server que exige que você faça pequenas alterações em todas as suas instruções SQL, quando atualizado … não pode imaginá-lo. Mas para ES é normal)

As descontinuações que cairão no próximo grande lançamento são tão sexy! (Nota: você sabe, Java contém algumas depreciações, que 20 + anos de idade, mas ainda trabalhando na versão real do Java …)

E não é só isso, às vezes você até tem algo que em nenhum lugar documentado (pessoalmente me deparei apenas uma vez, mas …)

Assim. Se você quiser atualizar ES (porque você precisa de novos resources para algum aplicativo ou deseja obter correções de bugs) – você está no inferno. Especialmente se for sobre atualização de versão principal.

A API do cliente não será compatível. As configurações de índice não serão compatíveis. E atualizar todos os aplicativos / serviços mesmo momento com a atualização ES não é realista.

Mas você deve fazer isso de vez em quando. Não há outro jeito.

Os índices existentes são atualizados automaticamente? – Sim. Mas isso não ajuda você quando precisar alterar algumas configurações de índice antigo.

Para viver com isso, você precisa investir constantemente muita energia em … compatibilidade direta de seus aplicativos / serviços com versões futuras do ES. Ou você precisa criar (e de qualquer maneira constantemente suportar) algum tipo de middleware entre seu aplicativo / serviço e o ES, que fornece a API do cliente compatível. (E, você não pode usar o Transport Client (porque ele requeria atualização jar para cada atualização ES versão menor), e este fato não facilita sua vida)

Parece simples e barato? Não, não é. Longe disso. A manutenção contínua de infra-estrutura complexa, baseada em ES, é muito dispendiosa em todos os sentidos possíveis.

SEGUNDO. API simples? Bem … não realmente. Quando você está realmente usando condições e agregações complexas … O JSON-request com 5 níveis nesteds é o que quer que seja, mas não é simples.


Infelizmente, não tenho experiência com SOLR, não posso dizer nada sobre isso.

Mas o Sphinxsearch é muito melhor neste cenário, por causa do SphinxQL totalmente compatível.

Nota: Sphinxsearch / Manticore são realmente interessantes. Não é baseado na Lucina, e como resultado seriamente diferente. Contém várias características únicas da checkbox que o ES não possui e louco rápido com índices pequenos / médios.