Lucene (4.6) Textmarker hat sehr langsame Leistung, wenn ein häufiger Begriff gesucht wird. Die Suche ist schnell (100ms), aber die Hervorhebung kann mehr als eine Stunde (!) Dauern.sehr langsam Highlight Leistung in Lucene
Details: großer Textkorpus wurde verwendet (1,5 GB Klartext). Die Leistung hängt nicht davon ab, ob der Text in kleinere Teile aufgeteilt wird oder nicht. (Getestet mit 500MB und 5MB Teilen.) Positionen und Offsets werden gespeichert. Wenn ein sehr häufiger Begriff oder Muster gesucht wird, wird TopDocs schnell abgerufen (100 ms), aber jede „searcher.doc (id)“ Anrufe sind teuer (5-50s) und getBestFragments() ist extrem teuer (mehr als 1 Stunde). Auch sie werden zu diesem Zweck gespeichert und indiziert. (Hardware: Core i7, 8GM mem)
länger Hintergrund: wäre es eine Sprachanalyse Forschung dienen. Ein spezielles Stemming wird verwendet: es speichert auch den Teil der Sprachinformation. Zum Beispiel, wenn "adj adj adjus adj Substantiv" gesucht wird, gibt es alle seine Vorkommen im Text mit Kontext.
Kann ich tune seine Leistung, oder sollte ich ein anderes Werkzeug wählen?
Gebrauchte Code:
//indexing
FieldType offsetsType = new FieldType(TextField.TYPE_STORED);
offsetsType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
offsetsType.setStored(true);
offsetsType.setIndexed(true);
offsetsType.setStoreTermVectors(true);
offsetsType.setStoreTermVectorOffsets(true);
offsetsType.setStoreTermVectorPositions(true);
offsetsType.setStoreTermVectorPayloads(true);
doc.add(new Field("content", fileContent, offsetsType));
//quering
TopDocs results = searcher.search(query, limitStart+limit);
int endPos = Math.min(results.scoreDocs.length, limitStart+limit);
int startPos = Math.min(results.scoreDocs.length, limitStart);
for (int i = startPos; i < endPos; i++) {
int id = results.scoreDocs[i].doc;
// bottleneck #1 (5-50s):
Document doc = searcher.doc(id);
FastVectorHighlighter h = new FastVectorHighlighter();
// bottleneck #2 (more than 1 hour):
String[] hs = h.getBestFragments(h.getFieldQuery(query), m, id, "content", contextSize, 10000);
Verwandte (offen) Frage: https://stackoverflow.com/questions/19416804/very-slow-solr-performance-when-highlighting
Sehr interessant. Ich werde das untersuchen. –
Der betreffende Code ist bereits mit Positionen und Offsets. Sollte es etwas anderes sein? @ AR1 – Heidar