Estrategias para mantener un índice Lucene actualizado con cambios en el modelo de dominio

StackOverflow https://stackoverflow.com/questions/38125

  •  09-06-2019
  •  | 
  •  

Pregunta

Buscaba que la gente pensara sobre cómo 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 funcionan las cosas actualmente es que todos los objetos del modelo mapeado de Hibernate implementan una interfaz "indexable" común que puede devolver un conjunto de pares clave/valor que se registran en Lucene.Siempre que se realiza una operación CRUD que involucra un objeto de este tipo, la envío a través de la cola JMS a un bean controlado por mensajes que registra en Lucene la clave principal del objeto y los pares clave/valor devueltos por el método index() del objeto indexable que fue proporcionó.

Mi principal preocupación acerca de este esquema es si el MDB se queda atrás y no puede seguir el ritmo de las operaciones de indexación que están llegando o si algún tipo de error/excepción impide que un objeto sea indexado.El resultado es un índice desactualizado durante un período de tiempo determinado o prolongado.

Básicamente me preguntaba qué tipo de estrategias se les habían ocurrido a otros para este tipo de cosas.No necesariamente estoy buscando una respuesta correcta, sino que estoy imaginando una lista de ideas tipo "pizarra" para que mi cerebro piense en alternativas.

¿Fue útil?

Solución

Cambiar el mensaje:simplemente proporcione la clave principal y la fecha actual, no los pares clave/valor.Su mdb busca la entidad por clave principal y llama a index().Después de la indexación, 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 manera, no podrá quedarse atrás porque siempre buscará primero los pares clave/valor actuales.

Como alternativa:Mira esto http://www.compass-project.org.

Otros consejos

La respuesta aceptada tiene ahora 8 años y está muy desactualizada.

El proyecto Compass ya no se mantiene desde hace mucho tiempo, ya que su desarrollador principal pasó a crear el excelente Elasticsearch.

La respuesta moderna a esto es usar Hibernar búsqueda, que por cierto se puede asignar a un índice de Lucene directamente o mediante Elasticsearch.

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