Elegir un servidor de búsqueda de texto completo independiente: Sphinx o SOLR?

Estoy buscando un servidor de búsqueda de texto completo independiente con las siguientes propiedades:

  • Debe funcionar como un servidor independiente que puede servir solicitudes de búsqueda de múltiples clientes
  • Debe poder hacer “indexación masiva” indexando el resultado de una consulta SQL: diga “SELECT id, text_to_index FROM documents;”
  • Debe ser software libre y debe ejecutarse en Linux con MySQL como la base de datos
  • Debe ser rápido (descarta la búsqueda interna de texto de MySQL)

Las alternativas que he encontrado que tienen estas propiedades son:

  • Solr (basado en Lucene)
  • ElasticSearch (también basado en Lucene)
  • Esfinge

Mis preguntas:

  • ¿Cómo se comparan?
  • ¿Me he perdido alguna alternativa?
  • Sé que cada caso de uso es diferente, pero ¿hay algunos casos en los que definitivamente no quiera utilizar un determinado paquete?

He estado usando Solr con éxito durante casi 2 años, y nunca he usado Sphinx, por lo que obviamente soy parcial. Sin embargo, intentaré mantenerlo objective citando los documentos u otras personas. También tomaré parches para mi respuesta 🙂

Semejanzas

  • Tanto Solr como Sphinx satisfacen todos sus requisitos. Son rápidos y están diseñados para indexar y buscar grandes cantidades de datos de manera eficiente.
  • Ambos tienen una larga lista de sitios de alto tráfico que los usan ( Solr , Sphinx )
  • Ambos ofrecen soporte comercial. ( Solr , Esfinge )
  • Ambos ofrecen enlaces de API de cliente para varias plataformas / idiomas ( Sphinx , Solr )
  • Ambos se pueden distribuir para boost la velocidad y la capacidad ( Sphinx , Solr )

Aquí hay algunas diferencias:

  • Solr, al ser un proyecto Apache, obviamente tiene licencia de Apache2. Sphinx es GPLv2 . Esto significa que si alguna vez necesita incrustar o extender (no solo “usar”) Sphinx en una aplicación comercial, tendrá que comprar una licencia comercial ( justificación )
  • Solr es fácilmente integrable en aplicaciones Java.
  • Solr está construido sobre Lucene, que es una tecnología comprobada de más de 8 años con una gran base de usuarios (esto es solo una pequeña parte). Cada vez que Lucene obtiene una nueva característica o aceleración, Solr también lo consigue. Muchos de los desarrolladores que se comprometen con Solr son también comisarios de Lucene.
  • Sphinx se integra más estrechamente con RDBMS, especialmente MySQL.
  • Solr se puede integrar con Hadoop para crear aplicaciones distribuidas
  • Solr se puede integrar con Nutch para construir rápidamente un motor de búsqueda web completo con rastreador .
  • Solr puede indexar formatos propietarios como Microsoft Word, PDF, etc. Sphinx no puede .
  • Solr viene con un corrector ortográfico listo para usar .
  • Solr viene con soporte de facetas fuera de la caja . Faceting en Sphinx requiere más trabajo .
  • Sphinx no permite actualizaciones de índice parciales para datos de campo .
  • En Sphinx, todos los identificadores de documento deben ser números enteros únicos no firmados sin cero . Solr ni siquiera requiere una clave única para muchas operaciones , y las claves únicas pueden ser enteros o cadenas.
  • Solr admite el colapso de campo (actualmente como un parche adicional solamente) para evitar la duplicación de resultados similares. Sphinx no parece proporcionar ninguna característica como esta.
  • Si bien Sphinx está diseñado para recuperar únicamente identificaciones de documentos , en Solr puede obtener directamente documentos completos con casi cualquier tipo de datos, lo que lo hace más independiente de cualquier almacén de datos externo y ahorra el viaje de ida y vuelta adicional.
  • Solr, excepto cuando se usa incrustado, se ejecuta en un contenedor web Java como Tomcat o Jetty, que requieren configuración y ajuste específicos adicionales (o puede usar el Jetty incluido y simplemente iniciarlo con java -jar start.jar ). Sphinx no tiene configuración adicional.

Preguntas relacionadas:

  • Búsqueda de texto completo con Rails
  • Comparación del motor de búsqueda de texto completo: Lucene, Sphinx, Postgresql, MySQL?

A menos que necesite ampliar la funcionalidad de búsqueda de cualquier forma patentada, Sphinx es su mejor opción.

Ventajas de Sphinx:

  1. El desarrollo y la configuración son más rápidos
  2. Agregación mucho mejor (y más rápida). Esta fue la característica clave para nosotros.
  3. No XML. Esto es lo que finalmente descartó Solr para nosotros. Tuvimos que devolver conjuntos de resultados bastante grandes (piense en cientos de resultados) y luego agregarlos nosotros mismos ya que faltaba la agregación de Solr. La cantidad de tiempo para serializar desde y hacia XML simplemente mató el rendimiento. Sin embargo, para pequeños resultados, estaba perfectamente bien.
  4. La mejor documentación que he visto en una aplicación de código abierto

Ventajas de Solr:

  1. Puede ser extendido.
  2. Puede golpearlo directamente desde una aplicación web, es decir, puede hacer que las búsquedas de tipo autocompletar lleguen al servidor de Solr directamente a través de AJAX.

Nota: hay muchos usuarios con la misma pregunta en mente.

Entonces, para responder al punto:

¿Cuál y por qué?

  • Use Solr si tiene la intención de usarlo en su aplicación web (motor de búsqueda de sitios de ejemplo). Definitivamente va a ser genial, gracias a su API. Definitivamente necesitarás ese poder para una aplicación web.

  • Utilice Sphinx si desea buscar a través de toneladas de documentos / archivos muy rápido. También indexa muy rápido. Recomendaría no usarlo en una aplicación que implique JSON o analizar XML para obtener los resultados de la búsqueda. Úselo para búsquedas directas de dB. Funciona muy bien en MySQL.

Alternativas

Aunque estos son los gigantes, hay muchos más. Además, hay quienes los utilizan para impulsar sus marcos personalizados. Entonces, diría que realmente no te has perdido ninguno. Aunque hay una búsqueda elástica que tiene una buena base de usuarios.

He estado usando Sphinx por casi un año, y ha sido increíble. Puedo indexar 1,5 millones de documentos en aproximadamente un minuto en mi MacBook, y aún más rápido en el servidor. También estoy usando Sphinx para limitar las búsquedas a lugares dentro de latitudes y longitudes específicas, y es muy rápido. Además, cómo se clasifican los resultados es muy modificable. Fácil de instalar y configurar, si lee un tutorial o dos. Casi 1.0 estado, pero sus Candidatos de Lanzamiento han sido sólidos como la roca.

Lucene / Solr parece ser más destacado y con años más largos en los negocios y una comunidad de usuarios mucho más fuerte. En el caso de que puedas superar los problemas iniciales de configuración, ya que algunos parecen haberse enfrentado (no nosotros), entonces diría que Lucene / Solr es tu mejor opción.