當搜索頻繁項時,Lucene(4.6)熒光筆的性能非常低下。 搜索速度很快(100ms),但突出顯示可能需要一個多小時(!)。lucene中的非常慢的突出顯示性能
詳情:使用了優秀的文本語料庫(1.5GB純文本)。性能不取決於文本是否被分割成更多小塊。 (同時測試500MB和5MB) 存儲位置和偏移量。 如果搜索到非常頻繁的術語或模式,則快速檢索TopDoc(100ms),但每個「searcher.doc(id)」調用都很昂貴(5-50s),getBestFragments()非常昂貴(超過1小時)。即使它們被存儲併爲此目的編制索引。 (硬件:酷睿i7,8GM MEM)
大背景: 這將成爲一個語言分析研究。使用特殊的詞幹:它也存儲詞性信息。例如,如果搜索到「adj adj形式的形容詞名詞」,它將在上下文中給出它在文本中的所有出現。
我可以調整它的性能,還是應該選擇其他工具?
使用的代碼:
//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);
相關(解答)問題:https://stackoverflow.com/questions/19416804/very-slow-solr-performance-when-highlighting
非常有趣。我要研究這個。 –
有問題的代碼已經有位置和偏移。它應該是別的嗎? @ AR1 – Heidar