mysql - Elección de un servidor de búsqueda de texto completo independiente: Sphinx o SOLR?
full-text-search lucene (5)
Estoy buscando un servidor de búsqueda de texto completo independiente con las siguientes propiedades:
- Debe funcionar como un servidor independiente que puede atender solicitudes de búsqueda de múltiples clientes
- Debe poder realizar una "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 base de datos
- Debe ser rápido (descarta la búsqueda interna de texto completo 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 ciertos casos en los que definitivamente no quisiera usar un paquete determinado?
A menos que necesite ampliar la funcionalidad de búsqueda de cualquier forma patentada, Sphinx es su mejor opción.
Ventajas de la esfinge:
- El desarrollo y la configuración es más rápido
- Mucho mejor (y más rápido) de agregación. Esta fue la característica asesina para nosotros.
- 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. Para pequeños conjuntos de resultados, sin embargo, estaba perfectamente bien.
- La mejor documentación que he visto en una aplicación de código abierto.
Ventajas de Solr:
- Puede ser extendido.
- Puede acceder directamente desde una aplicación web, es decir, puede hacer que las búsquedas autocompletadas lleguen al servidor Solr directamente a través de AJAX.
He estado usando Solr con éxito durante casi 2 años, y nunca he usado Sphinx, así que obviamente estoy sesgado. Sin embargo, intentaré mantener el objetivo citando los documentos u otras personas. También llevaré parches a mi respuesta :-)
Similitudes:
- Tanto Solr como Sphinx satisfacen todos tus requisitos. Son rápidos y están diseñados para indexar y buscar grandes cuerpos 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 , Sphinx )
- Ambos ofrecen enlaces de API de cliente para varias plataformas / idiomas ( Sphinx , Solr )
- Ambos se pueden distribuir para aumentar la velocidad y la capacidad ( Sphinx , Solr )
Aquí hay algunas diferencias:
- Solr, al ser un proyecto de Apache, obviamente tiene licencia Apache2. La esfinge 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 ( rationale )
- Solr es fácilmente integrable en aplicaciones Java.
- Solr está construido sobre Lucene, que es una tecnología probada 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 la obtiene. Muchos de los desarrolladores que se comprometen con Solr también son comensales de Lucene.
- Sphinx se integra más estrechamente con RDBMS, especialmente MySQL.
- Solr puede integrarse con Hadoop para construir aplicaciones distribuidas
- Solr puede integrarse 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. La esfinge can''t .
- Solr viene con un corrector ortográfico de la caja .
- Solr viene con soporte de facetas fuera de la caja . Facetar en Sphinx requiere más trabajo .
- Sphinx no permite actualizaciones parciales de índice para datos de campo .
- En Sphinx, todos los identificadores de documentos deben ser números enteros distintos a cero sin signo únicos . Solr ni siquiera requiere una clave única para muchas operaciones , y las claves únicas pueden ser enteros o cadenas.
- Solr admite el colapso de campos (actualmente solo como un parche adicional) 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 solo identificadores de documentos , en Solr puede obtener directamente documentos completos con prácticamente 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 utiliza integrado, se ejecuta en un contenedor web de Java como Tomcat o Jetty, que requiere una configuración y un 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:
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, e incluso 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, la forma en que se clasifican los resultados es muy modificable. Fácil de instalar y configurar, si lees uno o dos tutoriales. Casi el estado 1.0, pero sus candidatos de lanzamiento han sido sólidos.
Lucene / Solr parece ser más destacado y con más años en el negocio y una comunidad de usuarios mucho más sólida. Si puedo superar los problemas de configuración inicial, ya que algunos parecen haberse enfrentado (no nosotros), diría que Lucene / Solr es su mejor apuesta.
Nota: hay muchos usuarios con la misma pregunta en mente.
Entonces, para responder al punto:
Cual y por que
Use Solr si pretende usarlo en su aplicación web (motor de búsqueda de sitios de ejemplo). Definitivamente se volverá 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 realmente rápido. Se indexa muy rápido también. Recomendaría no usarlo en una aplicación que implique JSON o análisis de XML para obtener los resultados de búsqueda. Úsalo para búsquedas directas de dB. Funciona muy bien en MySQL.
Alternativas
Aunque estos son los gigantes, hay muchos más. Además, existen aquellos que los utilizan para potenciar sus marcos personalizados. Entonces, diría que realmente no te has perdido ninguno. Aunque hay una búsqueda de elastics que tiene una buena base de usuarios.