summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java')
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java32
1 files changed, 23 insertions, 9 deletions
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 02a9bc42e3..4067f6d87c 100644
--- a/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
@@ -25,11 +25,13 @@ import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentParser;
+import org.elasticsearch.script.ExecutableScript;
+import org.elasticsearch.script.ScriptContext;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.script.Template;
-import org.elasticsearch.search.internal.SearchContext;
import java.io.IOException;
+import java.util.Collections;
import java.util.Map;
import java.util.Objects;
@@ -100,14 +102,7 @@ public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuil
@Override
protected Query doToQuery(QueryShardContext context) throws IOException {
- BytesReference querySource = context.executeQueryTemplate(template);
- try (XContentParser qSourceParser = XContentFactory.xContent(querySource).createParser(querySource)) {
- final QueryShardContext contextCopy = new QueryShardContext(context);
- contextCopy.reset(qSourceParser);
- QueryBuilder result = contextCopy.parseContext().parseInnerQueryBuilder();
- context.combineNamedQueries(contextCopy);
- return result.toQuery(context);
- }
+ throw new UnsupportedOperationException("this query must be rewritten first");
}
@Override
@@ -130,4 +125,23 @@ public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuil
protected boolean doEquals(TemplateQueryBuilder other) {
return Objects.equals(template, other.template);
}
+
+ @Override
+ public QueryBuilder<?> rewrite(QueryRewriteContext queryRewriteContext) throws IOException {
+ ExecutableScript executable = queryRewriteContext.getScriptService().executable(template,
+ ScriptContext.Standard.SEARCH, Collections.emptyMap());
+ BytesReference querySource = (BytesReference) executable.run();
+ final QueryParseContext queryParseContext = queryRewriteContext.newParseContext();
+ 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());
+ }
+ return queryBuilder;
+ }
+ }
}