summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/index/query
diff options
context:
space:
mode:
authorSimon Willnauer <simonw@apache.org>2016-02-12 12:53:12 +0100
committerSimon Willnauer <simonw@apache.org>2016-02-12 12:53:12 +0100
commitb906c8a389b36206685b46d70f114d6cef82cb15 (patch)
tree153faa6b3f425a1e2a6d45d11f59769fed815e09 /core/src/main/java/org/elasticsearch/index/query
parent685bee308130d02fc379e09da7b817fff3a479b6 (diff)
apply fixes after review
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index/query')
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/AbstractQueryBuilder.java19
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java14
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java9
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/ConstantScoreQueryBuilder.java6
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/EmptyQueryBuilder.java8
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java7
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java6
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/HasParentQueryBuilder.java4
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java4
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java6
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java8
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/QueryRewriteContext.java19
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/QueryShardContext.java4
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java11
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/TermsQueryBuilder.java6
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java13
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/functionscore/FunctionScoreQueryBuilder.java25
19 files changed, 103 insertions, 70 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/query/AbstractQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/AbstractQueryBuilder.java
index d2116ae3c0..39c835e4b0 100644
--- a/core/src/main/java/org/elasticsearch/index/query/AbstractQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/AbstractQueryBuilder.java
@@ -258,4 +258,23 @@ public abstract class AbstractQueryBuilder<QB extends AbstractQueryBuilder<QB>>
}
return queries;
}
+
+ @Override
+ public final QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
+ QueryBuilder rewritten = doRewrite(queryShardContext);
+ if (rewritten == this) {
+ return rewritten;
+ }
+ if (queryName() != null && rewritten.queryName() == null) { // we inherit the name
+ rewritten.queryName(queryName());
+ }
+ if (boost() != DEFAULT_BOOST && rewritten.boost() == DEFAULT_BOOST) {
+ rewritten.boost(boost());
+ }
+ return rewritten;
+ }
+
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryShardContext) throws IOException {
+ return this;
+ }
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java
index 72e13c2c31..261acff33c 100644
--- a/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java
@@ -263,6 +263,13 @@ public class BoolQueryBuilder extends AbstractQueryBuilder<BoolQueryBuilder> {
@Override
protected Query doToQuery(QueryShardContext context) throws IOException {
+ final int numClauses = mustNotClauses.size() + filterClauses.size() + shouldClauses.size() + mustClauses.size();
+ if (numClauses == 1 && must().size() == 1 && boost() == DEFAULT_BOOST) {
+ // we really only optimize this for testing since we use this to rewrite
+ // named queries TemplateQueryBuilder and WrapperQueryBuilder.
+ // it's equivalent but will anyways happen later down the road in the BQ#rewrite method
+ return mustClauses.get(0).toQuery(context);
+ }
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
booleanQueryBuilder.setDisableCoord(disableCoord);
addBooleanClauses(context, booleanQueryBuilder, mustClauses, BooleanClause.Occur.MUST);
@@ -273,6 +280,7 @@ public class BoolQueryBuilder extends AbstractQueryBuilder<BoolQueryBuilder> {
if (booleanQuery.clauses().isEmpty()) {
return new MatchAllDocsQuery();
}
+
final String minimumShouldMatch;
if (context.isFilter() && this.minimumShouldMatch == null && shouldClauses.size() > 0) {
minimumShouldMatch = "1";
@@ -349,7 +357,7 @@ public class BoolQueryBuilder extends AbstractQueryBuilder<BoolQueryBuilder> {
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
BoolQueryBuilder newBuilder = new BoolQueryBuilder();
boolean changed = false;
final int clauses = mustClauses.size() + mustNotClauses.size() + filterClauses.size() + shouldClauses.size();
@@ -372,14 +380,14 @@ public class BoolQueryBuilder extends AbstractQueryBuilder<BoolQueryBuilder> {
return this;
}
- private static boolean rewriteClauses(QueryRewriteContext queryRewriteContext, List<QueryBuilder<?>> builders, Consumer<QueryBuilder<?>> conusmer) throws IOException {
+ private static boolean rewriteClauses(QueryRewriteContext queryRewriteContext, List<QueryBuilder<?>> builders, Consumer<QueryBuilder<?>> consumer) throws IOException {
boolean changed = false;
for (QueryBuilder builder : builders) {
QueryBuilder result = builder.rewrite(queryRewriteContext);
if (result != builder) {
changed = true;
}
- conusmer.accept(result);
+ consumer.accept(result);
}
return changed;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java
index 507e85687d..d03d6894b0 100644
--- a/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java
@@ -160,12 +160,11 @@ public class BoostingQueryBuilder extends AbstractQueryBuilder<BoostingQueryBuil
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
- QueryBuilder positiveQuery = this.positiveQuery.rewrite(queryShardContext);
- QueryBuilder negativeQuery = this.negativeQuery.rewrite(queryShardContext);
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ QueryBuilder positiveQuery = this.positiveQuery.rewrite(queryRewriteContext);
+ QueryBuilder negativeQuery = this.negativeQuery.rewrite(queryRewriteContext);
if (positiveQuery != this.positiveQuery || negativeQuery != this.negativeQuery) {
- BoostingQueryBuilder newQueryBuilder = new BoostingQueryBuilder(positiveQuery, negativeQuery)
- .boost(boost()).queryName(queryName());
+ BoostingQueryBuilder newQueryBuilder = new BoostingQueryBuilder(positiveQuery, negativeQuery);
newQueryBuilder.negativeBoost = negativeBoost;
return newQueryBuilder;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/ConstantScoreQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/ConstantScoreQueryBuilder.java
index ad00bba28b..ee6fa4c2c2 100644
--- a/core/src/main/java/org/elasticsearch/index/query/ConstantScoreQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/ConstantScoreQueryBuilder.java
@@ -106,10 +106,10 @@ public class ConstantScoreQueryBuilder extends AbstractQueryBuilder<ConstantScor
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
- QueryBuilder rewrite = filterBuilder.rewrite(queryShardContext);
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ QueryBuilder rewrite = filterBuilder.rewrite(queryRewriteContext);
if (rewrite != filterBuilder) {
- return new ConstantScoreQueryBuilder(rewrite).boost(boost()).queryName(queryName());
+ return new ConstantScoreQueryBuilder(rewrite);
}
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/EmptyQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/EmptyQueryBuilder.java
index 83f7abae7a..e810292a95 100644
--- a/core/src/main/java/org/elasticsearch/index/query/EmptyQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/EmptyQueryBuilder.java
@@ -20,24 +20,16 @@
package org.elasticsearch.index.query;
import org.apache.lucene.search.Query;
-import org.elasticsearch.action.support.ToXContentToBytes;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
-import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
-import java.util.Objects;
/**
* A {@link QueryBuilder} that is a stand in replacement for an empty query clause in the DSL.
* The current DSL allows parsing inner queries / filters like "{ }", in order to have a
* valid non-null representation of these clauses that actually do nothing we can use this class.
- *
- * This builder has no corresponding parser and it is not registered under the query name. It is
- * intended to be used internally as a stand-in for nested queries that are left empty and should
- * be ignored upstream.
*/
public final class EmptyQueryBuilder extends AbstractQueryBuilder<EmptyQueryBuilder> {
diff --git a/core/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java
index db64aa3a7d..dd186f92ba 100644
--- a/core/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java
@@ -235,7 +235,7 @@ public class GeoShapeQueryBuilder extends AbstractQueryBuilder<GeoShapeQueryBuil
}
@Override
- protected Query doToQuery(QueryShardContext context) throws IOException {
+ protected Query doToQuery(QueryShardContext context) {
if (shape == null) {
throw new UnsupportedOperationException("query must be rewritten first");
}
@@ -449,12 +449,11 @@ public class GeoShapeQueryBuilder extends AbstractQueryBuilder<GeoShapeQueryBuil
}
@Override
- public QueryBuilder<GeoShapeQueryBuilder> rewrite(QueryRewriteContext queryShardContext) throws IOException {
+ protected QueryBuilder<GeoShapeQueryBuilder> doRewrite(QueryRewriteContext queryShardContext) throws IOException {
if (this.shape == null) {
GetRequest getRequest = new GetRequest(indexedShapeIndex, indexedShapeType, indexedShapeId);
ShapeBuilder shape = fetch(queryShardContext.getClient(), getRequest, indexedShapePath);
- return new GeoShapeQueryBuilder(this.fieldName, shape).relation(relation).strategy(strategy)
- .boost(boost()).queryName(queryName());
+ return new GeoShapeQueryBuilder(this.fieldName, shape).relation(relation).strategy(strategy);
}
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java
index 66c9d77534..940fa89f03 100644
--- a/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java
@@ -398,15 +398,15 @@ public class HasChildQueryBuilder extends AbstractQueryBuilder<HasChildQueryBuil
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
- QueryBuilder rewrite = query.rewrite(queryShardContext);
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ QueryBuilder rewrite = query.rewrite(queryRewriteContext);
if (rewrite != query) {
HasChildQueryBuilder hasChildQueryBuilder = new HasChildQueryBuilder(type, rewrite);
hasChildQueryBuilder.minChildren = minChildren;
hasChildQueryBuilder.maxChildren = maxChildren;
hasChildQueryBuilder.scoreMode = scoreMode;
hasChildQueryBuilder.queryInnerHits = queryInnerHits;
- return hasChildQueryBuilder.queryName(queryName()).boost(boost());
+ return hasChildQueryBuilder;
}
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/HasParentQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/HasParentQueryBuilder.java
index 10ed269a2b..9a3637de3f 100644
--- a/core/src/main/java/org/elasticsearch/index/query/HasParentQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/HasParentQueryBuilder.java
@@ -257,13 +257,13 @@ public class HasParentQueryBuilder extends AbstractQueryBuilder<HasParentQueryBu
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryShardContext) throws IOException {
QueryBuilder rewrite = query.rewrite(queryShardContext);
if (rewrite != query) {
HasParentQueryBuilder hasParentQueryBuilder = new HasParentQueryBuilder(type, rewrite);
hasParentQueryBuilder.score = score;
hasParentQueryBuilder.innerHit = innerHit;
- return hasParentQueryBuilder.queryName(queryName()).boost(boost());
+ return hasParentQueryBuilder;
}
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java
index c366394976..019e18d134 100644
--- a/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java
@@ -142,11 +142,11 @@ public class IndicesQueryBuilder extends AbstractQueryBuilder<IndicesQueryBuilde
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryShardContext) throws IOException {
QueryBuilder<?> newInnnerQuery = innerQuery.rewrite(queryShardContext);
QueryBuilder<?> newNoMatchQuery = noMatchQuery.rewrite(queryShardContext);
if (newInnnerQuery != innerQuery || newNoMatchQuery != noMatchQuery) {
- return new IndicesQueryBuilder(innerQuery, indices).noMatchQuery(noMatchQuery).boost(boost()).queryName(queryName());
+ return new IndicesQueryBuilder(innerQuery, indices).noMatchQuery(noMatchQuery);
}
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java
index c08cf205e6..9f6c8b24c4 100644
--- a/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java
@@ -1052,7 +1052,7 @@ public class MoreLikeThisQueryBuilder extends AbstractQueryBuilder<MoreLikeThisQ
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
// TODO this needs heavy cleanups before we can rewrite it
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java
index 461ebdb52a..596c249921 100644
--- a/core/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java
@@ -226,10 +226,10 @@ public class NestedQueryBuilder extends AbstractQueryBuilder<NestedQueryBuilder>
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
- QueryBuilder rewrite = query.rewrite(queryShardContext);
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ QueryBuilder rewrite = query.rewrite(queryRewriteContext);
if (rewrite != query) {
- return new NestedQueryBuilder(path, rewrite).queryName(queryName()).boost(boost()).scoreMode(scoreMode);
+ return new NestedQueryBuilder(path, rewrite).scoreMode(scoreMode);
}
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java
index 3667905bac..f8010e7b52 100644
--- a/core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java
@@ -74,16 +74,16 @@ public interface QueryBuilder<QB extends QueryBuilder<QB>> extends NamedWriteabl
String getName();
/**
- * Rewrites this query builder into it's primitive form. By default this method return theb builder itself. If the builder
- * did not change the identity reference must be returend otherwise the builder will be rewritten infinitely.
+ * Rewrites this query builder into its primitive form. By default this method return the builder itself. If the builder
+ * did not change the identity reference must be returned otherwise the builder will be rewritten infinitely.
*/
default QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
return this;
}
/**
- * Rewrites the given query into it's primitive form. Queries that for instance fetch resources from remote hosts or
- * can simplify / optimize itself should do their heavy lifting duringt {@link #rewrite(QueryRewriteContext)}. This method
+ * 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
*/
diff --git a/core/src/main/java/org/elasticsearch/index/query/QueryRewriteContext.java b/core/src/main/java/org/elasticsearch/index/query/QueryRewriteContext.java
index 425673cb54..e057aff06b 100644
--- a/core/src/main/java/org/elasticsearch/index/query/QueryRewriteContext.java
+++ b/core/src/main/java/org/elasticsearch/index/query/QueryRewriteContext.java
@@ -24,6 +24,7 @@ import org.elasticsearch.indices.query.IndicesQueriesRegistry;
import org.elasticsearch.script.ScriptService;
/**
+ * Context object used to rewrite {@link QueryBuilder} instances into simplified version.
*/
public class QueryRewriteContext {
protected final ScriptService scriptService;
@@ -38,26 +39,34 @@ public class QueryRewriteContext {
this.parseContext = new QueryParseContext(indicesQueriesRegistry);
}
+ /**
+ * Returns a clients to fetch resources from local or remove nodes.
+ */
public final Client getClient() {
return scriptService.getClient();
}
+ /**
+ * Returns the index settings for this context. This might return null if the
+ * context has not index scope.
+ */
public final IndexSettings getIndexSettings() {
return indexSettings;
}
+ /**
+ * Returns a script service to fetch scripts.
+ */
public final ScriptService getScriptService() {
return scriptService;
}
+ /**
+ * Returns a new {@link QueryParseContext} to parse template or wrapped queries.
+ */
public QueryParseContext newParseContext() {
QueryParseContext queryParseContext = new QueryParseContext(indicesQueriesRegistry);
queryParseContext.parseFieldMatcher(parseContext.parseFieldMatcher());
return queryParseContext;
}
-
- public boolean hasIndex() {
- return indexSettings != null;
- }
-
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/QueryShardContext.java b/core/src/main/java/org/elasticsearch/index/query/QueryShardContext.java
index 09978122dc..83066fba7b 100644
--- a/core/src/main/java/org/elasticsearch/index/query/QueryShardContext.java
+++ b/core/src/main/java/org/elasticsearch/index/query/QueryShardContext.java
@@ -191,10 +191,6 @@ public class QueryShardContext extends QueryRewriteContext {
return unmodifiableMap(new HashMap<>(namedQueries));
}
- public void combineNamedQueries(QueryShardContext context) {
- namedQueries.putAll(context.namedQueries);
- }
-
/**
* Return whether we are currently parsing a filter or a query.
*/
diff --git a/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java
index 31484fe804..353dbd668a 100644
--- a/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java
@@ -25,7 +25,6 @@ import org.apache.lucene.search.Query;
import org.apache.lucene.search.RandomAccessWeight;
import org.apache.lucene.search.Weight;
import org.apache.lucene.util.Bits;
-import org.elasticsearch.client.Client;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -33,7 +32,6 @@ import org.elasticsearch.script.LeafSearchScript;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.Script.ScriptField;
import org.elasticsearch.script.ScriptContext;
-import org.elasticsearch.script.ScriptEngineService;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.script.SearchScript;
import org.elasticsearch.search.lookup.SearchLookup;
diff --git a/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
index 4067f6d87c..4b3e81ebf1 100644
--- a/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
@@ -127,7 +127,7 @@ public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuil
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
ExecutableScript executable = queryRewriteContext.getScriptService().executable(template,
ScriptContext.Standard.SEARCH, Collections.emptyMap());
BytesReference querySource = (BytesReference) executable.run();
@@ -135,11 +135,10 @@ public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuil
try (XContentParser qSourceParser = XContentFactory.xContent(querySource).createParser(querySource)) {
queryParseContext.reset(qSourceParser);
final QueryBuilder<?> queryBuilder = queryParseContext.parseInnerQueryBuilder();
- if (queryBuilder.boost() == DEFAULT_BOOST) {
- queryBuilder.boost(boost()); // only pass down the boost if it has it's own boost
- }
- if (queryName() != null) {
- queryBuilder.queryName(queryName());
+ if (boost() != DEFAULT_BOOST || queryName() != null) {
+ final BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
+ boolQueryBuilder.must(queryBuilder);
+ return boolQueryBuilder;
}
return queryBuilder;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/TermsQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/TermsQueryBuilder.java
index 570fc76dab..e75d982ebe 100644
--- a/core/src/main/java/org/elasticsearch/index/query/TermsQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/TermsQueryBuilder.java
@@ -316,18 +316,18 @@ public class TermsQueryBuilder extends AbstractQueryBuilder<TermsQueryBuilder> {
}
@Override
- public QueryBuilder<TermsQueryBuilder> rewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
if (this.termsLookup != null) {
TermsLookup termsLookup = new TermsLookup(this.termsLookup);
if (termsLookup.index() == null) { // TODO this should go away?
- if (queryRewriteContext.hasIndex()) {
+ if (queryRewriteContext.getIndexSettings() != null) {
termsLookup.index(queryRewriteContext.getIndexSettings().getIndex().getName());
} else {
return this; // can't rewrite until we have index scope on the shard
}
}
List<Object> values = fetch(termsLookup, queryRewriteContext.getClient());
- return new TermsQueryBuilder(this.fieldName, values).boost(boost()).queryName(queryName());
+ return new TermsQueryBuilder(this.fieldName, values);
}
return this;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java
index 6ba07f766e..6c7ac0e908 100644
--- a/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java
@@ -105,7 +105,7 @@ public class WrapperQueryBuilder extends AbstractQueryBuilder<WrapperQueryBuilde
@Override
protected Query doToQuery(QueryShardContext context) throws IOException {
- throw new UnsupportedOperationException("this query must be rewritten first");
+ throw new UnsupportedOperationException("this query must be rewritten first");
}
@Override
@@ -129,17 +129,16 @@ public class WrapperQueryBuilder extends AbstractQueryBuilder<WrapperQueryBuilde
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext context) throws IOException {
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext context) throws IOException {
try (XContentParser qSourceParser = XContentFactory.xContent(source).createParser(source)) {
QueryParseContext parseContext = context.newParseContext();
parseContext.reset(qSourceParser);
final QueryBuilder<?> queryBuilder = parseContext.parseInnerQueryBuilder();
- if (queryBuilder.boost() == DEFAULT_BOOST) {
- queryBuilder.boost(boost());
- }
- if (queryName() != null) { // we inherit the name
- queryBuilder.queryName(queryName());
+ if (boost() != DEFAULT_BOOST || queryName() != null) {
+ final BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
+ boolQueryBuilder.must(queryBuilder);
+ return boolQueryBuilder;
}
return queryBuilder;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/functionscore/FunctionScoreQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/functionscore/FunctionScoreQueryBuilder.java
index 14a2826084..60959a9789 100644
--- a/core/src/main/java/org/elasticsearch/index/query/functionscore/FunctionScoreQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/functionscore/FunctionScoreQueryBuilder.java
@@ -394,17 +394,32 @@ public class FunctionScoreQueryBuilder extends AbstractQueryBuilder<FunctionScor
public FilterFunctionBuilder readFrom(StreamInput in) throws IOException {
return new FilterFunctionBuilder(in.readQuery(), in.readScoreFunction());
}
+
+ public FilterFunctionBuilder rewrite(QueryRewriteContext context) throws IOException {
+ QueryBuilder<?> rewrite = filter.rewrite(context);
+ if (rewrite != filter) {
+ return new FilterFunctionBuilder(rewrite, scoreFunction);
+ }
+ return this;
+ }
}
@Override
- public QueryBuilder<?> rewrite(QueryRewriteContext queryShardContext) throws IOException {
- QueryBuilder<?> queryBuilder = this.query.rewrite(queryShardContext);
- if (queryBuilder != query) {
- FunctionScoreQueryBuilder newQueryBuilder = new FunctionScoreQueryBuilder(queryBuilder, filterFunctionBuilders);
+ protected QueryBuilder<?> doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ QueryBuilder<?> queryBuilder = this.query.rewrite(queryRewriteContext);
+ FilterFunctionBuilder[] rewrittenBuilders = new FilterFunctionBuilder[this.filterFunctionBuilders.length];
+ boolean rewritten = false;
+ for (int i = 0; i < rewrittenBuilders.length; i++) {
+ FilterFunctionBuilder rewrite = filterFunctionBuilders[i].rewrite(queryRewriteContext);
+ rewritten |= rewrite != filterFunctionBuilders[i];
+ rewrittenBuilders[i] = rewrite;
+ }
+ if (queryBuilder != query || rewritten) {
+ FunctionScoreQueryBuilder newQueryBuilder = new FunctionScoreQueryBuilder(queryBuilder, rewrittenBuilders);
newQueryBuilder.scoreMode = scoreMode;
newQueryBuilder.minScore = minScore;
newQueryBuilder.maxBoost = maxBoost;
- return newQueryBuilder.queryName(queryName()).boost(boost());
+ return newQueryBuilder;
}
return this;
}