@Override public PercolateShardResponse doPercolate( PercolateShardRequest request, PercolateContext context) { long count = 0; Lucene.ExistsCollector collector = new Lucene.ExistsCollector(); for (Map.Entry<HashedBytesRef, Query> entry : context.percolateQueries().entrySet()) { collector.reset(); try { context.docSearcher().search(entry.getValue(), collector); } catch (Throwable e) { logger.debug("[" + entry.getKey() + "] failed to execute query", e); throw new PercolateException(context.indexShard().shardId(), "failed to execute", e); } if (collector.exists()) { count++; } } return new PercolateShardResponse(count, context, request.index(), request.shardId()); }
@Override public PercolateShardResponse doPercolate( PercolateShardRequest request, PercolateContext context) { long count = 0; List<BytesRef> matches = new ArrayList<>(); List<Map<String, HighlightField>> hls = new ArrayList<>(); Lucene.ExistsCollector collector = new Lucene.ExistsCollector(); for (Map.Entry<HashedBytesRef, Query> entry : context.percolateQueries().entrySet()) { collector.reset(); if (context.highlight() != null) { context.parsedQuery( new ParsedQuery(entry.getValue(), ImmutableMap.<String, Filter>of())); context.hitContext().cache().clear(); } try { context.docSearcher().search(entry.getValue(), collector); } catch (Throwable e) { logger.debug("[" + entry.getKey() + "] failed to execute query", e); throw new PercolateException(context.indexShard().shardId(), "failed to execute", e); } if (collector.exists()) { if (!context.limit || count < context.size()) { matches.add(entry.getKey().bytes); if (context.highlight() != null) { highlightPhase.hitExecute(context, context.hitContext()); hls.add(context.hitContext().hit().getHighlightFields()); } } count++; } } BytesRef[] finalMatches = matches.toArray(new BytesRef[matches.size()]); return new PercolateShardResponse( finalMatches, hls, count, context, request.index(), request.shardId()); }