Solr vs. ElasticSearch [cerrado]

729

¿Cuáles son las principales diferencias arquitectónicas entre estas tecnologías?

Además, ¿qué casos de uso son generalmente más apropiados para cada uno?

Ben ODay
fuente
66
es posible que desee echar un vistazo a esto: stackoverflow.com/questions/2271600/…
Bob Yoplait
13
Esta publicación es nueva y bastante buena desde mi punto, datanami.com/2015/01/22/solr-elasticsearch-question
Eric Wang
3
Otra comparación de 2015: quora.com/…
rleir
Ver solr-vs-elasticsearch.com
Philip Bergström

Respuestas:

558

Actualizar

Ahora que se ha corregido el alcance de la pregunta, también podría agregar algo a este respecto:

Hay muchas comparaciones entre Apache Solr y ElasticSearch disponibles, así que haré referencia a las que encontré más útiles, es decir, cubriendo los aspectos más importantes:

  • Bob Yoplait ya ha vinculado la respuesta de kimchy a ElasticSearch, Sphinx, Lucene, Solr, Xapian. ¿Cuál se adapta para qué uso? , que resume las razones por las que siguió adelante y creó ElasticSearch , que en su opinión proporciona un modelo distribuido muy superior y facilidad de uso en comparación con Solr.

  • La búsqueda en tiempo real de Ryan Sonnek : Solr vs Elasticsearch proporciona un análisis / comparación perspicaz y explica por qué cambió de Solr a ElasticSeach, a pesar de ser un usuario feliz de Solr, resume esto de la siguiente manera:

    Solr puede ser el arma de elección al crear aplicaciones de búsqueda estándar , pero Elasticsearch lo lleva al siguiente nivel con una arquitectura para crear aplicaciones de búsqueda modernas en tiempo real . La percolación es una característica emocionante e innovadora que saca a Solr directamente del agua. Elasticsearch es escalable, rápido y un sueño para integrarse . Adios Solr, fue un placer conocerte. [énfasis mío]

  • El artículo de Wikipedia sobre ElasticSearch cita una comparación de la reputada revista alemana iX, que enumera las ventajas y desventajas, que prácticamente resumen lo que ya se ha dicho anteriormente:

    Ventajas :

    • ElasticSearch se distribuye. No se requiere proyecto por separado. Las réplicas también están en tiempo real, lo que se denomina "replicación push".
    • ElasticSearch es totalmente compatible con la búsqueda casi en tiempo real de Apache Lucene.
    • El manejo de multitenencia no es una configuración especial, donde con Solr es necesaria una configuración más avanzada.
    • ElasticSearch presenta el concepto de Gateway, que facilita las copias de seguridad completas.

    desventajas :


Respuesta inicial

Son tecnologías completamente diferentes que abordan casos de uso completamente diferentes, por lo que no se pueden comparar de ninguna manera significativa:

  • Apache Solr : Apache Solr ofrece las capacidades de Lucene en un servidor de búsqueda rápido y fácil de usar con características adicionales como facetado, escalabilidad y mucho más.

  • Amazon ElastiCache : Amazon ElastiCache es un servicio web que facilita la implementación, el funcionamiento y el escalado de un caché en memoria en la nube.

    • Tenga en cuenta que Amazon ElastiCache cumple con el protocolo de Memcached, un sistema de almacenamiento en caché de objetos de memoria ampliamente adoptado, por lo que el código, las aplicaciones y las herramientas populares que utiliza hoy en día con los entornos de Memcached existentes funcionarán perfectamente con el servicio (consulte Memcached para obtener más detalles).

[énfasis mío]

Tal vez esto se haya confundido con las siguientes dos tecnologías relacionadas de una forma u otra:

  • ElasticSearch : es un motor de búsqueda de código abierto (Apache 2), distribuido, RESTful, construido sobre Apache Lucene.

  • Amazon CloudSearch : Amazon CloudSearch es un servicio de búsqueda totalmente administrado en la nube que permite a los clientes integrar fácilmente la funcionalidad de búsqueda rápida y altamente escalable en sus aplicaciones.

Las ofertas de Solr y ElasticSearch suenan sorprendentemente similares a primera vista, y ambas usan el mismo motor de búsqueda de fondo, a saber, Apache Lucene .

Si bien Solr es más antiguo, bastante versátil y maduro, y ampliamente utilizado en consecuencia, ElasticSearch se ha desarrollado específicamente para abordar las deficiencias de Solr con los requisitos de escalabilidad en entornos de nube modernos, que son difíciles de abordar con Solr .

Como tal, probablemente sería más útil comparar ElasticSearch con el recientemente presentado Amazon CloudSearch (consulte la publicación introductoria Comience a buscar en una hora por menos de $ 100 / mes ), porque ambos afirman que cubren los mismos casos de uso en principio.

Steffen Opel
fuente
@boday: Suena como que podría estar usando Lucene basado elasticsearch hecho.
Steffen Opel
66
Ahora que hay una compañía detrás de Elasticsearch, la principal desventaja del desarrollador debería desaparecer.
javanna
2
Parece que ElasticSearch ahora aborda el autoarmado. Ver github.com/elasticsearch/elasticsearch/issues/1913
unludo el
37
Todas las ventajas de ElasticSearch que figuran en la sección de la revista iX ahora también son incorrectas. 1) SolrCloud ya no es un proyecto separado. De hecho, Solr y Lucene son ahora parte del mismo proyecto. 2) Solr admite NRT. 3) Solr maneja múltiples colecciones en un solo clúster 4) Solr también ha agregado una función de replicación que facilita las copias de seguridad.
MattMcKnight
2
No se olvide de las agregaciones que ElasticSearch proporciona para aquellos que requieren una funcionalidad similar a OLAP. La nube de Solr solo tiene facetas limitadas. Y si necesita alertas sobre agregaciones, ES percolation ofrece.
markgiaconia
205

Veo que algunas de las respuestas anteriores están un poco desactualizadas. Desde mi perspectiva, y trabajo con Solr (Cloud y no Cloud) y ElasticSearch a diario, aquí hay algunas diferencias interesantes:

  • Comunidad: Solr tiene una comunidad de usuarios, desarrolladores y contribuyentes más grande y madura. ES tiene una comunidad de usuarios más pequeña pero activa y una comunidad creciente de contribuyentes
  • Madurez: Solr es más maduro, pero ES ha crecido rápidamente y lo considero estable
  • Rendimiento: difícil de juzgar. Yo / nosotros no hemos hecho puntos de referencia de rendimiento directo. Una persona en LinkedIn comparó Solr vs. ES vs. Sensei una vez, pero los resultados iniciales deben ignorarse porque usaron una configuración no experta para Solr y ES.
  • Diseño: La gente ama a Solr. La API de Java es algo detallada, pero a la gente le gusta cómo se arma. El código de Solr desafortunadamente no siempre es muy bonito. Además, ES tiene fragmentación, replicación en tiempo real, documentos y enrutamiento integrados. Si bien algo de esto existe también en Solr, se siente un poco como un pensamiento posterior.
  • Soporte: hay compañías que brindan soporte técnico y de consultoría tanto para Solr como para ElasticSearch. Creo que la única compañía que brinda soporte para ambos es Sematext (divulgación: soy el fundador de Sematext)
  • Escalabilidad: ambos pueden escalarse a grupos muy grandes. ES es más fácil de escalar que la versión anterior a Solr 4.0 de Solr, pero con Solr 4.0 ya no es el caso.

Para obtener una cobertura más completa del tema Solr vs. ElasticSearch, consulte https://sematext.com/blog/solr-vs-elasticsearch-part-1-overview/ . Esta es la primera publicación de la serie de publicaciones de Sematext que realiza una comparación directa y neutral de Solr vs. ElasticSearch. Divulgación: Yo trabajo en Sematext.

Otis Gospodnetic
fuente
@Rubytastic: es posible que desee comentar la publicación para llamar la atención del autor y obtener cobertura de consumo de memoria. Pero la publicación blog.sematext.com/2012/05/17/elasticsearch-cache-usage ya puede tener lo que está buscando.
Otis Gospodnetic
1
Gracias por compartir una opinión de primera mano y publicaciones de blog bien escritas. Han pasado 2 años desde esta publicación. Creo que la comunidad se beneficiaría si pudieras compartir más ideas que reuniste en el camino. Algo que puede ayudar a las personas a decidir cuál de ellos es mejor para solr / elasticSearch.
usuario
Agregaría que con DataStax obtienes una replicación casi en tiempo real con Solr.
KingOfHypocrites
23

Veo que mucha gente aquí ha respondido a esta pregunta de ElasticSearch vs Solr en términos de características y funcionalidad, pero no veo mucha discusión aquí (ni en ninguna otra parte) sobre cómo se comparan en términos de rendimiento.

Por eso decidí realizar mi propia investigación . Tomé un microservicio de fuente de datos heterogéneos ya codificado que ya usaba Solr para la búsqueda de términos. Cambié Solr por ElasticSearch y luego ejecuté ambas versiones en AWS con una aplicación de prueba de carga ya codificada y capturé las métricas de rendimiento para su posterior análisis.

Aquí está lo que encontré. ElasticSearch tuvo un rendimiento 13% mayor en lo que respecta a la indexación de documentos, pero Solr fue diez veces más rápido. Cuando se trataba de consultar documentos, Solr tenía un rendimiento cinco veces mayor y era cinco veces más rápido que ElasticSearch.

Glenn
fuente
Interesante, acabo de evaluar Solr y Elasticsearch y descubrí que indexar el mismo conjunto de documentos 1M tomó el doble de tiempo para Elasticsearch en comparación con Solr.
David Thomas
16

Desde la larga historia de Apache Solr, creo que una de las fortalezas de Solr es su ecosistema . Hay muchos complementos de Solr para diferentes tipos de datos y propósitos.

pila de solr

Plataforma de búsqueda en las siguientes capas de abajo hacia arriba:

  • Datos
    • Propósito: representar varios tipos de datos y fuentes
  • Construcción de documentos
    • Propósito: Crear información del documento para indexar
  • Indexación y búsqueda
    • Propósito: construir y consultar un índice de documento
  • Mejora lógica
    • Propósito: lógica adicional para procesar consultas de búsqueda y resultados
  • Servicio de plataforma de búsqueda
    • Propósito: Agregar funcionalidades adicionales del núcleo del motor de búsqueda para proporcionar una plataforma de servicio.
  • Aplicación de interfaz de usuario
    • Propósito: interfaz de búsqueda de usuario final o aplicaciones

Artículo de referencia: búsqueda empresarial

mingxue
fuente
14

He creado una tabla de diferencias importantes entre elasticsearch y Solr y splunk, puede usarla como actualización de 2016: ingrese la descripción de la imagen aquí

Fardin Behboudi
fuente
1
La fila del esquema de datos es un poco engañosa ... Elastic tiene asignaciones que son esencialmente un esquema (pero no es obligatorio por defecto). Solr se envía de tal manera que uno tiene que instalar la configuración antes de que funcione, hay varias configuraciones de ejemplo que puede elegir de inmediato y una no tiene esquemas, aunque los esquemas cuidadosamente controlados son probablemente más comunes cuando se usa solr.
Gus
2
La API de Streaming de Solr proporciona capacidades de MapReduce
whoer
13

He estado trabajando en la búsqueda solr y elástica para aplicaciones .Net. La principal diferencia a la que me he enfrentado es

Búsqueda elástica:

  • Más código y menos configuración, sin embargo, hay que cambiar la API pero todavía hay un cambio de código
  • para tipos complejos, escriba dentro de tipos, es decir, tipos anidados (no se pudo lograr en solr)

Solr:

  • menos código y más configuración y, por lo tanto, menos mantenimiento
  • para agrupar resultados durante la consulta (mucho trabajo para lograr en la búsqueda elástica en resumen, no de manera directa)
robert
fuente
7

Si bien todos los enlaces anteriores tienen mérito y me han beneficiado enormemente en el pasado, como lingüista "expuesto" a varios motores de búsqueda de Lucene durante los últimos 15 años, debo decir que el desarrollo de búsqueda elástica es muy rápido en Python. Dicho esto, parte del código me pareció no intuitivo. Entonces, contacté a un componente de la pila ELK, Kibana, desde una perspectiva de código abierto, y descubrí que podía generar el código algo críptico de búsqueda elástica muy fácilmente en Kibana. Además, también podría extraer consultas de Chrome Sense es en Kibana. Si usa Kibana para evaluar es, acelerará aún más su evaluación. Lo que tardó horas en ejecutarse en otras plataformas estaba funcionando en JSON en Sense encima de elasticsearch (interfaz RESTful) en unos pocos minutos en el peor de los casos (conjuntos de datos más grandes); en segundos en el mejor de los casos. La documentación para Elasticsearch, aunque más de 700 páginas, no respondía las preguntas que tenía que normalmente se resolverían en SOLR u otra documentación de Lucene, que obviamente tomó más tiempo para analizar. Además, es posible que desee echar un vistazo a los agregados en la búsqueda elástica, que han llevado a Faceting a un nuevo nivel.

Panorama general: si está haciendo ciencia de datos, análisis de texto o lingüística computacional, Elasticsearch tiene algunos algoritmos de clasificación que parecen innovar bien en el área de recuperación de información. Si está utilizando algún algoritmo TF / IDF, Frecuencia de texto / Frecuencia de documento inversa, elasticsearch extiende este algoritmo de la década de 1960 a un nuevo nivel, incluso utilizando BM25, Best Match 25 y otros algoritmos de Clasificación de relevancia. Entonces, si está calificando o clasificando palabras, frases u oraciones, Elasticsearch realiza esta calificación sobre la marcha, sin la gran sobrecarga de otros enfoques de análisis de datos que toman horas, otro ahorro de tiempo de Elasticsearch. Con es, combinando algunos de los puntos fuertes de las agrupaciones con la puntuación y clasificación de relevancia de datos JSON en tiempo real, puede encontrar una combinación ganadora,

Nota: vi una discusión similar sobre las agregaciones anteriores, pero no sobre las agregaciones y la puntuación de relevancia: mi disculpa por cualquier superposición. Divulgación: no trabajo para Elastic y no podré beneficiarme en el futuro cercano de su excelente trabajo debido a un camino arquitectónico diferente, a menos que haga algún trabajo de caridad con Elasticsearch, lo que no sería una mala idea

MethodyM
fuente
6

Imagine el caso de uso:

  1. Muchos (más de 100) índices de búsqueda pequeños (10Mb-100Mb, 1000-100000 documentos).
  2. Están utilizando muchas aplicaciones (microservicios)
  3. Cada aplicación puede usar más de un índice
  4. Pequeño por índice de tamaño, sí. Pero una carga enorme (cientos de solicitudes de búsqueda por segundo) y solicitudes son complejas (agregaciones múltiples, condiciones, etc.)
  5. Los tiempos de inactividad no están permitidos
  6. Todo eso lleva años trabajando y crece constantemente.

La idea de tener una instancia de ES individual para cada índice es una gran sobrecarga en este caso.

Según mi experiencia, este tipo de caso de uso es muy complejo de soportar con Elasticsearch.

¿Por qué?

PRIMERO.

El principal problema es el incumplimiento fundamental de la compatibilidad con la espalda.

¡Los cambios de última hora son geniales! (Nota: imagine el servidor SQL que requiere que haga un pequeño cambio en todas sus declaraciones SQL, cuando se actualiza ... no puedo imaginarlo. Pero para ES es normal)

¡Los desaprobaciones que caerán en el próximo lanzamiento importante son muy sexys! (Nota: ya sabes, Java contiene algunas depreciaciones, que tienen más de 20 años, pero aún funcionan en la versión real de Java ...)

Y no solo eso, a veces incluso tienes algo que no está documentado en ninguna parte (personalmente lo encontré solo una vez, pero ...)

Entonces. Si desea actualizar ES (porque necesita nuevas funciones para alguna aplicación o desea solucionar errores), está en el infierno. Especialmente si se trata de una actualización importante de la versión.

La API del cliente no será compatible de nuevo. La configuración del índice no será compatible. Y actualizar todas las aplicaciones / servicios en el mismo momento con la actualización de ES no es realista.

Pero debes hacerlo de vez en cuando. Ninguna otra manera.

¿Los índices existentes se actualizan automáticamente? - Si. Pero no le ayuda cuando necesite cambiar algunas configuraciones de índice antiguo.

Para vivir con eso, necesita invertir constantemente una gran cantidad de energía en ... la compatibilidad de sus aplicaciones / servicios con futuras versiones de ES. O necesita construir (y de todos modos apoyar constantemente) algún tipo de middleware entre su aplicación / servicios y ES, que le proporciona una API de cliente compatible. (Y no puede usar Transport Client (porque requería la actualización de jar para cada actualización menor de ES), y este hecho no le facilita la vida)

¿Se ve simple y barato? No, no es. Lejos de ahi. El mantenimiento continuo de una infraestructura compleja basada en ES, es muy costosa en todos los sentidos posibles.

SEGUNDO. API simple? Bueno ... no realmente. Cuando realmente está utilizando condiciones y agregaciones complejas ... La solicitud JSON con 5 niveles anidados es lo que sea, pero no es simple.


Desafortunadamente, no tengo experiencia con SOLR, no puedo decir nada al respecto.

Pero Sphinxsearch es mucho mejor en este escenario, debido a SphinxQL totalmente compatible.

Nota: Sphinxsearch / Manticore son realmente interesantes. No está basado en Lucine y, como resultado, es muy diferente. Contiene varias características únicas de la caja que ES no tiene y loco rápido con índices de tamaño pequeño / mediano.

Gmugra
fuente
4

Si ya está usando SOLR, manténgase firme. Si está iniciando, busque Elastic search.

Se han solucionado los problemas principales máximos en SOLR y es bastante maduro.

Behzad Qureshi
fuente
77
¿Por qué recomienda Elastic para nuevos proyectos?
forsberg
1
La búsqueda elástica es nueva, por lo que utiliza las últimas tecnologías / arquitectura.
Behzad Qureshi
55
También podría crear algo nuevo, pero solo porque uso nueva tecnología o una arquitectura diferente, no significa que sea mejor que lo que ya está en el mercado.
Jan Sommer
De acuerdo, pero como arquitecto, definitivamente irás mejor que lo que ya está en el mercado. My 2 cents :)
Behzad Qureshi
3

He usado Elasticsearch durante 3 años y Solr durante aproximadamente un mes, siento que el clúster Elasticsearch es bastante fácil de instalar en comparación con la instalación de Solr. Elasticsearch tiene un grupo de documentos de ayuda con una gran explicación. Uno de los casos de uso estaba atrapado con la agregación de histogramas que estaba disponible en ES, sin embargo, no se encuentra en Solr.

Prakash Ghanshani
fuente
2

Solo uso Elastic-search. Desde que encontré solr es muy difícil comenzar. Características de Elastic-search:

  1. Fácil de comenzar, muy pocos ajustes. Incluso un novato puede configurar un clúster paso a paso.
  2. API Restful simple que utiliza la consulta NoSQL. Y muchas bibliotecas de idiomas para acceder fácilmente.
  3. Buen documento, puedes leer el libro:. Hay una versión web en el sitio web oficial.
Howardyan
fuente
2

Agregue un documento anidado en solr muy complejo y la búsqueda de datos anidados también es muy compleja. pero Elastic Search es fácil de agregar documentos anidados y buscar

Chirag
fuente