Estoy construyendo un sitio Django y estoy buscando un motor de búsqueda.
Algunos candidatos:
Lucene / Lucene con brújula / Solr
Esfinge
Postgresql búsqueda de texto completo incorporada
Búsqueda de texto completo incorporada en MySQl
Criteria de selección:
- relevancia de resultados y clasificación
- velocidad de búsqueda e indexación
- facilidad de uso y facilidad de integración con Django
- requisitos de recursos: el sitio estará alojado en un VPS , por lo que idealmente el motor de búsqueda no requeriría mucha RAM y CPU
- escalabilidad
- características adicionales como "¿quiso decir?", búsquedas relacionadas, etc.
Cualquier persona que haya tenido experiencia con los motores de búsqueda anteriores u otros motores que no están en la lista, me encantaría conocer sus opiniones.
EDITAR: En cuanto a las necesidades de indexación, ya que los usuarios siguen ingresando datos en el sitio, esos datos tendrían que indexarse continuamente. No tiene que ser en tiempo real, pero idealmente los datos nuevos aparecerían en el índice con no más de 15-30 minutos de retraso
mysql
postgresql
full-text-search
lucene
sphinx
Continuación
fuente
fuente
Tsearch
no admite la búsqueda de frases. Sin embargo, está en la lista TODO sai.msu.su/~megera/wiki/FTS_Todo .Respuestas:
Es bueno ver que alguien intervino sobre Lucene, porque no tengo idea de eso.
Sphinx, por otro lado, lo sé bastante bien, así que veamos si puedo ser de alguna ayuda.
No tengo idea de cuán aplicable es a su situación, pero Evan Weaver comparó algunas de las opciones comunes de búsqueda de Rails (Sphinx, Ferret (un puerto de Lucene para Ruby) y Solr), ejecutando algunos puntos de referencia. Podría ser útil, supongo.
No he sondeado las profundidades de la búsqueda de texto completo de MySQL, pero sé que no compite en cuanto a velocidad ni en función de las características con Sphinx, Lucene o Solr.
fuente
No conozco a Sphinx, pero en cuanto a Lucene frente a una búsqueda de texto completo en la base de datos, creo que el rendimiento de Lucene no tiene comparación. Debería poder realizar casi cualquier búsqueda en menos de 10 ms, sin importar cuántos registros tenga que buscar, siempre que haya configurado correctamente su índice de Lucene.
Sin embargo, aquí viene el mayor obstáculo: personalmente, creo que integrar Lucene en su proyecto no es fácil . Claro, no es demasiado difícil configurarlo para que pueda hacer una búsqueda básica, pero si desea aprovecharlo al máximo, con un rendimiento óptimo, definitivamente necesita un buen libro sobre Lucene.
En cuanto a los requisitos de CPU y RAM, realizar una búsqueda en Lucene no le da demasiada tarea a su CPU, aunque indexar sus datos lo es, aunque no lo hace con demasiada frecuencia (tal vez una o dos veces al día), por lo que no es gran obstáculo.
No responde a todas sus preguntas, pero en resumen, si tiene muchos datos para buscar y desea un excelente rendimiento, entonces creo que Lucene es definitivamente el camino a seguir. Si no va a tener tantos datos para buscar, entonces también podría optar por una búsqueda de texto completo en la base de datos. Definir una búsqueda de texto completo en MySQL es definitivamente más fácil en mi libro.
fuente
Me sorprende que no haya más información publicada sobre Solr. Solr es bastante similar a Sphinx pero tiene características más avanzadas (AFAIK ya que no he usado Sphinx, solo lea sobre esto).
La respuesta en el siguiente enlace detalla algunas cosas sobre Sphinx que también se aplica a Solr. Comparación del motor de búsqueda de texto completo: Lucene, Sphinx, Postgresql, MySQL?
Solr también proporciona las siguientes características adicionales:
Por cierto, hay muchas más funciones; Sin embargo, he enumerado solo las características que realmente he usado en la producción. Por cierto, fuera de la caja, MySQL admite # 1, # 3 y # 11 (limitado) en la lista anterior. Para las características que está buscando, una base de datos relacional no lo va a cortar. Los eliminaría de inmediato.
Además, otro beneficio es que Solr (bueno, Lucene en realidad) es una base de datos de documentos (por ejemplo, NoSQL), por lo que muchos de los beneficios de cualquier otra base de datos de documentos se pueden obtener con Solr. En otras palabras, puede usarlo para algo más que solo buscar (es decir, Rendimiento). Sea creativo con eso :)
fuente
Apache Solr
Además de responder las consultas de OP, permítanme presentar algunas ideas sobre Apache Solr, desde una simple introducción hasta una instalación e implementación detalladas .
Solr no debe usarse para resolver problemas en tiempo real. Para los motores de búsqueda, Solr es prácticamente un juego y funciona perfectamente .
Solr funciona bien en aplicaciones web de alto tráfico ( leí en alguna parte que no es adecuado para esto, pero estoy respaldando esa declaración ). Utiliza la RAM, no la CPU.
El impulso te ayuda a clasificar tus resultados en la parte superior. Por ejemplo, que está tratando de buscar un nombre de John en el campo Nombre y apellido , y quiere dar relevancia al primer nombre de campo, entonces usted necesita para impulsar el primer nombre de campo como se muestra.
Como se puede ver, apellido campo se impulsó hacia arriba con una puntuación de 2.
Más información sobre SolrRelevancy
La velocidad es increíblemente rápida y no hay compromiso en eso. La razón por la que me mudé a Solr .
Con respecto a la velocidad de indexación, Solr también puede manejar JOINS desde las tablas de su base de datos. Un JOIN más alto y complejo afecta la velocidad de indexación. Sin embargo, una enorme configuración de RAM puede abordar fácilmente esta situación.
Cuanto mayor sea la RAM, mayor será la velocidad de indexación de Solr.
Nunca intenté integrar Solr y Django , sin embargo, puedes lograr hacerlo con Haystack . Encontré un artículo interesante sobre el mismo y aquí está el github para ello.
Solr se reproduce en RAM, por lo que si la RAM es alta, no debe preocuparse por Solr .
El uso de RAM de Solr se dispara en la indexación completa si tiene unos mil millones de registros, podría hacer uso inteligente de las importaciones de Delta para hacer frente a esta situación. Como se explicó, Solr es solo una solución casi en tiempo real .
Solr es altamente escalable. Echa un vistazo a SolrCloud . Algunas características clave de la misma.
Para el escenario anterior, podría usar el SpellCheckComponent que está empaquetado con Solr . Hay muchas otras características, The SnowballPorterFilterFactory ayuda a recuperar registros, por ejemplo, si escribió, libros en lugar de libro , se le mostrarán los resultados relacionados con el libro .
Esta respuesta se centra ampliamente en Apache Solr y MySQL . Django está fuera de alcance.
Suponiendo que se encuentra en el entorno LINUX, puede continuar con este artículo. (la mía era una versión de Ubuntu 14.04)
Empezando
Descargue Apache Solr desde aquí . Esa sería la versión 4.8.1 . Podrías descargar nuevas versiones, encontré esto estable.
Después de descargar el archivo, extráigalo a la carpeta que elija. Di ...
Downloads
o lo que sea ... Así se veráDownloads/solr-4.8.1/
En su solicitud .. Navegue dentro del directorio
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Entonces ahora estás aquí ...
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Inicie el servidor de aplicaciones Jetty
Jetty está disponible dentro de la carpeta de ejemplos del
solr-4.8.1
directorio, así que navegue dentro de eso e inicie el servidor de aplicaciones Jetty.shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Ahora, no cierre el terminal, minimícelo y déjelo a un lado.
Para verificar si Apache Solr se ejecuta correctamente, visite esta URL en el navegador. http: // localhost: 8983 / solr
Ejecución de Jetty en puerto personalizado
Se ejecuta en el puerto 8983 por defecto. Puede cambiar el puerto aquí o directamente dentro del
jetty.xml
archivo.java -Djetty.port=9091 -jar start.jar
Descargar el JConnector
Este archivo JAR actúa como un puente entre MySQL y JDBC. Descargue la versión independiente de la plataforma aquí.
Después de descargarlo, extraiga la carpeta y cópiela
mysql-connector-java-5.1.31-bin.jar
y péguela en el directorio lib .shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Crear la tabla MySQL para vincular a Apache Solr
Para usar Solr , debe tener algunas tablas y datos para buscar. Para eso, usaremos MySQL para crear una tabla y presionar algunos nombres aleatorios y luego podríamos usar Solr para conectarnos a MySQL e indexar esa tabla y sus entradas.
Estructura 1.Table
2.Popula la tabla anterior
Entrar en el núcleo y agregar las directivas lib
1.Navegar a
2.Modificación del solrconfig.xml
Agregue estas dos directivas a este archivo.
Ahora agregue el DIH ( controlador de importación de datos)
3.Cree el archivo db-data-config.xml
Si el archivo existe, entonces ignore, agregue estas líneas a ese archivo. Como puede ver en la primera línea, debe proporcionar las credenciales de su base de datos MySQL . El nombre de la base de datos, nombre de usuario y contraseña.
4.Modifique el archivo schema.xml
Agregue esto a su schema.xml como se muestra.
Indexación
Aquí es donde está el verdadero negocio. Debe hacer la indexación de datos de MySQL a Solr para poder utilizar Solr Queries.
Paso 1: ve al panel de administración de Solr
Pulse la URL http: // localhost: 8983 / solr en su navegador. La pantalla se abre así.
Como lo indica el marcador, vaya al Registro para ver si alguna de las configuraciones anteriores ha provocado errores.
Paso 2: revisa tus registros
Ok, ahora estás aquí. Como puedes, hay muchos mensajes amarillos (ADVERTENCIAS). Asegúrese de no tener mensajes de error marcados en rojo. Anteriormente, en nuestra configuración habíamos agregado una consulta de selección en nuestro db-data-config.xml , digamos que si hubiera algún error en esa consulta, habría aparecido aquí.
Bien, sin errores. Estamos bien para irnos. Elija colección1 de la lista como se muestra y seleccione Importación de datos
Paso 3: DIH (controlador de importación de datos)
Con DIH, se conectará a MySQL desde Solr a través del archivo de configuración db-data-config.xml desde la interfaz de Solr y recuperará los 10 registros de la base de datos que se indexan en Solr .
Para hacerlo, elija la importación completa y marque las opciones Limpiar y confirmar . Ahora haga clic en Ejecutar como se muestra.
Alternativamente, también podría usar una consulta directa de importación completa como esta ...
Después de hacer clic en Ejecutar , Solr comienza a indexar los registros; si hubiera algún error, indicaría que la indexación ha fallado y debe volver a la sección Registro para ver qué ha fallado.
Suponiendo que no haya errores con esta configuración y si la indexación se completa con éxito, recibirá esta notificación.
Paso 4: Ejecución de consultas Solr
Parece que todo salió bien, ahora puede usar Solr Queries para consultar los datos que se indexaron. Haga clic en la consulta a la izquierda y luego presione el botón Ejecutar en la parte inferior.
Verá los registros indexados como se muestra.
La consulta Solr correspondiente para enumerar todos los registros es
Bueno, ahí van los 10 registros indexados. Digamos, solo necesitamos nombres que comiencen con Ja , en este caso, debe orientar el nombre de la columna
solr_name
, por lo tanto, su consulta es así.Así es como escribes consultas Solr . Para leer más al respecto, consulte este hermoso artículo .
fuente
Estoy mirando la búsqueda de texto completo de PostgreSQL en este momento, y tiene todas las características correctas de un motor de búsqueda moderno, muy buen carácter extendido y soporte multilingüe, buena integración estrecha con campos de texto en la base de datos.
Pero no tiene operadores de búsqueda fáciles de usar como + o AND (usa & |!) Y no estoy entusiasmado con cómo funciona en su sitio de documentación. Si bien tiene negrita de términos de coincidencia en los fragmentos de resultados, el algoritmo predeterminado para los términos de coincidencia no es excelente. Además, si desea indexar rtf, PDF, MS Office, debe buscar e integrar un convertidor de formato de archivo.
OTOH, es mucho mejor que la búsqueda de texto MySQL, que ni siquiera indexa palabras de tres letras o menos. Es el valor predeterminado para la búsqueda de MediaWiki, y realmente creo que no es bueno para los usuarios finales: http://www.searchtools.com/analysis/mediawiki-search/
En todos los casos que he visto, Lucene / Solr y Sphinx son realmente geniales . Son un código sólido y han evolucionado con mejoras significativas en la usabilidad, por lo que todas las herramientas están ahí para hacer búsquedas que satisfagan a casi todos.
SHAILI - SOLR incluye la biblioteca de códigos de búsqueda Lucene y tiene los componentes para ser un buen motor de búsqueda independiente.
fuente
Tsearch
. Pero Tsearch no admite la búsqueda de frases. Todavía está en su lista TODO sai.msu.su/~megera/wiki/FTS_Todo .Solo mis dos centavos a esta vieja pregunta. Recomiendo echar un vistazo a ElasticSearch .
Las ventajas sobre otros motores FTS (búsqueda de texto completo) son:
Estamos utilizando este motor de búsqueda en nuestro proyecto y estamos muy contentos con él.
fuente
SearchTools-Avi dijo "Búsqueda de texto MySQL, que ni siquiera indexa palabras de tres letras o menos".
Para su información, la longitud de palabra mínima de texto completo de MySQL es ajustable desde al menos MySQL 5.0. Google 'mysql fulltext min length' para instrucciones simples.
Dicho esto, el texto completo de MySQL tiene limitaciones: por un lado, la actualización se hace lenta una vez que alcanzas un millón de registros más o menos, ...
fuente
Añadiría mnoGoSearch a la lista. Solución extremadamente eficiente y flexible, que funciona como Google: el indexador obtiene datos de múltiples sitios. Puede usar criterios básicos o inventar sus propios ganchos para tener una calidad de búsqueda máxima. También podría obtener los datos directamente de la base de datos.
La solución no es tan conocida hoy, pero satisface las máximas necesidades. Puede compilarlo e instalarlo o en un servidor independiente, o incluso en su servidor principal, no necesita tantos recursos como Solr, ya que está escrito en C y funciona perfectamente incluso en servidores pequeños.
Al principio, debe compilarlo usted mismo, por lo que requiere algo de conocimiento. Hice un pequeño script para Debian, que podría ayudar. Cualquier ajuste es bienvenido.
Como está utilizando el marco Django, podría usar un cliente PHP o en el medio, o encontrar una solución en Python, vi algunos artículos .
Y, por supuesto, mnoGoSearch es de código abierto, GNU GPL.
fuente