Wie stelle ich sicher, dass, wenn ich ein paar temporäre Indizes zusammenführe (die doppelte Dokumente enthalten können oder nicht), ich am Ende mit einer Kopie im Hauptindex komme?Lucene AddIndexes (merge) - Wie vermeidet man Duplikate?
Dank
Wie stelle ich sicher, dass, wenn ich ein paar temporäre Indizes zusammenführe (die doppelte Dokumente enthalten können oder nicht), ich am Ende mit einer Kopie im Hauptindex komme?Lucene AddIndexes (merge) - Wie vermeidet man Duplikate?
Dank
Hier ist eine Art und Weise: Vorausgesetzt, dass jedes Dokument eine ID hat, und dass die doppelten Dokumente haben die gleiche ID:
mark the indexes by I1..Im.
for i in 1..m, let Ci = all the indexes but Ii
for all the documents Dj in Ii,
let cur_term = "id:<Dj's id>"
for Ik in Ci
Ik.deleteDocuments(cur_term)
merge all indexes
Der Kern ist: löschen Sie alle Dokumente, die die gleiche ID, wie sie das aktuelle Dokument aus den anderen Indizes. Nachdem Sie dies für alle Indizes getan haben, führen Sie sie zusammen. Ich weiß, das ist nicht elegant, aber ich kenne keinen besseren Algorithmus.
Danke, ich hoffte irgendwie zu vermeiden, den gesamten Temp-Index zu durchlaufen ... – Roey
Was ist, wenn die ID identisch ist, sind die Inhalte unterschiedlich. Vielleicht sollte man einen Zeitrahmen benutzen – asyncwait