Strategien, um einen Lucene-Index bei Änderungen des Domänenmodells auf dem neuesten Stand zu halten

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

  •  09-06-2019
  •  | 
  •  

Frage

Ich wollte wissen, wie die Leute darüber nachdenken, wie man einen Lucene-Index auf dem neuesten Stand hält, wenn Änderungen an den Domänenmodellobjekten einer Anwendung vorgenommen werden.

Bei der betreffenden Anwendung handelt es sich um eine Java/J2EE-basierte Webanwendung, die Hibernate verwendet.Bei mir funktioniert es derzeit so, dass die zugeordneten Hibernate-Modellobjekte alle eine gemeinsame „indexierbare“ Schnittstelle implementieren, die eine Reihe von Schlüssel/Wert-Paaren zurückgeben kann, die in Lucene aufgezeichnet werden.Immer wenn eine CRUD-Operation mit einem solchen Objekt ausgeführt wird, sende ich sie über die JMS-Warteschlange an eine Message-Driven-Bean, die in Lucene den Primärschlüssel des Objekts und die Schlüssel/Wert-Paare aufzeichnet, die von der index( )-Methode des indexierbaren Objekts zurückgegeben wurden bereitgestellt.

Ich mache mir bei diesem Schema vor allem Sorgen, wenn die MDB ins Hintertreffen gerät und mit den eingehenden Indizierungsvorgängen nicht Schritt halten kann oder wenn ein Fehler/eine Ausnahme die Indizierung eines Objekts verhindert.Das Ergebnis ist ein veralteter Index für einen bestimmten oder einen längeren Zeitraum.

Im Grunde habe ich mich nur gefragt, welche Strategien sich andere für so etwas ausgedacht haben.Ich suche nicht unbedingt nach einer richtigen Antwort, sondern stelle mir eine Liste mit „Whiteboard“-Ideen vor, um mein Gehirn zum Nachdenken über Alternativen anzuregen.

War es hilfreich?

Lösung

Ändern Sie die Nachricht:Geben Sie lediglich den Primärschlüssel und das aktuelle Datum an, nicht die Schlüssel/Wert-Paare.Ihre MDB ruft die Entität anhand des Primärschlüssels ab und ruft index() auf.Nach der Indizierung setzen Sie in Ihrem Index einen Wert „aktualisiert“ auf das Nachrichtendatum.Sie aktualisieren Ihren Index nur, wenn das Nachrichtendatum nach dem „aktualisierten“ Feld des Index liegt.Auf diese Weise können Sie nicht ins Hintertreffen geraten, da Sie immer zuerst die aktuellen Schlüssel/Wert-Paare abrufen.

Als Alternative:schau mal rein http://www.compass-project.org.

Andere Tipps

Die akzeptierte Antwort ist jetzt 8 Jahre alt und sehr veraltet.

Das Compass-Projekt wird seit langem nicht mehr gepflegt, da sein Hauptentwickler dazu übergegangen ist, das hervorragende Elasticsearch zu entwickeln.

Die moderne Antwort darauf ist die Verwendung Suche im Ruhezustand, der übrigens entweder direkt oder über Elasticsearch einem Lucene-Index zugeordnet werden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top