Introduce a new Rewriteable interface to streamline rewriting (#25788)
Today we have duplicated code that is quite complicated to iterate over rewriteable (`QueryBuilders` mainly) This change introduces a `Rewriteable` interface that allow to share code to do the rewriting as well as encapsulation and composition of queries.
This commit is contained in:
parent
d607c3be92
commit
4d78935df7
|
@ -31,6 +31,7 @@ import org.elasticsearch.common.xcontent.XContentHelper;
|
|||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.indices.InvalidAliasNameException;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -143,7 +144,7 @@ public class AliasValidator extends AbstractComponent {
|
|||
|
||||
private static void validateAliasFilter(XContentParser parser, QueryShardContext queryShardContext) throws IOException {
|
||||
QueryBuilder parseInnerQueryBuilder = parseInnerQueryBuilder(parser);
|
||||
QueryBuilder queryBuilder = QueryBuilder.rewriteQuery(parseInnerQueryBuilder, queryShardContext);
|
||||
QueryBuilder queryBuilder = Rewriteable.rewrite(parseInnerQueryBuilder, queryShardContext);
|
||||
queryBuilder.toFilter(queryShardContext);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.elasticsearch.common.xcontent.ToXContentObject;
|
|||
|
||||
import java.io.IOException;
|
||||
|
||||
public interface QueryBuilder extends NamedWriteable, ToXContentObject {
|
||||
public interface QueryBuilder extends NamedWriteable, ToXContentObject, Rewriteable<QueryBuilder> {
|
||||
|
||||
/**
|
||||
* Converts this QueryBuilder to a lucene {@link Query}.
|
||||
|
@ -86,20 +86,4 @@ public interface QueryBuilder extends NamedWriteable, ToXContentObject {
|
|||
default QueryBuilder rewrite(QueryRewriteContext queryShardContext) throws IOException {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewrites the given query into its primitive form. Queries that for instance fetch resources from remote hosts or
|
||||
* can simplify / optimize itself should do their heavy lifting during {@link #rewrite(QueryRewriteContext)}. This method
|
||||
* rewrites the query until it doesn't change anymore.
|
||||
* @throws IOException if an {@link IOException} occurs
|
||||
*/
|
||||
static QueryBuilder rewriteQuery(QueryBuilder original, QueryRewriteContext context) throws IOException {
|
||||
QueryBuilder builder = original;
|
||||
for (QueryBuilder rewrittenBuilder = builder.rewrite(context); rewrittenBuilder != builder;
|
||||
rewrittenBuilder = builder.rewrite(context)) {
|
||||
builder = rewrittenBuilder;
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -304,7 +304,7 @@ public class QueryShardContext extends QueryRewriteContext {
|
|||
private ParsedQuery toQuery(QueryBuilder queryBuilder, CheckedFunction<QueryBuilder, Query, IOException> filterOrQuery) {
|
||||
reset();
|
||||
try {
|
||||
QueryBuilder rewriteQuery = QueryBuilder.rewriteQuery(queryBuilder, this);
|
||||
QueryBuilder rewriteQuery = Rewriteable.rewrite(queryBuilder, this);
|
||||
return new ParsedQuery(filterOrQuery.apply(rewriteQuery), copyNamedQueries());
|
||||
} catch(QueryShardException | ParsingException e ) {
|
||||
throw e;
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.elasticsearch.index.query;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* A basic interface for rewriteable classes.
|
||||
*/
|
||||
public interface Rewriteable<T> {
|
||||
|
||||
/**
|
||||
* Rewrites this instance based on the provided context. The returned
|
||||
* objects will be the same instance as this if no changes during the
|
||||
* rewrite were applied.
|
||||
*/
|
||||
T rewrite(QueryRewriteContext ctx) throws IOException;
|
||||
|
||||
/**
|
||||
* Rewrites the given {@link Rewriteable} into its primitive form. Rewriteables that for instance fetch resources from remote hosts or
|
||||
* can simplify / optimize itself should do their heavy lifting during {@link #rewrite(QueryRewriteContext)}. This method
|
||||
* rewrites the rewriteable until it doesn't change anymore.
|
||||
* @throws IOException if an {@link IOException} occurs
|
||||
*/
|
||||
static <T extends Rewriteable<T>> T rewrite(T original, QueryRewriteContext context) throws IOException {
|
||||
T builder = original;
|
||||
for (T rewrittenBuilder = builder.rewrite(context); rewrittenBuilder != builder;
|
||||
rewrittenBuilder = builder.rewrite(context)) {
|
||||
builder = rewrittenBuilder;
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
}
|
|
@ -27,6 +27,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.IndexSettings;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
||||
|
@ -195,7 +196,7 @@ public class AdjacencyMatrixAggregationBuilder extends AbstractAggregationBuilde
|
|||
|
||||
List<KeyedFilter> rewrittenFilters = new ArrayList<>(filters.size());
|
||||
for (KeyedFilter kf : filters) {
|
||||
rewrittenFilters.add(new KeyedFilter(kf.key(), QueryBuilder.rewriteQuery(kf.filter(), context.getQueryShardContext())));
|
||||
rewrittenFilters.add(new KeyedFilter(kf.key(), Rewriteable.rewrite(kf.filter(), context.getQueryShardContext())));
|
||||
}
|
||||
|
||||
return new AdjacencyMatrixAggregatorFactory(name, rewrittenFilters, separator, context, parent,
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregatorFactories;
|
||||
|
@ -72,7 +73,7 @@ public class FilterAggregationBuilder extends AbstractAggregationBuilder<FilterA
|
|||
|
||||
@Override
|
||||
protected AggregationBuilder doRewrite(QueryRewriteContext queryShardContext) throws IOException {
|
||||
QueryBuilder result = QueryBuilder.rewriteQuery(filter, queryShardContext);
|
||||
QueryBuilder result = Rewriteable.rewrite(filter, queryShardContext);
|
||||
if (result != filter) {
|
||||
return new FilterAggregationBuilder(getName(), result);
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
||||
|
@ -174,7 +175,7 @@ public class FiltersAggregationBuilder extends AbstractAggregationBuilder<Filter
|
|||
List<KeyedFilter> rewrittenFilters = new ArrayList<>(filters.size());
|
||||
boolean changed = false;
|
||||
for (KeyedFilter kf : filters) {
|
||||
QueryBuilder result = QueryBuilder.rewriteQuery(kf.filter(), queryShardContext);
|
||||
QueryBuilder result = Rewriteable.rewrite(kf.filter(), queryShardContext);
|
||||
rewrittenFilters.add(new KeyedFilter(kf.key(), result));
|
||||
if (result != kf.filter()) {
|
||||
changed = true;
|
||||
|
|
|
@ -36,7 +36,9 @@ import org.elasticsearch.common.xcontent.ToXContentObject;
|
|||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.script.Script;
|
||||
import org.elasticsearch.search.SearchExtBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||
|
@ -71,7 +73,7 @@ import static org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQuery
|
|||
*
|
||||
* @see org.elasticsearch.action.search.SearchRequest#source(SearchSourceBuilder)
|
||||
*/
|
||||
public final class SearchSourceBuilder extends ToXContentToBytes implements Writeable, ToXContentObject {
|
||||
public final class SearchSourceBuilder extends ToXContentToBytes implements Writeable, ToXContentObject, Rewriteable<SearchSourceBuilder> {
|
||||
private static final DeprecationLogger DEPRECATION_LOGGER =
|
||||
new DeprecationLogger(Loggers.getLogger(SearchSourceBuilder.class));
|
||||
|
||||
|
@ -870,7 +872,8 @@ public final class SearchSourceBuilder extends ToXContentToBytes implements Writ
|
|||
* reference must be returned otherwise the builder will be rewritten
|
||||
* infinitely.
|
||||
*/
|
||||
public SearchSourceBuilder rewrite(QueryShardContext context) throws IOException {
|
||||
@Override
|
||||
public SearchSourceBuilder rewrite(QueryRewriteContext context) throws IOException {
|
||||
assert (this.equals(shallowCopy(queryBuilder, postQueryBuilder, aggregations, sliceBuilder)));
|
||||
QueryBuilder queryBuilder = null;
|
||||
if (this.queryBuilder != null) {
|
||||
|
@ -901,7 +904,7 @@ public final class SearchSourceBuilder extends ToXContentToBytes implements Writ
|
|||
|
||||
/**
|
||||
* Create a shallow copy of this source replaced {@link #queryBuilder}, {@link #postQueryBuilder}, and {@link #sliceBuilder}. Used by
|
||||
* {@link #rewrite(QueryShardContext)} and {@link #copyWithNewSlice(SliceBuilder)}.
|
||||
* {@link #rewrite(QueryRewriteContext)} and {@link #copyWithNewSlice(SliceBuilder)}.
|
||||
*/
|
||||
private SearchSourceBuilder shallowCopy(QueryBuilder queryBuilder, QueryBuilder postQueryBuilder,
|
||||
AggregatorFactories.Builder aggregations, SliceBuilder slice) {
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.search.fetch.subphase.highlight.SearchContextHighlight.FieldOptions;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -357,7 +358,7 @@ public class HighlightBuilder extends AbstractHighlighterBuilder<HighlightBuilde
|
|||
targetOptionsBuilder.options(highlighterBuilder.options);
|
||||
}
|
||||
if (highlighterBuilder.highlightQuery != null) {
|
||||
targetOptionsBuilder.highlightQuery(QueryBuilder.rewriteQuery(highlighterBuilder.highlightQuery, context).toQuery(context));
|
||||
targetOptionsBuilder.highlightQuery(Rewriteable.rewrite(highlighterBuilder.highlightQuery, context).toQuery(context));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.elasticsearch.common.io.stream.StreamOutput;
|
|||
import org.elasticsearch.common.io.stream.Writeable;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
@ -33,7 +34,7 @@ import java.util.Objects;
|
|||
/**
|
||||
* Represents a {@link QueryBuilder} and a list of alias names that filters the builder is composed of.
|
||||
*/
|
||||
public final class AliasFilter implements Writeable {
|
||||
public final class AliasFilter implements Writeable, Rewriteable<AliasFilter> {
|
||||
|
||||
private final String[] aliases;
|
||||
private final QueryBuilder filter;
|
||||
|
@ -50,12 +51,16 @@ public final class AliasFilter implements Writeable {
|
|||
filter = input.readOptionalNamedWriteable(QueryBuilder.class);
|
||||
}
|
||||
|
||||
AliasFilter rewrite(QueryRewriteContext context) throws IOException {
|
||||
@Override
|
||||
public AliasFilter rewrite(QueryRewriteContext context) throws IOException {
|
||||
QueryBuilder queryBuilder = this.filter;
|
||||
if (queryBuilder != null) {
|
||||
return new AliasFilter(QueryBuilder.rewriteQuery(queryBuilder, context), aliases);
|
||||
QueryBuilder rewrite = Rewriteable.rewrite(queryBuilder, context);
|
||||
if (rewrite != queryBuilder) {
|
||||
return new AliasFilter(rewrite, aliases);
|
||||
}
|
||||
}
|
||||
return new AliasFilter(filter, aliases);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -29,7 +29,9 @@ import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.search.Scroll;
|
||||
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||
|
@ -236,15 +238,9 @@ public class ShardSearchLocalRequest implements ShardSearchRequest {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void rewrite(QueryShardContext context) throws IOException {
|
||||
SearchSourceBuilder source = this.source;
|
||||
SearchSourceBuilder rewritten = null;
|
||||
aliasFilter = aliasFilter.rewrite(context);
|
||||
while (rewritten != source) {
|
||||
rewritten = source.rewrite(context);
|
||||
source = rewritten;
|
||||
}
|
||||
this.source = source;
|
||||
public void rewrite(QueryRewriteContext context) throws IOException {
|
||||
aliasFilter = Rewriteable.rewrite(aliasFilter, context);
|
||||
source = source == null ? null : Rewriteable.rewrite(source, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.elasticsearch.common.collect.ImmutableOpenMap;
|
|||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.indices.AliasFilterParsingException;
|
||||
|
@ -87,7 +88,7 @@ public interface ShardSearchRequest {
|
|||
* Rewrites this request into its primitive form. e.g. by rewriting the
|
||||
* QueryBuilder.
|
||||
*/
|
||||
void rewrite(QueryShardContext context) throws IOException;
|
||||
void rewrite(QueryRewriteContext context) throws IOException;
|
||||
|
||||
/**
|
||||
* Returns the filter associated with listed filtering aliases.
|
||||
|
|
|
@ -29,6 +29,7 @@ import org.elasticsearch.common.bytes.BytesReference;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.search.Scroll;
|
||||
|
@ -167,7 +168,7 @@ public class ShardSearchTransportRequest extends TransportRequest implements Sha
|
|||
}
|
||||
|
||||
@Override
|
||||
public void rewrite(QueryShardContext context) throws IOException {
|
||||
public void rewrite(QueryRewriteContext context) throws IOException {
|
||||
shardSearchLocalRequest.rewrite(context);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.search.rescore.QueryRescorer.QueryRescoreContext;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -170,7 +171,7 @@ public class QueryRescorerBuilder extends RescoreBuilder<QueryRescorerBuilder> {
|
|||
public QueryRescoreContext build(QueryShardContext context) throws IOException {
|
||||
org.elasticsearch.search.rescore.QueryRescorer rescorer = new org.elasticsearch.search.rescore.QueryRescorer();
|
||||
QueryRescoreContext queryRescoreContext = new QueryRescoreContext(rescorer);
|
||||
queryRescoreContext.setQuery(QueryBuilder.rewriteQuery(this.queryBuilder, context).toQuery(context));
|
||||
queryRescoreContext.setQuery(Rewriteable.rewrite(this.queryBuilder, context).toQuery(context));
|
||||
queryRescoreContext.setQueryWeight(this.queryWeight);
|
||||
queryRescoreContext.setRescoreQueryWeight(this.rescoreQueryWeight);
|
||||
queryRescoreContext.setScoreMode(this.scoreMode);
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.elasticsearch.index.mapper.ObjectMapper;
|
|||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.QueryShardException;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.search.DocValueFormat;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -189,7 +190,7 @@ public abstract class SortBuilder<T extends SortBuilder<T>> extends ToXContentTo
|
|||
Query innerDocumentsQuery;
|
||||
if (nestedFilter != null) {
|
||||
context.nestedScope().nextLevel(nestedObjectMapper);
|
||||
innerDocumentsQuery = QueryBuilder.rewriteQuery(nestedFilter, context).toFilter(context);
|
||||
innerDocumentsQuery = Rewriteable.rewrite(nestedFilter, context).toFilter(context);
|
||||
context.nestedScope().previousLevel();
|
||||
} else {
|
||||
innerDocumentsQuery = nestedObjectMapper.nestedTypeFilter();
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.elasticsearch.common.unit.TimeValue;
|
|||
import org.elasticsearch.common.util.BigArrays;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.search.Scroll;
|
||||
|
@ -125,7 +126,7 @@ public class SearchSlowLogTests extends ESSingleNodeTestCase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void rewrite(QueryShardContext context) throws IOException {
|
||||
public void rewrite(QueryRewriteContext context) throws IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -416,7 +416,7 @@ public class BoolQueryBuilderTests extends AbstractQueryTestCase<BoolQueryBuilde
|
|||
expected.must(new MatchAllQueryBuilder());
|
||||
QueryBuilder rewrittenAgain = rewritten.rewrite(createShardContext());
|
||||
assertEquals(rewrittenAgain, expected);
|
||||
assertEquals(QueryBuilder.rewriteQuery(boolQueryBuilder, createShardContext()), expected);
|
||||
assertEquals(Rewriteable.rewrite(boolQueryBuilder, createShardContext()), expected);
|
||||
}
|
||||
|
||||
public void testRewriteWithMatchNone() throws IOException {
|
||||
|
@ -434,7 +434,7 @@ public class BoolQueryBuilderTests extends AbstractQueryTestCase<BoolQueryBuilde
|
|||
boolQueryBuilder = new BoolQueryBuilder();
|
||||
boolQueryBuilder.must(new TermQueryBuilder("foo","bar"));
|
||||
boolQueryBuilder.filter(new BoolQueryBuilder().should(new TermQueryBuilder("foo","bar")).filter(new MatchNoneQueryBuilder()));
|
||||
rewritten = QueryBuilder.rewriteQuery(boolQueryBuilder, createShardContext());
|
||||
rewritten = Rewriteable.rewrite(boolQueryBuilder, createShardContext());
|
||||
assertEquals(new MatchNoneQueryBuilder(), rewritten);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -430,5 +430,4 @@ public class IndicesServiceTests extends ESSingleNodeTestCase {
|
|||
assertThat("index not defined", indexStats.containsKey(index), equalTo(true));
|
||||
assertThat("unexpected shard stats", indexStats.get(index), equalTo(shardStats));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ import org.elasticsearch.index.query.IdsQueryBuilder;
|
|||
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.index.query.TermQueryBuilder;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.BoundaryScannerType;
|
||||
|
@ -320,9 +321,9 @@ public class HighlightBuilderTests extends ESTestCase {
|
|||
}
|
||||
Query expectedValue = null;
|
||||
if (fieldBuilder.highlightQuery != null) {
|
||||
expectedValue = QueryBuilder.rewriteQuery(fieldBuilder.highlightQuery, mockShardContext).toQuery(mockShardContext);
|
||||
expectedValue = Rewriteable.rewrite(fieldBuilder.highlightQuery, mockShardContext).toQuery(mockShardContext);
|
||||
} else if (highlightBuilder.highlightQuery != null) {
|
||||
expectedValue = QueryBuilder.rewriteQuery(highlightBuilder.highlightQuery, mockShardContext).toQuery(mockShardContext);
|
||||
expectedValue = Rewriteable.rewrite(highlightBuilder.highlightQuery, mockShardContext).toQuery(mockShardContext);
|
||||
}
|
||||
assertEquals(expectedValue, fieldOptions.highlightQuery());
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ import org.elasticsearch.index.mapper.TextFieldMapper;
|
|||
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
import org.elasticsearch.search.rescore.QueryRescorer.QueryRescoreContext;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
|
@ -150,7 +151,7 @@ public class QueryRescoreBuilderTests extends ESTestCase {
|
|||
int expectedWindowSize = rescoreBuilder.windowSize() == null ? QueryRescoreContext.DEFAULT_WINDOW_SIZE :
|
||||
rescoreBuilder.windowSize().intValue();
|
||||
assertEquals(expectedWindowSize, rescoreContext.window());
|
||||
Query expectedQuery = QueryBuilder.rewriteQuery(rescoreBuilder.getRescoreQuery(), mockShardContext).toQuery(mockShardContext);
|
||||
Query expectedQuery = Rewriteable.rewrite(rescoreBuilder.getRescoreQuery(), mockShardContext).toQuery(mockShardContext);
|
||||
assertEquals(expectedQuery, rescoreContext.query());
|
||||
assertEquals(rescoreBuilder.getQueryWeight(), rescoreContext.queryWeight(), Float.MIN_VALUE);
|
||||
assertEquals(rescoreBuilder.getRescoreQueryWeight(), rescoreContext.rescoreQueryWeight(), Float.MIN_VALUE);
|
||||
|
|
|
@ -60,6 +60,7 @@ import org.elasticsearch.index.query.DisMaxQueryBuilder;
|
|||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.QueryShardException;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -282,7 +283,7 @@ public class PercolatorFieldMapper extends FieldMapper {
|
|||
);
|
||||
verifyQuery(queryBuilder);
|
||||
// Fetching of terms, shapes and indexed scripts happen during this rewrite:
|
||||
queryBuilder = QueryBuilder.rewriteQuery(queryBuilder, queryShardContext);
|
||||
queryBuilder = Rewriteable.rewrite(queryBuilder, queryShardContext);
|
||||
|
||||
try (XContentBuilder builder = XContentFactory.contentBuilder(QUERY_BUILDER_CONTENT_TYPE)) {
|
||||
queryBuilder.toXContent(builder, new MapParams(Collections.emptyMap()));
|
||||
|
|
|
@ -74,6 +74,7 @@ import org.elasticsearch.index.query.AbstractQueryBuilder;
|
|||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryRewriteContext;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.Rewriteable;
|
||||
import org.elasticsearch.index.query.support.QueryParsers;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
|
@ -618,7 +619,7 @@ public abstract class AbstractQueryTestCase<QB extends AbstractQueryBuilder<QB>>
|
|||
}
|
||||
|
||||
private QueryBuilder rewriteQuery(QB queryBuilder, QueryRewriteContext rewriteContext) throws IOException {
|
||||
QueryBuilder rewritten = QueryBuilder.rewriteQuery(queryBuilder, rewriteContext);
|
||||
QueryBuilder rewritten = Rewriteable.rewrite(queryBuilder, rewriteContext);
|
||||
// extra safety to fail fast - serialize the rewritten version to ensure it's serializable.
|
||||
assertSerialization(rewritten);
|
||||
return rewritten;
|
||||
|
|
Loading…
Reference in New Issue