Scripting: Remove search template actions (#25717)
The dedicated search template put/get/delete actions are deprecated in 5.6. This commit removes them from 6.0.
This commit is contained in:
parent
2c38e93e96
commit
072402463b
|
@ -52,6 +52,7 @@ buildRestTests.expectedUnconvertedCandidates = [
|
||||||
'reference/indices/segments.asciidoc',
|
'reference/indices/segments.asciidoc',
|
||||||
'reference/indices/shard-stores.asciidoc',
|
'reference/indices/shard-stores.asciidoc',
|
||||||
'reference/mapping/removal_of_types.asciidoc',
|
'reference/mapping/removal_of_types.asciidoc',
|
||||||
|
'reference/migration/migrate_6_0/scripting.asciidoc',
|
||||||
'reference/search/profile.asciidoc',
|
'reference/search/profile.asciidoc',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -34,3 +34,41 @@ script otherwise an error will occur. Note that a request using a stored script
|
||||||
different from a request that puts a stored script. The language of the script has
|
different from a request that puts a stored script. The language of the script has
|
||||||
already been stored as part of the cluster state and an `id` is sufficient to access
|
already been stored as part of the cluster state and an `id` is sufficient to access
|
||||||
all of the information necessary to execute a stored script.
|
all of the information necessary to execute a stored script.
|
||||||
|
|
||||||
|
==== Stored search template apis removed
|
||||||
|
|
||||||
|
The PUT, GET and DELETE `_search/template` apis have been removed. Store search templates with the stored scripts apis instead.
|
||||||
|
|
||||||
|
For example, previously one might have stored a search template with the following:
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
PUT /_search/template/my_template
|
||||||
|
{
|
||||||
|
"query": {
|
||||||
|
"match": {
|
||||||
|
"f1": "{{f1}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
And instead one would now use the following:
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
PUT /_scripts/my_template
|
||||||
|
{
|
||||||
|
"script": {
|
||||||
|
"lang": "mustache",
|
||||||
|
"source": {
|
||||||
|
"query": {
|
||||||
|
"match": {
|
||||||
|
"f1": "{{f1}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -61,9 +61,6 @@ public class MustachePlugin extends Plugin implements ScriptPlugin, ActionPlugin
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
new RestSearchTemplateAction(settings, restController),
|
new RestSearchTemplateAction(settings, restController),
|
||||||
new RestMultiSearchTemplateAction(settings, restController),
|
new RestMultiSearchTemplateAction(settings, restController),
|
||||||
new RestGetSearchTemplateAction(settings, restController),
|
|
||||||
new RestPutSearchTemplateAction(settings, restController),
|
|
||||||
new RestDeleteSearchTemplateAction(settings, restController),
|
|
||||||
new RestRenderSearchTemplateAction(settings, restController));
|
new RestRenderSearchTemplateAction(settings, restController));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,59 +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.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequest;
|
|
||||||
import org.elasticsearch.client.node.NodeClient;
|
|
||||||
import org.elasticsearch.common.logging.DeprecationLogger;
|
|
||||||
import org.elasticsearch.common.logging.Loggers;
|
|
||||||
import org.elasticsearch.common.settings.Settings;
|
|
||||||
import org.elasticsearch.rest.BaseRestHandler;
|
|
||||||
import org.elasticsearch.rest.RestController;
|
|
||||||
import org.elasticsearch.rest.RestRequest;
|
|
||||||
import org.elasticsearch.rest.action.AcknowledgedRestListener;
|
|
||||||
import org.elasticsearch.script.Script;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.DELETE;
|
|
||||||
|
|
||||||
public class RestDeleteSearchTemplateAction extends BaseRestHandler {
|
|
||||||
private static final DeprecationLogger DEPRECATION_LOGGER =
|
|
||||||
new DeprecationLogger(Loggers.getLogger(RestDeleteSearchTemplateAction.class));
|
|
||||||
|
|
||||||
public RestDeleteSearchTemplateAction(Settings settings, RestController controller) {
|
|
||||||
super(settings);
|
|
||||||
|
|
||||||
controller.registerAsDeprecatedHandler(DELETE, "/_search/template/{id}", this,
|
|
||||||
"The stored search template API is deprecated. Use stored scripts instead.", DEPRECATION_LOGGER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return "delete_search_template_action";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
|
|
||||||
String id = request.param("id");
|
|
||||||
|
|
||||||
DeleteStoredScriptRequest deleteStoredScriptRequest = new DeleteStoredScriptRequest(id, Script.DEFAULT_TEMPLATE_LANG);
|
|
||||||
return channel -> client.admin().cluster().deleteStoredScript(deleteStoredScriptRequest, new AcknowledgedRestListener<>(channel));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,91 +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.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequest;
|
|
||||||
import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptResponse;
|
|
||||||
import org.elasticsearch.client.node.NodeClient;
|
|
||||||
import org.elasticsearch.common.ParseField;
|
|
||||||
import org.elasticsearch.common.logging.DeprecationLogger;
|
|
||||||
import org.elasticsearch.common.logging.Loggers;
|
|
||||||
import org.elasticsearch.common.settings.Settings;
|
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
|
||||||
import org.elasticsearch.rest.BaseRestHandler;
|
|
||||||
import org.elasticsearch.rest.BytesRestResponse;
|
|
||||||
import org.elasticsearch.rest.RestController;
|
|
||||||
import org.elasticsearch.rest.RestRequest;
|
|
||||||
import org.elasticsearch.rest.RestResponse;
|
|
||||||
import org.elasticsearch.rest.RestStatus;
|
|
||||||
import org.elasticsearch.rest.action.RestBuilderListener;
|
|
||||||
import org.elasticsearch.script.Script;
|
|
||||||
import org.elasticsearch.script.StoredScriptSource;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.GET;
|
|
||||||
|
|
||||||
public class RestGetSearchTemplateAction extends BaseRestHandler {
|
|
||||||
private static final DeprecationLogger DEPRECATION_LOGGER =
|
|
||||||
new DeprecationLogger(Loggers.getLogger(RestGetSearchTemplateAction.class));
|
|
||||||
|
|
||||||
public static final ParseField _ID_PARSE_FIELD = new ParseField("_id");
|
|
||||||
|
|
||||||
public static final ParseField FOUND_PARSE_FIELD = new ParseField("found");
|
|
||||||
|
|
||||||
public RestGetSearchTemplateAction(Settings settings, RestController controller) {
|
|
||||||
super(settings);
|
|
||||||
|
|
||||||
controller.registerAsDeprecatedHandler(GET, "/_search/template/{id}", this,
|
|
||||||
"The stored search template API is deprecated. Use stored scripts instead.", DEPRECATION_LOGGER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return "get_search_template_action";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RestChannelConsumer prepareRequest(final RestRequest request, NodeClient client) throws IOException {
|
|
||||||
String id = request.param("id");
|
|
||||||
|
|
||||||
GetStoredScriptRequest getRequest = new GetStoredScriptRequest(id, Script.DEFAULT_TEMPLATE_LANG);
|
|
||||||
|
|
||||||
return channel -> client.admin().cluster().getStoredScript(getRequest, new RestBuilderListener<GetStoredScriptResponse>(channel) {
|
|
||||||
@Override
|
|
||||||
public RestResponse buildResponse(GetStoredScriptResponse response, XContentBuilder builder) throws Exception {
|
|
||||||
builder.startObject();
|
|
||||||
builder.field(_ID_PARSE_FIELD.getPreferredName(), id);
|
|
||||||
|
|
||||||
builder.field(StoredScriptSource.LANG_PARSE_FIELD.getPreferredName(), Script.DEFAULT_TEMPLATE_LANG);
|
|
||||||
|
|
||||||
StoredScriptSource source = response.getSource();
|
|
||||||
boolean found = source != null;
|
|
||||||
builder.field(FOUND_PARSE_FIELD.getPreferredName(), found);
|
|
||||||
|
|
||||||
if (found) {
|
|
||||||
builder.field(StoredScriptSource.TEMPLATE_PARSE_FIELD.getPreferredName(), source.getSource());
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.endObject();
|
|
||||||
|
|
||||||
return new BytesRestResponse(found ? RestStatus.OK : RestStatus.NOT_FOUND, builder);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,66 +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 java.io.IOException;
|
|
||||||
|
|
||||||
import org.elasticsearch.action.admin.cluster.storedscripts.PutStoredScriptRequest;
|
|
||||||
import org.elasticsearch.client.node.NodeClient;
|
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
|
||||||
import org.elasticsearch.common.logging.DeprecationLogger;
|
|
||||||
import org.elasticsearch.common.logging.Loggers;
|
|
||||||
import org.elasticsearch.common.settings.Settings;
|
|
||||||
import org.elasticsearch.rest.BaseRestHandler;
|
|
||||||
import org.elasticsearch.rest.RestController;
|
|
||||||
import org.elasticsearch.rest.RestRequest;
|
|
||||||
import org.elasticsearch.rest.action.AcknowledgedRestListener;
|
|
||||||
import org.elasticsearch.script.Script;
|
|
||||||
import org.elasticsearch.script.TemplateScript;
|
|
||||||
|
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.POST;
|
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.PUT;
|
|
||||||
|
|
||||||
public class RestPutSearchTemplateAction extends BaseRestHandler {
|
|
||||||
|
|
||||||
private static final DeprecationLogger DEPRECATION_LOGGER = new DeprecationLogger(Loggers.getLogger(RestPutSearchTemplateAction.class));
|
|
||||||
|
|
||||||
public RestPutSearchTemplateAction(Settings settings, RestController controller) {
|
|
||||||
super(settings);
|
|
||||||
|
|
||||||
controller.registerAsDeprecatedHandler(POST, "/_search/template/{id}", this,
|
|
||||||
"The stored search template API is deprecated. Use stored scripts instead.", DEPRECATION_LOGGER);
|
|
||||||
controller.registerAsDeprecatedHandler(PUT, "/_search/template/{id}", this,
|
|
||||||
"The stored search template API is deprecated. Use stored scripts instead.", DEPRECATION_LOGGER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return "put_search_template_action";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
|
|
||||||
String id = request.param("id");
|
|
||||||
BytesReference content = request.requiredContent();
|
|
||||||
|
|
||||||
PutStoredScriptRequest put = new PutStoredScriptRequest(id, Script.DEFAULT_TEMPLATE_LANG, TemplateScript.CONTEXT.name,
|
|
||||||
content, request.getXContentType());
|
|
||||||
return channel -> client.admin().cluster().putStoredScript(put, new AcknowledgedRestListener<>(channel));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -12,69 +12,6 @@
|
||||||
|
|
||||||
- match: { nodes.$master.modules.0.name: lang-mustache }
|
- match: { nodes.$master.modules.0.name: lang-mustache }
|
||||||
|
|
||||||
---
|
|
||||||
"Stored template":
|
|
||||||
- skip:
|
|
||||||
features: "warnings"
|
|
||||||
|
|
||||||
- do:
|
|
||||||
warnings:
|
|
||||||
- "The stored search template API is deprecated. Use stored scripts instead."
|
|
||||||
put_template:
|
|
||||||
id: "1"
|
|
||||||
body: { "template": { "query": { "match_all": {}}, "size": "{{my_size}}" } }
|
|
||||||
- match: { acknowledged: true }
|
|
||||||
|
|
||||||
- do:
|
|
||||||
warnings:
|
|
||||||
- "The stored search template API is deprecated. Use stored scripts instead."
|
|
||||||
get_template:
|
|
||||||
id: 1
|
|
||||||
- match: { found: true }
|
|
||||||
- match: { lang: mustache }
|
|
||||||
- match: { _id: "1" }
|
|
||||||
- match: { template: /.*query\S\S\S\Smatch_all.*/ }
|
|
||||||
|
|
||||||
- do:
|
|
||||||
warnings:
|
|
||||||
- "The stored search template API is deprecated. Use stored scripts instead."
|
|
||||||
catch: missing
|
|
||||||
get_template:
|
|
||||||
id: 2
|
|
||||||
- match: { found: false }
|
|
||||||
- match: { lang: mustache }
|
|
||||||
- match: { _id: "2" }
|
|
||||||
|
|
||||||
- do:
|
|
||||||
warnings:
|
|
||||||
- "The stored search template API is deprecated. Use stored scripts instead."
|
|
||||||
delete_template:
|
|
||||||
id: "1"
|
|
||||||
- match: { acknowledged: true }
|
|
||||||
|
|
||||||
- do:
|
|
||||||
warnings:
|
|
||||||
- "The stored search template API is deprecated. Use stored scripts instead."
|
|
||||||
catch: missing
|
|
||||||
delete_template:
|
|
||||||
id: "non_existing"
|
|
||||||
|
|
||||||
- do:
|
|
||||||
warnings:
|
|
||||||
- "The stored search template API is deprecated. Use stored scripts instead."
|
|
||||||
catch: request
|
|
||||||
put_template:
|
|
||||||
id: "1"
|
|
||||||
body: { "template": { "query": { "match{{}}_all": {}}, "size": "{{my_size}}" } }
|
|
||||||
|
|
||||||
- do:
|
|
||||||
warnings:
|
|
||||||
- "The stored search template API is deprecated. Use stored scripts instead."
|
|
||||||
catch: /failed\sto\sparse.*/
|
|
||||||
put_template:
|
|
||||||
id: "1"
|
|
||||||
body: { "template": { "query": { "match{{}}_all": {}}, "size": "{{my_size}}" } }
|
|
||||||
|
|
||||||
---
|
---
|
||||||
"missing body":
|
"missing body":
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
---
|
---
|
||||||
"Index data, search, and create things in the cluster state that we'll validate are there after the ugprade":
|
"Index data, search, and create things in the cluster state that we'll validate are there after the ugprade":
|
||||||
- skip:
|
|
||||||
features: warnings
|
|
||||||
|
|
||||||
- do:
|
- do:
|
||||||
indices.create:
|
indices.create:
|
||||||
index: test_index
|
index: test_index
|
||||||
|
@ -108,11 +105,12 @@
|
||||||
- match: { "acknowledged": true }
|
- match: { "acknowledged": true }
|
||||||
|
|
||||||
- do:
|
- do:
|
||||||
warnings:
|
put_script:
|
||||||
- 'The stored search template API is deprecated. Use stored scripts instead.'
|
|
||||||
put_template:
|
|
||||||
id: test_search_template
|
id: test_search_template
|
||||||
body:
|
body:
|
||||||
|
script:
|
||||||
|
lang: mustache
|
||||||
|
source:
|
||||||
query:
|
query:
|
||||||
match:
|
match:
|
||||||
f1: "{{f1}}"
|
f1: "{{f1}}"
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"delete_template": {
|
|
||||||
"documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/search-template.html",
|
|
||||||
"methods": ["DELETE"],
|
|
||||||
"url": {
|
|
||||||
"path": "/_search/template/{id}",
|
|
||||||
"paths": [ "/_search/template/{id}" ],
|
|
||||||
"parts": {
|
|
||||||
"id": {
|
|
||||||
"type" : "string",
|
|
||||||
"description" : "Template ID",
|
|
||||||
"required" : true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params" : {
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"body": null
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"get_template": {
|
|
||||||
"documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/search-template.html",
|
|
||||||
"methods": ["GET"],
|
|
||||||
"url": {
|
|
||||||
"path": "/_search/template/{id}",
|
|
||||||
"paths": [ "/_search/template/{id}" ],
|
|
||||||
"parts": {
|
|
||||||
"id": {
|
|
||||||
"type" : "string",
|
|
||||||
"description" : "Template ID",
|
|
||||||
"required" : true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params" : {
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"body": null
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"put_template": {
|
|
||||||
"documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/search-template.html",
|
|
||||||
"methods": ["PUT", "POST"],
|
|
||||||
"url": {
|
|
||||||
"path": "/_search/template/{id}",
|
|
||||||
"paths": [ "/_search/template/{id}" ],
|
|
||||||
"parts": {
|
|
||||||
"id": {
|
|
||||||
"type" : "string",
|
|
||||||
"description" : "Template ID",
|
|
||||||
"required" : true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params" : {
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"description" : "The document",
|
|
||||||
"required" : true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue