Strategie per mantenere aggiornato un Lucene Index con le modifiche del modello di dominio

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

  •  09-06-2019
  •  | 
  •  

Domanda

Stavo cercando di stimolare l'opinione delle persone su come mantenere aggiornato un indice Lucene man mano che vengono apportate modifiche agli oggetti del modello di dominio di un'applicazione.

L'applicazione in questione è un'app Web basata su Java/J2EE che utilizza Hibernate.Il modo in cui attualmente faccio funzionare le cose è che gli oggetti del modello mappato di Hibernate implementano tutti un'interfaccia "indicizzabile" comune che può restituire un insieme di coppie chiave/valore registrate in Lucene.Ogni volta che viene eseguita un'operazione CRUD che coinvolge un oggetto di questo tipo, la invio tramite coda JMS in un bean basato su messaggi che registra in Lucene la chiave primaria dell'oggetto e le coppie chiave/valore restituite dal metodo index() dell'oggetto indicizzabile che è stato fornito.

La mia principale preoccupazione riguardo a questo schema è se l'MDB resta indietro e non riesce a tenere il passo con le operazioni di indicizzazione in arrivo o se qualche tipo di errore/eccezione impedisce a un oggetto di essere indicizzato.Il risultato è un indice non aggiornato per un certo periodo di tempo o per un lungo periodo.

Fondamentalmente mi stavo solo chiedendo che tipo di strategie avessero escogitato gli altri per questo genere di cose.Non necessariamente cerco una risposta corretta, ma sto immaginando un elenco di idee tipo "lavagna" per far riflettere il mio cervello sulle alternative.

È stato utile?

Soluzione

Cambia il messaggio:basta fornire la chiave primaria e la data corrente, non le coppie chiave/valore.Il tuo mdb recupera l'entità tramite chiave primaria e chiama index().Dopo l'indicizzazione imposti un valore "aggiornato" nel tuo indice alla data del messaggio.Aggiorna il tuo indice solo se la data del messaggio è successiva al campo "aggiornato" dell'indice.In questo modo non puoi rimanere indietro perché recuperi sempre prima le coppie chiave/valore correnti.

Come alternativa:dai un'occhiata a http://www.compass-project.org.

Altri suggerimenti

La risposta accettata ha ormai 8 anni ed è molto obsoleta.

Il progetto Compass non viene più mantenuto da molto tempo, poiché il suo sviluppatore principale è passato alla creazione dell'eccellente Elasticsearch.

La risposta moderna a questa domanda è usare Ricerca in ibernazione, che per inciso può essere mappato a un indice Lucene direttamente o tramite Elasticsearch.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top