Pregunta

Actualmente estoy ejecutando Lucene.net en una aplicación web y me pregunto cuál es el mejor método, en cuanto a rendimiento.

Actualmente lo tengo configurado para que todas las escrituras de índice se procesen juntas en un proceso programado, junto con la optimización del índice.

Sin embargo, para la búsqueda: actualmente estoy abriendo y cerrando el buscador por búsqueda, lo que sé que no es lo ideal.

¿Cuál crees que sería el mejor enfoque en esta situación?

Tendré que cerrar y volver a abrir el buscador de índice una vez que se procesen las actualizaciones / optimización, por lo que el proceso programado (que es una aplicación de consola de Windows) necesita comunicar su finalización a la aplicación web.

¿Fue útil?

Solución

Acabo de integrar Lucene.NET en BugTracker.NET. No estoy seguro de que lo que hice sea lo mejor, pero parece estar funcionando bien.

Creo el índice al inicio de la aplicación.

Creo un buscador y lo mantengo alrededor para que el índice no se vuelva a cargar con cada búsqueda. Todos los hilos comparten el mismo buscador. Cuando el buscador busca, agarra un candado.

Mientras tanto, tengo un IndexWriter que actualiza el índice cuando hay un cambio de datos. Solo está cambiando un poco, así que hace su tarea rápidamente. Cuando se ejecuta, toma el mismo bloqueo, destruye el buscador, actualiza el índice y vuelve a recrear el buscador. El nuevo buscador se mantiene hasta la próxima actualización del índice. El buscador siempre está trabajando con un índice actualizado.

Puede obtener la fuente BugTracker.NET y consultar los archivos my_lucene.cs y search_text.aspx. Todo está en esos dos archivos, y no hay mucho código.

Otros consejos

Puede llamar al método IsCurrent () de los lectores para verificar si hay una nueva versión del índice disponible y, si es así, volver a abrirla. No podría ser la mejor manera, pero es bastante fácil y si sus requisitos no son muy grandes, será suficiente.

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