From c9424c36ea00c2dd222f9f291827501db4346651 Mon Sep 17 00:00:00 2001 From: Jim Ferenczi Date: Mon, 16 Jul 2018 14:51:07 +0200 Subject: [PATCH] Bypass highlight query terms extraction on empty fields Dealing with empty fields in the highlight phase can slow down the query because the query terms extraction is done independently on each field. This change shortcuts the highlighting performed by the unified highlighter for fields that are not present in the document. In such cases there is nothing to higlight so we don't need to visit the query to build the highligh builder. --- .../search/fetch/subphase/highlight/UnifiedHighlighter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/UnifiedHighlighter.java b/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/UnifiedHighlighter.java index 7f209ed0586e0..2c9d482cab0b2 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/UnifiedHighlighter.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/UnifiedHighlighter.java @@ -76,6 +76,9 @@ public HighlightField highlight(HighlighterContext highlighterContext) { fieldValues = fieldValues.stream() .map((s) -> convertFieldValue(fieldType, s)) .collect(Collectors.toList()); + if (fieldValues.size() == 0) { + return null; + } final IndexSearcher searcher = new IndexSearcher(hitContext.reader()); final CustomUnifiedHighlighter highlighter; final String fieldValue = mergeFieldValues(fieldValues, MULTIVAL_SEP_CHAR);