tutorial - the django project
¿Solución de motor de búsqueda para Django que realmente funciona? (7)
La historia hasta ahora:
Decidí ir con Xapian como motor de búsqueda porque tiene todas las funciones de motor de búsqueda que estaba buscando, sabe de Unicode, tiene pocas dependencias y no requiere una instalación de servidor de aplicaciones inflada.
Intenté Django y Haystack (más xapian-haystack, el código de pegamento de fondo para unir Haystack a Xapian) porque se publicitaba en algunos blogs como "de trabajo". No funcionó. Ni django-haystack ni el proyecto xapian-haystack proporcionan una combinación de versión que realmente funciona en conjunto. MASTER de ambos proyectos produce un error de Xapian, por lo que no es estable en absoluto. Haystack 1.0.1 y xapian-haystack 1.0.x / 1.1.0 no son compatibles con API. Además, en una instalación mínimamente funcional de Haystack 1.0.1 y MASTER xapian-haystack, cualquier consulta compleja produce cero resultados debido a errores en django-haystack o xapian-haystack (lo verifiqué doblemente), tal vez porque las pruebas unitarias de hecho, prueba casos muy simples, y sin casos extremos.
Probé Djapian. El código fuente está plagado de errores de ortografía (tenga en cuenta que, en los nombres de las variables, no en los comentarios), la documentación también está plagada de ambigüedades e información obsoleta que nunca conducirá a una instalación en funcionamiento. No es de extrañar que los usuarios rara vez pidan funciones, sino cómo hacerlo funcionar en primer lugar.
Siguiente en la placa: explorando Solr (instalar un entorno Java más Tomcat me da dolores de cabeza, la máquina tiene restricciones de RAM y CPU) o Lucene (un poco menos dolores de cabeza, pero aún).
Antes de proceder a pasar más tiempo con una solución que podría funcionar o no según lo anunciado, me gustaría saber: ¿Alguien alguna vez obtuvo una solución de búsqueda real en Django? Lo digo en serio. Encuentro realmente frustrante leer acerca de "problemas grandes principalmente resueltos", y luego darme cuenta de que nunca obtendrás una instalación que funcione del código fuente porque, en realidad, todos los bloggers que lidian con esos "problemas mayormente resueltos" nunca pasaron de la instalación básica y copiar y pegar los tutoriales oficiales.
Así que aquí están los requisitos:
- debe poder buscar 10-100 términos en una consulta
- debe manejar + (el término debe estar presente) y - (el término no debe estar presente), Y / O
- debe manejar la agrupación arbitraria (es decir, paréntesis alrededor de Y / O)
- debe permitir el filtrado de Django-ORM antes o después de la búsqueda de texto completo (es decir, pre / post-procesamiento de resultados con el conjunto completo de filtros que Django conoce)
- alternativamente, debe haber una instalación para recopilar en bloque el conjunto de resultados y transformarlo en un QuerySet
- debe ser liviano en la máquina, así que preferiblemente no hay una JVM exuberante y una instalación de servidor de aplicaciones basada en Java
¿Hay algo por ahí que haga esto? No me interesan las pruebas anecdóticas ni las referencias a algunas publicaciones de blogs que afirman que debería estar funcionando. Me gustaría saber de alguien que realmente tiene una configuración totalmente funcional trabajando en el mundo real, en condiciones reales, con consultas reales.
EDITAR:
Permítanme repetir nuevamente que no estoy tan interesado en la evidencia anecdótica de que alguien, en alguna parte, tiene una instalación en funcionamiento que funciona con propiedades no especificadas. Ya fui allí, leí todas las publicaciones del blog, las listas de correo, me puse en contacto con los autores, pero cuando se trataba de la implementación real de los escenarios del mundo real, nada funcionó como se anuncia.
Además, y un usuario a continuación también mencionó ese punto, considerando el TCO de cualquier proyecto, definitivamente no estoy interesado en saber que alguien, en algún lugar, pudo llevarlo a cabo una vez que un vendedor saltó en paracaídas en un número desconocido de especialistas al mono. -patche toda la instalación con conocimiento de dominio específico que no está documentado en ninguna parte.
Por lo tanto, si afirma que tiene una instalación que cumple los requisitos mínimos para una búsqueda completa (ver los requisitos anteriores), proporcione lo siguiente para que todos podamos beneficiarnos de una solución de búsqueda para Django que resuelva el problema. :
- distribución exacta de Linux, versión de lanzamiento,
- versión de lanzamiento exacta de Haystack (o equivalente) y versión de lanzamiento de back-end de búsqueda,
- versión de lanzamiento exacta del motor de búsqueda
- públicamente (!) documentación disponible sobre cómo configurar todos los componentes exactamente de la manera en que se configuró su instalación de modo que se cumplan los requisitos mínimos mencionados anteriormente.
Gracias.
¿Has considerado Sphinx ? ¿Qué estás usando como almacén de datos? Tiene un motor MySQL que funciona genial. Creo que cumple con la mayoría de sus requisitos, excepto que no estoy exactamente seguro de lo bien que se puede vincular con Django-ORM.
Estoy considerando seriamente utilizar Sphinx en una de mis propias aplicaciones Django para mejorar el rendimiento en un campo de sugestión automática que hace una búsqueda de prefijo y de infijo en un corpus de 3,5 millones de registros. Pero aún no he podido implementarlo, así que no puedo hablar con la integración de Django + Sphinx. Mi única experiencia con Sphinx es con MySQL Engine y consultar MySQL directamente.
He desarrollado algunas aplicaciones Django con soporte xapian también. El más grande de ellos tiene una base de datos xapian con un índice de 8G que almacena documentos de 2.4M (incluyendo publicaciones en el foro, entradas de la wiki, entradas de planetas y entradas de blog), que sigue creciendo.
En general, estoy bastante contento con xapian. Funciona muy bien y es fácil de usar. Lo único que no me gusta es que xapian no funcionará con mod_wsgi (excepto en el modo global) debido a un punto muerto. Por lo tanto, se ve obligado a utilizar fastcgi (o conectarse a xapian-tcpsrv o escribir su propio servicio).
Te recomiendo que uses los enlaces xapianos directamente. Xapian hoy en día ofrece bastantes ayudantes útiles (TermGenerator, QueryParser, etc.), lo que hace que tanto la indexación como la consulta sean simples. De hecho, no hay nada que pueda imaginar que justifique una biblioteca adicional. En mi opinión, todos son más complicados y no le permiten indexar de manera eficiente.
Lo único que necesita, es cierta comprensión de la forma en que funciona xapian. (¿Qué son los términos? ¿Qué son los valores? ¿Qué es stemming y dónde debo usarlo ?, etc.). Puede encontrar todos esos temas en el sitio web de xapian, y tan pronto como comprenda esos conceptos, será fácil tratar con xapian.
Además, la API de xapian es extremadamente estable. Empecé a utilizarlo mucho antes de la versión 1.0 y nunca tuve ningún problema con los cambios de API o conflictos de versiones. Lo único que ha cambiado es que todos los helpers (analizador de consultas, tokenizer, etc.) que una vez escribí para mi proyecto Django ahora son inútiles, porque clases similares han llegado al núcleo de xapian.
Entonces, para resumir, pruebe el uso directo de enlaces xapianos.
Los detalles que solicitaste
- distribución exacta de Linux, versión de lanzamiento - Ubuntu 9.04 y 9.10
- versión de lanzamiento exacta de Haystack (o equivalente) - Haystack 1.0, así como maestro
- versión de lanzamiento del backend de búsqueda - Los backends de Solr & Whoosh incluidos con Haystack
- versión exacta del motor de búsqueda - Solr 1.3, Solr 1.4 y Whoosh 0.3.15
- públicamente (!) documentación disponible sobre cómo configurar todos los componentes exactamente de la manera en que se configuró su instalación de modo que se cumplan los requisitos mínimos mencionados anteriormente.
Más allá de esto, son los bits de configuración estándar del tutorial, además de las modificaciones adicionales de (que no puedo vincular, gracias a ) según sea necesario.
Como mantenedor de Haystack, estoy ejecutando activamente todas las configuraciones previas anteriores. La instalación más pequeña de Haystack (Haystack 1.0 + Whoosh) es de ~ 600 documentos. Un poco más grande (Haystack master + Solr 1.4) es ~ 4000 documentos. El despliegue más grande que conozco (Haystack master + Solr 1.4) es ~ 3 millones de documentos.
Por lo general, trato de evitar , así que no te sorprendas si no ves nada más lejos de mí. La lista de correo es el mejor lugar para obtener soporte, pero teniendo en cuenta sus respuestas hasta el momento, estoy seguro de que preferiría simplemente dejarme aquí.
Puedo responder por Django-Haystack con el backend de Xapian (En aras de la revelación completa, soy el autor del backend de xapian-haystack) en un entorno de producción de la vida real. Actualmente usamos Haystack / Xapian en varios sitios, el más grande de los cuales tiene más de 20,000 usuarios registrados y una base de datos Xapian con más de 20,000 documentos que contienen más de 143,000 términos únicos para un tamaño total de ~ 141mb.
En cuanto a no poder ejecutar ninguna combinación de Haystack y Xapian back-end, admito que no fui tan diligente como debería haber sido con mi etiquetado, por lo que existe cierta confusión con las versiones. Sin embargo, debería poder utilizar el maestro actual de ambas bases de código sin ningún problema. Si este no es el caso, estaría más que feliz de ayudar con los problemas. Sin embargo, tendrás que ser un poco más específico sobre el tema. Simplemente decir "no funcionó" no es suficiente información.
Daniel y yo hacemos todo lo posible para responder cualquier problema abierto en Github de manera oportuna. Además, los dos usualmente estamos disponibles en el canal IRC #haystack durante el día y en el grupo de Google django-haystack.
Versiones utilizadas:
- Haystack 1.0BETA con Xapian-Haystack 1.1.0BETA
- Haystack 1.0.1FINAL con Xapian-Haystack 1.1.3BETA
La mayoría de los sitios que hemos implementado con Haystack han estado ejecutando Ubuntu 8.04 LTS con Xapian 1.0.5
Respuesta corta: No.
Salvamos y fuimos con una búsqueda personalizada de Google. Aunque el sitio tiene más de 10,000 vistas de página posibles, mantenemos el feed del mapa del sitio a las 4,000 páginas principales y cuesta $ 250 / año, lo que equivale a aproximadamente 2 horas de mi tiempo. El cliente está feliz y se siente cómodo con los resultados.
Me encantaría ver a alguien proponer una buena solución FOSS, pero en una situación comercial, el TCO tiene que tener un sentido económico.
Yo (y mis colegas) hemos utilizado con éxito Haystack para lograr una funcionalidad de búsqueda bastante buena.
Es fácil comenzar con el pajar y el backend whoosh; y cambiar al back-end de Apache-Solr cuando la ejecución de whoosh no es aceptable.
Realmente tenemos que movernos para escribir una publicación detallada al respecto con enlaces a los proyectos en los que funciona.
Por ahora puedo sugerirle que eche un vistazo a esta búsqueda: http://www.webdevjobshq.com/search/?q=rails implementado usando Haystack con Apache-Solr back-end. O esto: http://www.govbuddy.com/search/?q=Roy
Yo uso Djapian. Fue bastante simple de instalar y funciona muy bien. Existe un tutorial real que cubre casos de uso básicos y muestra todo el proceso de integración.
Sí, tiene algunas ambigüedades, pero el rastreador de problemas está abierto y los autores corrigen rápidamente los errores y agregan características.