@Override
    public Result search(Query query, Execution execution) {
        IndexFacts indexFacts = execution.context().getIndexFacts();
        if ( ! indexFacts.hasNGramIndices()) return execution.search(query); // shortcut

        IndexFacts.Session session = indexFacts.newSession(query);
        boolean rewritten = rewriteToNGramMatching(query.getModel().getQueryTree().getRoot(), 0, session, query);
        if (rewritten)
            query.trace("Rewritten to n-gram matching", true, 2);

        Result result = execution.search(query);
        recombineNGrams(result.hits().deepIterator(), session);
        return result;
    }
Handles NGram indexes by splitting query terms to them into grams and combining summary field values
from such fields into the original text.
<p>
This declares it must be placed after Juniper searchers because it assumes Juniper token separators
(which are returned on bolding) are not replaced by highlight tags when this is run (and "after" means
"before" from the point of view of the result).

@author bratseth
container-search/src/main/java/com/yahoo/search/querytransform/NGramSearcher.java