design - resueltos - Estrategias para mantener actualizado un índice de Lucene con cambios en el modelo de dominio
modelo de requisitos (2)
Quería que las personas pensaran en mantener actualizado un índice de Lucene a medida que se realizan cambios en los objetos del modelo de dominio de una aplicación.
La aplicación en cuestión es una aplicación web basada en Java / J2EE que utiliza Hibernate. La forma en que actualmente tengo las cosas en funcionamiento es que todos los objetos del modelo mapeado de Hibernate implementan una interfaz común "indexable" que puede devolver un conjunto de pares clave / valor que se registran en Lucene. Cada vez que se realiza una operación CRUD que involucra dicho objeto, lo envío a través de la cola JMS a un bean controlado por mensaje que registra en Lucene la clave primaria del objeto y los pares clave / valor devueltos del método index () del objeto indexable que era previsto.
Mi principal preocupación sobre este esquema es si el MDB se retrasa y no puede mantenerse al día con las operaciones de indexación que están entrando o si algún tipo de error / excepción impide que un objeto se indexe. El resultado es un índice desactualizado para una especie o un período de tiempo largo.
Básicamente, me preguntaba qué clase de estrategias habían surgido para este tipo de cosas. No necesariamente buscando una respuesta correcta, pero estoy imaginando una lista de ideas de "pizarra" para que mi cerebro piense en alternativas.
La respuesta aceptada tiene 8 años y está muy desactualizada.
El Compass Project ya no se mantiene desde hace mucho tiempo, ya que su principal desarrollador pasó a crear la excelente Elasticsearch.
La respuesta moderna a esto es usar Hibernate Search , que por cierto puede mapear a un índice de Lucene directamente oa través de Elasticsearch.
Cambie el mensaje: solo proporcione la clave principal y la fecha actual, no los pares clave / valor. Su mdb recupera la entidad por clave principal y llama a index (). Después de indexar, establece un valor "actualizado" en su índice a la fecha del mensaje. Actualiza su índice solo si la fecha del mensaje es posterior al campo "actualizado" del índice. De esta forma no puede quedarse atrás porque siempre busca primero los pares clave / valor actuales.
Como alternativa: eche un vistazo a http://www.compass-project.org .