Pregunta

Acabo de configurar django-sphinx, y está funcionando muy bien. Ahora puedo buscar mi modelo y obtener resultados sorprendentes. El único problema es que tengo que construir el índice a mano usando el comando indexador. Eso significa que cada vez que agrego contenido nuevo, tengo que presionar manualmente la línea de comando para reconstruir el índice de búsqueda. Eso simplemente no es aceptable.

Podría hacer un trabajo cron que ejecute automáticamente el comando indexador de vez en cuando, pero eso está lejos de ser óptimo. Los nuevos datos no se indexarán hasta que el cron vuelva a ejecutarse. Además, el indexador se ejecutará innecesariamente la mayoría de las veces ya que mi sitio no tiene datos que se agregan muy a menudo.

¿Cómo lo configuro para que el índice Sphinx se reconstruya automáticamente cada vez que se agreguen o modifiquen datos en un modelo de búsqueda de django?

¿Fue útil?

Solución

Básicamente, existen dos estrategias principales para crear índices de búsqueda:

  1. Indexador interno a un servidor de base de datos, que indexa sobre la marcha a medida que se insertan o eliminan registros.
  2. Indexador externo a la base de datos (que puede o no ser un RDMS, por eso dejo el servidor de Word), que indexa periódicamente.

La primera estrategia tiene la ventaja obvia de estar más cerca del tiempo real pero posiblemente una gran desventaja en el rendimiento. La mayoría de los servidores de bases de datos con indexadores internos tienen problemas de rendimiento (o de lo contrario faltan funciones); consulte, por ejemplo, Jeff Atwood, que trata los problemas de rendimiento en SQL Server 2008 en su publicación de blog sobre agregando un segundo servidor para stackoverflow .

La segunda estrategia no es en tiempo real, pero generalmente tiene el mejor rendimiento. Desafortunadamente, esto también significa que, como no está integrada, debe invocarse externamente de alguna manera.

Obviamente no tiene otra opción con Sphinx , ya que es un indexador externo. Debe invocar el indexador de esfinge desde cron u otro mecanismo de programación.

Para acelerar la indexación, simplemente ejecútela a menudo desde cron. Si eso causa problemas de rendimiento, debe implementar una estrategia de actualización en vivo que implica indexar nuevos registros con mucha frecuencia en un índice delta y luego fusionar periódicamente el índice delta en el índice primario. Esto se haría externo a Django para que no afecte nada en django-sphinx .

Otros consejos

Lo anterior me parece correcto, aunque mencionaré que podría llamar al indexador desde su función de guardar para el objeto.

Probablemente se llamaría MUCHO, pero podría funcionar. Simplemente llámelo como lo haría con cualquier comando externo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top