@Override public Rewriteable rewrite(QueryRewriteContext ctx) throws IOException { SearchSourceBuilder newSource = request.source() == null ? null : Rewriteable.rewrite(request.source(), ctx); AliasFilter newAliasFilter = Rewriteable.rewrite(request.getAliasFilter(), ctx); if (newSource == request.source() && newAliasFilter == request.getAliasFilter()) { return this; } else { request.source(newSource); request.setAliasFilter(newAliasFilter); return new RequestRewritable(request); } } }
@Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(searchContext.indexShard().shardId()); builder.append(" "); if (searchContext.request() != null && searchContext.request().source() != null) { builder.append("source[").append(searchContext.request().source().toString()).append("], "); } else { builder.append("source[], "); } if (searchContext.getTask() != null && searchContext.getTask().getHeader(Task.X_OPAQUE_ID) != null) { builder.append("id[").append(searchContext.getTask().getHeader(Task.X_OPAQUE_ID)).append("], "); } else { builder.append("id[], "); } return builder.toString(); } }
/** * This method does a very quick rewrite of the query and returns true if the query can potentially match any documents. * This method can have false positives while if it returns <code>false</code> the query won't match any documents on the current * shard. */ public boolean canMatch(ShardSearchRequest request) throws IOException { assert request.searchType() == SearchType.QUERY_THEN_FETCH : "unexpected search type: " + request.searchType(); try (DefaultSearchContext context = createSearchContext(request, defaultSearchTimeout, false, "can_match")) { SearchSourceBuilder source = context.request().source(); if (canRewriteToMatchNone(source)) { QueryBuilder queryBuilder = source.query(); return queryBuilder instanceof MatchNoneQueryBuilder == false; } return true; // null query means match_all } }
@Override public Rewriteable rewrite(QueryRewriteContext ctx) throws IOException { SearchSourceBuilder newSource = request.source() == null ? null : Rewriteable.rewrite(request.source(), ctx); AliasFilter newAliasFilter = Rewriteable.rewrite(request.getAliasFilter(), ctx); if (newSource == request.source() && newAliasFilter == request.getAliasFilter()) { return this; } else { request.source(newSource); request.setAliasFilter(newAliasFilter); return new RequestRewritable(request); } } }
@Override public Rewriteable rewrite(QueryRewriteContext ctx) throws IOException { SearchSourceBuilder newSource = request.source() == null ? null : Rewriteable.rewrite(request.source(), ctx); AliasFilter newAliasFilter = Rewriteable.rewrite(request.getAliasFilter(), ctx); if (newSource == request.source() && newAliasFilter == request.getAliasFilter()) { return this; } else { request.source(newSource); request.setAliasFilter(newAliasFilter); return new RequestRewritable(request); } } }
context.scrollContext().scroll = request.scroll(); parseSource(context, request.source());
@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(context.indexShard().shardId()).append(" "); sb.append("took[").append(TimeValue.timeValueNanos(tookInNanos)).append("], took_millis[").append(TimeUnit.NANOSECONDS.toMillis(tookInNanos)).append("], "); if (context.getQueryShardContext().getTypes() == null) { sb.append("types[], "); } else { sb.append("types["); Strings.arrayToDelimitedString(context.getQueryShardContext().getTypes(), ",", sb); sb.append("], "); } if (context.groupStats() == null) { sb.append("stats[], "); } else { sb.append("stats["); Strings.collectionToDelimitedString(context.groupStats(), ",", "", "", sb); sb.append("], "); } sb.append("search_type[").append(context.searchType()).append("], total_shards[").append(context.numberOfShards()).append("], "); if (context.request().source() != null) { sb.append("source[").append(context.request().source().toString(FORMAT_PARAMS)).append("], "); } else { sb.append("source[], "); } return sb.toString(); } }
/** * This method does a very quick rewrite of the query and returns true if the query can potentially match any documents. * This method can have false positives while if it returns <code>false</code> the query won't match any documents on the current * shard. */ public boolean canMatch(ShardSearchRequest request) throws IOException { assert request.searchType() == SearchType.QUERY_THEN_FETCH : "unexpected search type: " + request.searchType(); try (DefaultSearchContext context = createSearchContext(request, defaultSearchTimeout, false)) { SearchSourceBuilder source = context.request().source(); if (canRewriteToMatchNone(source)) { QueryBuilder queryBuilder = source.query(); return queryBuilder instanceof MatchNoneQueryBuilder == false; } return true; // null query means match_all } }
request.source(processedQuery);
context.scrollContext().scroll = request.scroll(); parseSource(context, request.source());
context.scrollContext().scroll = request.scroll(); parseSource(context, request.source());
parseSource(context, request.source()); parseSource(context, request.extraSource());