summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/migration/migrate_6_0/search.asciidoc2
-rw-r--r--docs/reference/query-dsl/special-queries.asciidoc8
-rw-r--r--docs/reference/query-dsl/template-query.asciidoc127
-rw-r--r--docs/reference/search/suggesters/phrase-suggest.asciidoc4
-rw-r--r--modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java7
-rw-r--r--modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java151
-rw-r--r--modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/SearchTemplateIT.java10
-rw-r--r--modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java229
-rw-r--r--modules/lang-mustache/src/test/resources/rest-api-spec/test/lang_mustache/40_template_query.yaml96
9 files changed, 4 insertions, 630 deletions
diff --git a/docs/reference/migration/migrate_6_0/search.asciidoc b/docs/reference/migration/migrate_6_0/search.asciidoc
index 80d67eae72..82c2ba8f71 100644
--- a/docs/reference/migration/migrate_6_0/search.asciidoc
+++ b/docs/reference/migration/migrate_6_0/search.asciidoc
@@ -51,6 +51,8 @@
* The `disable_coord` parameter of the `bool` and `common_terms` queries has
been removed. If provided, it will be ignored and issue a deprecation warning.
+* The `template` query has been removed. This query was deprecated since 5.0
+
==== Search shards API
The search shards API no longer accepts the `type` url parameter, which didn't
diff --git a/docs/reference/query-dsl/special-queries.asciidoc b/docs/reference/query-dsl/special-queries.asciidoc
index b705f01c6f..3e3c140d6f 100644
--- a/docs/reference/query-dsl/special-queries.asciidoc
+++ b/docs/reference/query-dsl/special-queries.asciidoc
@@ -9,12 +9,6 @@ This group contains queries which do not fit into the other groups:
This query finds documents which are similar to the specified text, document,
or collection of documents.
-<<query-dsl-template-query,`template` query>>::
-
-The `template` query accepts a Mustache template (either inline, indexed, or
-from a file), and a map of parameters, and combines the two to generate the
-final query to execute.
-
<<query-dsl-script-query,`script` query>>::
This query allows a script to act as a filter. Also see the
@@ -27,8 +21,6 @@ the specified document.
include::mlt-query.asciidoc[]
-include::template-query.asciidoc[]
-
include::script-query.asciidoc[]
include::percolate-query.asciidoc[]
diff --git a/docs/reference/query-dsl/template-query.asciidoc b/docs/reference/query-dsl/template-query.asciidoc
deleted file mode 100644
index 2d3b5724d4..0000000000
--- a/docs/reference/query-dsl/template-query.asciidoc
+++ /dev/null
@@ -1,127 +0,0 @@
-[[query-dsl-template-query]]
-=== Template Query
-
-deprecated[5.0.0, Use the <<search-template>> API]
-
-A query that accepts a query template and a map of key/value pairs to fill in
-template parameters. Templating is based on Mustache. For simple token substitution all you provide
-is a query containing some variable that you want to substitute and the actual
-values:
-
-[source,js]
-------------------------------------------
-GET /_search
-{
- "query": {
- "template": {
- "inline": { "match": { "text": "{{query_string}}" }},
- "params" : {
- "query_string" : "all about search"
- }
- }
- }
-}
-------------------------------------------
-// CONSOLE
-// TEST[warning:[template] query is deprecated, use search template api instead]
-
-The above request is translated into:
-
-[source,js]
-------------------------------------------
-GET /_search
-{
- "query": {
- "match": {
- "text": "all about search"
- }
- }
-}
-------------------------------------------
-// CONSOLE
-
-Alternatively passing the template as an escaped string works as well:
-
-[source,js]
-------------------------------------------
-GET /_search
-{
- "query": {
- "template": {
- "inline": "{ \"match\": { \"text\": \"{{query_string}}\" }}", <1>
- "params" : {
- "query_string" : "all about search"
- }
- }
- }
-}
-------------------------------------------
-// CONSOLE
-// TEST[warning:[template] query is deprecated, use search template api instead]
-
-<1> New line characters (`\n`) should be escaped as `\\n` or removed,
- and quotes (`"`) should be escaped as `\\"`.
-
-==== Stored templates
-
-You can register a template by storing it in the `config/scripts` directory, in a file using the `.mustache` extension.
-In order to execute the stored template, reference it by name in the `file`
-parameter:
-
-
-[source,js]
-------------------------------------------
-GET /_search
-{
- "query": {
- "template": {
- "file": "my_template", <1>
- "params" : {
- "query_string" : "all about search"
- }
- }
- }
-}
-------------------------------------------
-// CONSOLE
-// TEST[warning:[template] query is deprecated, use search template api instead]
-
-<1> Name of the query template in `config/scripts/`, i.e., `my_template.mustache`.
-
-Alternatively, you can register a query template in the cluster state with:
-
-[source,js]
-------------------------------------------
-PUT /_search/template/my_template
-{
- "template": { "match": { "text": "{{query_string}}" }}
-}
-------------------------------------------
-// CONSOLE
-
-and refer to it in the `template` query with the `id` parameter:
-
-
-[source,js]
-------------------------------------------
-GET /_search
-{
- "query": {
- "template": {
- "stored": "my_template", <1>
- "params" : {
- "query_string" : "all about search"
- }
- }
- }
-}
-------------------------------------------
-// CONSOLE
-// TEST[continued]
-// TEST[warning:[template] query is deprecated, use search template api instead]
-
-<1> Name of the query template in `config/scripts/`, i.e., `my_template.mustache`.
-
-
-There is also a dedicated `template` endpoint, allows you to template an entire search request.
-Please see <<search-template>> for more details.
diff --git a/docs/reference/search/suggesters/phrase-suggest.asciidoc b/docs/reference/search/suggesters/phrase-suggest.asciidoc
index f4d4f46e3a..53c0c9be4e 100644
--- a/docs/reference/search/suggesters/phrase-suggest.asciidoc
+++ b/docs/reference/search/suggesters/phrase-suggest.asciidoc
@@ -213,8 +213,8 @@ The response contains suggestions scored by the most likely spell correction fir
Checks each suggestion against the specified `query` to prune suggestions
for which no matching docs exist in the index. The collate query for a
suggestion is run only on the local shard from which the suggestion has
- been generated from. The `query` must be specified, and it is run as
- a <<query-dsl-template-query,`template` query>>.
+ been generated from. The `query` must be specified and it can be templated,
+ see <<search-template,search templates>> for more information.
The current suggestion is automatically made available as the `{{suggestion}}`
variable, which should be used in your query. You can still specify
your own template `params` -- the `suggestion` value will be added to the
diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java
index 7b5c97aa9a..105fa3f6f8 100644
--- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java
+++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java
@@ -39,8 +39,6 @@ import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;
-import static java.util.Collections.singletonList;
-
public class MustachePlugin extends Plugin implements ScriptPlugin, ActionPlugin, SearchPlugin {
@Override
@@ -55,11 +53,6 @@ public class MustachePlugin extends Plugin implements ScriptPlugin, ActionPlugin
}
@Override
- public List<QuerySpec<?>> getQueries() {
- return singletonList(new QuerySpec<>(TemplateQueryBuilder.NAME, TemplateQueryBuilder::new, TemplateQueryBuilder::fromXContent));
- }
-
- @Override
public List<RestHandler> getRestHandlers(Settings settings, RestController restController, ClusterSettings clusterSettings,
IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver,
Supplier<DiscoveryNodes> nodesInCluster) {
diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java
deleted file mode 100644
index 66a5c09977..0000000000
--- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.script.mustache;
-
-import org.apache.lucene.search.Query;
-import org.elasticsearch.common.bytes.BytesReference;
-import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.common.io.stream.StreamOutput;
-import org.elasticsearch.common.logging.DeprecationLogger;
-import org.elasticsearch.common.logging.Loggers;
-import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.common.xcontent.XContentFactory;
-import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.common.xcontent.XContentType;
-import org.elasticsearch.index.query.AbstractQueryBuilder;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.QueryParseContext;
-import org.elasticsearch.index.query.QueryRewriteContext;
-import org.elasticsearch.index.query.QueryShardContext;
-import org.elasticsearch.script.Script;
-import org.elasticsearch.script.ScriptType;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Facilitates creating template query requests.
- * */
-@Deprecated
-// TODO remove this class in 6.0
-public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuilder> {
-
- public static final String NAME = "template";
- private static final DeprecationLogger DEPRECATION_LOGGER = new DeprecationLogger(Loggers.getLogger(TemplateQueryBuilder.class));
-
- /** Template to fill. */
- private final Script template;
-
- public TemplateQueryBuilder(String template, ScriptType scriptType, Map<String, Object> params) {
- this(new Script(scriptType, "mustache", template, params));
- }
-
- public TemplateQueryBuilder(String template, ScriptType scriptType, Map<String, Object> params, XContentType ct) {
- this(new Script(scriptType, "mustache", template, scriptType == ScriptType.INLINE ?
- (ct == null ? Collections.emptyMap() : Collections.singletonMap(Script.CONTENT_TYPE_OPTION, ct.mediaType()))
- : null, params));
- }
-
- TemplateQueryBuilder(Script template) {
- DEPRECATION_LOGGER.deprecated("[{}] query is deprecated, use search template api instead", NAME);
- if (template == null) {
- throw new IllegalArgumentException("query template cannot be null");
- }
- this.template = template;
- }
-
- public Script template() {
- return template;
- }
-
- /**
- * Read from a stream.
- */
- public TemplateQueryBuilder(StreamInput in) throws IOException {
- super(in);
- template = new Script(in);
- }
-
- @Override
- protected void doWriteTo(StreamOutput out) throws IOException {
- template.writeTo(out);
- }
-
- @Override
- protected void doXContent(XContentBuilder builder, Params builderParams) throws IOException {
- builder.field(TemplateQueryBuilder.NAME);
- template.toXContent(builder, builderParams);
- }
-
- @Override
- public String getWriteableName() {
- return NAME;
- }
-
- @Override
- protected Query doToQuery(QueryShardContext context) throws IOException {
- throw new UnsupportedOperationException("this query must be rewritten first");
- }
-
- @Override
- protected int doHashCode() {
- return Objects.hash(template);
- }
-
- @Override
- protected boolean doEquals(TemplateQueryBuilder other) {
- return Objects.equals(template, other.template);
- }
-
- @Override
- protected QueryBuilder doRewrite(QueryRewriteContext queryRewriteContext) throws IOException {
- BytesReference querySource = queryRewriteContext.getTemplateBytes(template);
- try (XContentParser qSourceParser = XContentFactory.xContent(querySource).createParser(queryRewriteContext.getXContentRegistry(),
- querySource)) {
- final QueryParseContext queryParseContext = queryRewriteContext.newParseContext(qSourceParser);
- final QueryBuilder queryBuilder = queryParseContext.parseInnerQueryBuilder();
- if (boost() != DEFAULT_BOOST || queryName() != null) {
- final BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
- boolQueryBuilder.must(queryBuilder);
- return boolQueryBuilder;
- }
- return queryBuilder;
- }
- }
-
- /**
- * In the simplest case, parse template string and variables from the request,
- * compile the template and execute the template against the given variables.
- */
- public static TemplateQueryBuilder fromXContent(QueryParseContext parseContext) throws IOException {
- XContentParser parser = parseContext.parser();
- Script template = Script.parse(parser, Script.DEFAULT_TEMPLATE_LANG);
-
- // for deprecation of stored script namespaces the default lang is ignored,
- // so the template lang must be set for a stored script
- if (template.getType() == ScriptType.STORED) {
- template = new Script(ScriptType.STORED, Script.DEFAULT_TEMPLATE_LANG, template.getIdOrCode(), template.getParams());
- }
-
- return new TemplateQueryBuilder(template);
- }
-}
diff --git a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/SearchTemplateIT.java b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/SearchTemplateIT.java
index b79257ebe2..4ac9263706 100644
--- a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/SearchTemplateIT.java
+++ b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/SearchTemplateIT.java
@@ -21,7 +21,6 @@ package org.elasticsearch.script.mustache;
import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.ParsingException;
import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.xcontent.XContentType;
@@ -289,15 +288,6 @@ public class SearchTemplateIT extends ESSingleNodeTestCase {
assertHitCount(searchResponse.getResponse(), 1);
assertWarnings("use of </lang/id> [/mustache/2] for looking up" +
" stored scripts/templates has been deprecated, use only <id> [2] instead");
-
- Map<String, Object> vars = new HashMap<>();
- vars.put("fieldParam", "bar");
-
- TemplateQueryBuilder builder = new TemplateQueryBuilder("3", ScriptType.STORED, vars);
- SearchResponse sr = client().prepareSearch().setQuery(builder)
- .execute().actionGet();
- assertHitCount(sr, 1);
- assertWarnings("[template] query is deprecated, use search template api instead");
}
// Relates to #10397
diff --git a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java
deleted file mode 100644
index 3b70c5df62..0000000000
--- a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * 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.script.mustache;
-
-import org.apache.lucene.index.memory.MemoryIndex;
-import org.apache.lucene.search.MatchAllDocsQuery;
-import org.apache.lucene.search.Query;
-import org.elasticsearch.common.bytes.BytesArray;
-import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.common.xcontent.XContentFactory;
-import org.elasticsearch.common.xcontent.XContentType;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.MatchAllQueryBuilder;
-import org.elasticsearch.index.query.MatchQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.QueryShardContext;
-import org.elasticsearch.index.query.TermQueryBuilder;
-import org.elasticsearch.plugins.Plugin;
-import org.elasticsearch.script.MockScriptPlugin;
-import org.elasticsearch.script.Script;
-import org.elasticsearch.script.ScriptType;
-import org.elasticsearch.search.internal.SearchContext;
-import org.elasticsearch.test.AbstractQueryTestCase;
-import org.junit.After;
-import org.junit.Before;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Function;
-
-import static org.hamcrest.Matchers.containsString;
-
-public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQueryBuilder> {
-
- /**
- * The query type all template tests will be based on.
- */
- private QueryBuilder templateBase;
-
- /**
- * All tests in this class cause deprecation warnings when a new {@link TemplateQueryBuilder} is created.
- * Instead of having to check them in every single test, we do it after each test is run
- */
- @After
- public void checkWarning() {
- assertWarnings("[template] query is deprecated, use search template api instead");
- }
-
- @Override
- protected Collection<Class<? extends Plugin>> getPlugins() {
- return Arrays.asList(MustachePlugin.class, CustomScriptPlugin.class);
- }
-
- public static class CustomScriptPlugin extends MockScriptPlugin {
-
- @Override
- @SuppressWarnings("unchecked")
- protected Map<String, Function<Map<String, Object>, Object>> pluginScripts() {
- Map<String, Function<Map<String, Object>, Object>> scripts = new HashMap<>();
-
- scripts.put("{ \"match_all\" : {}}",
- s -> new BytesArray("{ \"match_all\" : {}}"));
-
- scripts.put("{ \"match_all\" : {\"_name\" : \"foobar\"}}",
- s -> new BytesArray("{ \"match_all\" : {\"_name\" : \"foobar\"}}"));
-
- scripts.put("{\n" +
- " \"term\" : {\n" +
- " \"foo\" : {\n" +
- " \"value\" : \"bar\",\n" +
- " \"boost\" : 2.0\n" +
- " }\n" +
- " }\n" +
- "}", s -> new BytesArray("{\n" +
- " \"term\" : {\n" +
- " \"foo\" : {\n" +
- " \"value\" : \"bar\",\n" +
- " \"boost\" : 2.0\n" +
- " }\n" +
- " }\n" +
- "}"));
- return scripts;
- }
- }
-
- @Before
- public void setup() {
- templateBase = new MatchQueryBuilder("field", "some values");
- }
-
- @Override
- protected boolean supportsBoostAndQueryName() {
- return false;
- }
-
- @Override
- protected TemplateQueryBuilder doCreateTestQueryBuilder() {
- return new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mustache", templateBase.toString(), Collections.emptyMap()));
- }
-
- @Override
- protected void doAssertLuceneQuery(TemplateQueryBuilder queryBuilder, Query query, SearchContext context) throws IOException {
- QueryShardContext queryShardContext = context.getQueryShardContext();
- assertEquals(rewrite(QueryBuilder.rewriteQuery(templateBase, queryShardContext).toQuery(queryShardContext)), rewrite(query));
- }
-
- public void testIllegalArgument() {
- expectThrows(IllegalArgumentException.class, () -> new TemplateQueryBuilder((Script) null));
- }
-
- /**
- * Override superclass test since template query doesn't support boost and queryName, so
- * we need to mutate other existing field in the test query.
- */
- @Override
- public void testUnknownField() throws IOException {
- TemplateQueryBuilder testQuery = createTestQueryBuilder();
- XContentType xContentType = randomFrom(XContentType.JSON, XContentType.YAML);
- String testQueryAsString = toXContent(testQuery, xContentType).string();
- String queryAsString = testQueryAsString.replace("inline", "bogusField");
- try {
- parseQuery(createParser(xContentType.xContent(), queryAsString));
- fail("IllegalArgumentException expected");
- } catch (IllegalArgumentException e) {
- assertThat(e.getMessage(), containsString("[script] unknown field [bogusField], parser not found"));
- }
- }
-
- public void testJSONGeneration() throws IOException {
- Map<String, Object> vars = new HashMap<>();
- vars.put("template", "filled");
- TemplateQueryBuilder builder = new TemplateQueryBuilder("I am a $template string", ScriptType.INLINE, vars);
- XContentBuilder content = XContentFactory.jsonBuilder();
- content.startObject();
- builder.doXContent(content, null);
- content.endObject();
- content.close();
- assertEquals("{\"template\":{\"inline\":\"I am a $template string\",\"lang\":\"mustache\",\"params\":{\"template\":\"filled\"}}}",
- content.string());
- }
-
- public void testRawEscapedTemplate() throws IOException {
- String expectedTemplateString = "{\"match_{{template}}\": {}}\"";
- String query = "{\"template\": {\"inline\": \"{\\\"match_{{template}}\\\": {}}\\\"\",\"params\" : {\"template\" : \"all\"}}}";
- Map<String, Object> params = new HashMap<>();
- params.put("template", "all");
- QueryBuilder expectedBuilder = new TemplateQueryBuilder(expectedTemplateString, ScriptType.INLINE, params);
- assertParsedQuery(query, expectedBuilder);
- }
-
- public void testRawTemplate() throws IOException {
- String expectedTemplateString = "{\"match_{{template}}\":{}}";
- String query = "{\"template\": {\"inline\": {\"match_{{template}}\": {}},\"params\" : {\"template\" : \"all\"}}}";
- Map<String, Object> params = new HashMap<>();
- params.put("template", "all");
- QueryBuilder expectedBuilder = new TemplateQueryBuilder(expectedTemplateString, ScriptType.INLINE, params, XContentType.JSON);
- assertParsedQuery(query, expectedBuilder);
- }
-
- @Override
- public void testMustRewrite() throws IOException {
- String query = "{ \"match_all\" : {}}";
- QueryBuilder builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query,
- Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap()));
- try {
- builder.toQuery(createShardContext());
- fail();
- } catch (UnsupportedOperationException ex) {
- assertEquals("this query must be rewritten first", ex.getMessage());
- }
- assertEquals(new MatchAllQueryBuilder(), builder.rewrite(createShardContext()));
- }
-
- public void testRewriteWithInnerName() throws IOException {
- final String query = "{ \"match_all\" : {\"_name\" : \"foobar\"}}";
- QueryBuilder builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query,
- Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap()));
- assertEquals(new MatchAllQueryBuilder().queryName("foobar"), builder.rewrite(createShardContext()));
-
- builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query, Collections.singletonMap(
- Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap())).queryName("outer");
- assertEquals(new BoolQueryBuilder().must(new MatchAllQueryBuilder().queryName("foobar")).queryName("outer"),
- builder.rewrite(createShardContext()));
- }
-
- public void testRewriteWithInnerBoost() throws IOException {
- final TermQueryBuilder query = new TermQueryBuilder("foo", "bar").boost(2);
- QueryBuilder builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query.toString(),
- Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap()));
- assertEquals(query, builder.rewrite(createShardContext()));
-
- builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query.toString(),
- Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap())).boost(3);
- assertEquals(new BoolQueryBuilder().must(query).boost(3), builder.rewrite(createShardContext()));
- }
-
- @Override
- protected Query rewrite(Query query) throws IOException {
- // TemplateQueryBuilder adds some optimization if the template and query builder have boosts / query names that wraps
- // the actual QueryBuilder that comes from the template into a BooleanQueryBuilder to give it an outer boost / name
- // this causes some queries to be not exactly equal but equivalent such that we need to rewrite them before comparing.
- if (query != null) {
- MemoryIndex idx = new MemoryIndex();
- return idx.createSearcher().rewrite(query);
- }
- return new MatchAllDocsQuery(); // null == *:*
- }
-}
diff --git a/modules/lang-mustache/src/test/resources/rest-api-spec/test/lang_mustache/40_template_query.yaml b/modules/lang-mustache/src/test/resources/rest-api-spec/test/lang_mustache/40_template_query.yaml
deleted file mode 100644
index a21184650f..0000000000
--- a/modules/lang-mustache/src/test/resources/rest-api-spec/test/lang_mustache/40_template_query.yaml
+++ /dev/null
@@ -1,96 +0,0 @@
----
-"Template query":
- - skip:
- features: warnings
-
- - do:
- index:
- index: test
- type: testtype
- id: 1
- body: { "text": "value1" }
- - do:
- index:
- index: test
- type: testtype
- id: 2
- body: { "text": "value2 value3" }
- - do:
- indices.refresh: {}
-
- - do:
- put_template:
- id: "1"
- body: { "template": { "match": { "text": "{{my_value}}" } } }
- - match: { acknowledged: true }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "inline": { "term": { "text": { "value": "{{template}}" } } }, "params": { "template": "value1" } } } }
-
- - match: { hits.total: 1 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "file": "file_query_template", "params": { "my_value": "value1" } } } }
-
- - match: { hits.total: 1 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "stored": "1", "params": { "my_value": "value1" } } } }
-
- - match: { hits.total: 1 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "stored": "1", "params": { "my_value": "value1" } } } }
-
- - match: { hits.total: 1 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "inline": {"match_{{template}}": {}}, "params" : { "template" : "all" } } } }
-
- - match: { hits.total: 2 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "inline": "{ \"term\": { \"text\": { \"value\": \"{{template}}\" } } }", "params": { "template": "value1" } } } }
-
- - match: { hits.total: 1 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "inline": "{\"match_{{template}}\": {}}", "params" : { "template" : "all" } } } }
-
- - match: { hits.total: 2 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "inline": "{\"match_all\": {}}", "params" : {} } } }
-
- - match: { hits.total: 2 }
-
- - do:
- warnings:
- - '[template] query is deprecated, use search template api instead'
- search:
- body: { "query": { "template": { "inline": "{\"query_string\": { \"query\" : \"{{query}}\" }}", "params" : { "query" : "text:\"value2 value3\"" } } } }
- - match: { hits.total: 1 }