Estoy tratando de hacer un prototipo de una aplicación de indexación/búsqueda que utiliza fuentes muy volátiles de datos de indexación (foros, redes sociales, etc.), estos son algunos de los requisitos de rendimiento,Cómo manejar las actualizaciones muy frecuentes a un índice de Lucene
vuelco muy rápido el tiempo (con esto quiero decir que los nuevos datos (como un nuevo mensaje en un foro) deben estar disponibles en los resultados de búsqueda muy poco (menos de un minuto))
I es necesario descartar documentos viejos de manera bastante regular para garantizar que los resultados de búsqueda no tengan fecha.
Por último, pero no menos importante, la aplicación de búsqueda debe ser receptiva. (Latencia del orden de 100 milisegundos, y debe soportar al menos 10 QPS)
Todos los requisitos que he actualmente se pueden cumplir w/o usando Lucene (y que me permitiera satisfacer todas 1,2 y 3), pero anticipo otros requisitos en el futuro (como relevancia de búsqueda, etc.) que Lucene hace más fáciles de implementar. Sin embargo, dado que Lucene está diseñado para casos de uso mucho más complejos que el que estoy trabajando en este momento, me está costando cumplir mis requisitos de rendimiento.
Aquí hay algunas preguntas,
a. Leí que el método optimize() en la clase IndexWriter es caro, y no debe ser utilizado por aplicaciones que realizan actualizaciones frecuentes, ¿cuáles son las alternativas?
b. Para hacer actualizaciones incrementales, debo seguir cometiendo nuevos datos y también actualizar el lector de índices para asegurarme de que tenga los nuevos datos disponibles. Estos van a afectar 1 y 3 arriba. ¿Debería probar índices duplicados? ¿Cuáles son algunos enfoques comunes para resolver este problema?
c. Sé que Lucene proporciona un método de eliminación, que le permite eliminar todos los documentos que coinciden con una determinada consulta, en mi caso, tengo que eliminar todos los documentos que son anteriores a cierta edad, ahora una opción es agregar un campo de fecha a cada documentar y usar eso para borrar documentos más tarde. ¿Es posible hacer consultas de rango en documentos ID (puedo crear mi propio campo de identificación ya que creo que el creado por lucene sigue cambiando) para eliminar documentos? ¿Es más rápido que comparar fechas representadas como cadenas?
Sé que estas son preguntas muy abiertas, por lo que no estoy buscando una respuesta detallada, intentaré tratar todas sus respuestas como sugerencias y usarlas para informar mi diseño. ¡Gracias! Por favor, avíseme si necesita cualquier otra información.