Skip to content

Commit bddef9c

Browse files
committed
Improve highlighting perf (a bit) by reusing some constructs across hits, closes elastic#1513.
1 parent 8406b52 commit bddef9c

File tree

4 files changed

+181
-135
lines changed

4 files changed

+181
-135
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public void execute(SearchContext context) {
202202
for (FetchSubPhase fetchSubPhase : fetchSubPhases) {
203203
FetchSubPhase.HitContext hitContext = new FetchSubPhase.HitContext();
204204
if (fetchSubPhase.hitExecutionNeeded(context)) {
205-
hitContext.reset(searchHit, subReader, subDoc, doc);
205+
hitContext.reset(searchHit, subReader, subDoc, context.searcher().getIndexReader(), docId, doc);
206206
fetchSubPhase.hitExecute(context, hitContext);
207207
}
208208
}

modules/elasticsearch/src/main/java/org/elasticsearch/search/fetch/FetchSubPhase.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.lucene.document.Document;
2323
import org.apache.lucene.index.IndexReader;
2424
import org.elasticsearch.ElasticSearchException;
25+
import org.elasticsearch.common.collect.Maps;
2526
import org.elasticsearch.search.SearchParseElement;
2627
import org.elasticsearch.search.internal.InternalSearchHit;
2728
import org.elasticsearch.search.internal.SearchContext;
@@ -35,14 +36,19 @@ public interface FetchSubPhase {
3536

3637
public static class HitContext {
3738
private InternalSearchHit hit;
39+
private IndexReader topLevelReader;
40+
private int topLevelDocId;
3841
private IndexReader reader;
3942
private int docId;
4043
private Document doc;
44+
private Map<String, Object> cache;
4145

42-
public void reset(InternalSearchHit hit, IndexReader reader, int docId, Document doc) {
46+
public void reset(InternalSearchHit hit, IndexReader reader, int docId, IndexReader topLevelReader, int topLevelDocId, Document doc) {
4347
this.hit = hit;
4448
this.reader = reader;
4549
this.docId = docId;
50+
this.topLevelReader = topLevelReader;
51+
this.topLevelDocId = topLevelDocId;
4652
this.doc = doc;
4753
}
4854

@@ -58,9 +64,24 @@ public int docId() {
5864
return docId;
5965
}
6066

67+
public IndexReader topLevelReader() {
68+
return topLevelReader;
69+
}
70+
71+
public int topLevelDocId() {
72+
return topLevelDocId;
73+
}
74+
6175
public Document doc() {
6276
return doc;
6377
}
78+
79+
public Map<String, Object> cache() {
80+
if (cache == null) {
81+
cache = Maps.newHashMap();
82+
}
83+
return cache;
84+
}
6485
}
6586

6687
Map<String, ? extends SearchParseElement> parseElements();

0 commit comments

Comments
 (0)