Lucene (4.6) Highlighter hat eine sehr langsame Leistung, wenn ein häufiger Begriff gesucht wird. Die Suche ist schnell (100 ms), aber die Hervorhebung kann mehr als eine Stunde dauern (!).
Details: großer Textkorpus wurde verwendet (1,5 GB einfacher Text). Die Leistung hängt nicht davon ab, ob der Text in kleinere Teile aufgeteilt wird oder nicht. (Geprüft mit 500MB und 5MB Stücken auch.) Positionen und Offsets werden gespeichert. Wenn ein sehr häufiger Ausdruck oder Muster gesucht wird, werden TopDocs schnell abgerufen (100ms), aber jede "searcher.doc (id)" -Aufrufe sind teuer (5-50s), und getBestFragments () sind extrem teuer (mehr als 1 Stunde) . Auch sie werden zu diesem Zweck gespeichert und indiziert. (Hardware: Core i7, 8GM mem)
Größerer Hintergrund : es würde einer Sprachanalyseforschung dienen. Ein spezielles Stemming wird verwendet: es speichert auch den Teil der Sprachinformation. Zum Beispiel, wenn "adj adj adjust adjorn" gesucht wird, gibt es alle seine Vorkommen im Text mit Kontext.
Kann ich die Leistung optimieren oder sollte ich ein anderes Tool wählen?
Verwendeter Code:
%Vor%Verwandte (unbeantwortete) Frage: Ссылка
BestFragments basiert auf der Tokenisierung, die von dem von Ihnen verwendeten Analyseprogramm durchgeführt wird. Wenn Sie einen so großen Text analysieren müssen, sollten Sie den Termvektor WITH_POSITIONS_OFFSETS
zur Indexierungszeit speichern.
Bitte lesen Sie dies und dieses Buch
Dadurch müssen Sie nicht den gesamten Text zur Laufzeit analysieren, da Sie eine Methode zur Wiederverwendung des vorhandenen Termvektors verwenden können und dadurch die Hervorhebungszeit reduziert wird.
Tags und Links java performance lucene highlight