2 Stimmen

Beste Möglichkeit, ein bestimmtes Feld aller von einer Lucene-Suche zurückgegebenen Dokumente abzurufen

Ich fragte mich, was der beste Weg ist, um ein bestimmtes Feld aller Dokumente von einem Searcher von Lucene zurückgegeben abrufen.

Hintergrund: jedes Dokument hat ein Datumsfeld (beschrieben) und ich möchte eine Zeitleiste aller gefundenen Dokumente anzeigen, also muss ich das Datumsfeld (Tag) aller Dokumente extrahieren, die ich mit der Suche finde.

Ich rufe derzeit jedes Dokument mit Searcher.doc(int, FieldSelector) ab, wobei der Selektor nur das bestimmte Feld abruft.

Ich habe 250k Dokumente indiziert, die Suche selbst dauert nicht lange und liefert etwa 10k Dokument-IDs.

Das Abrufen dieser Daten dauert jedoch mehr als 20 Sekunden.

Was kann ich tun, um die Dinge zu beschleunigen, aber trotzdem alle benötigten Werte zu erhalten?

4voto

Shashikant Kore Punkte 4874

Eine bessere Möglichkeit, Feldwerte abzurufen, ist der FieldCache. Wenn der Feldwert beispielsweise eine Zeichenkette ist, können Sie die Werte wie folgt abrufen.

String[] fieldValues = FieldCache.DEFAULT.getStrings(indexReader, "FieldName")

Wie der Name schon sagt, werden diese Werte zwischengespeichert. Das heißt, nachfolgende Aufrufe benötigen keine Zeit. Sie können nun in diesem Array mit der Lucene-Dokument-ID nachsehen, um den Wert dieses Feldes für das angegebene Dokument abzurufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X