Skip to content

Commit cd2a69c

Browse files
authored
Add API calls to Get, Delete Query Rulesets (#96849)
1 parent c32cf06 commit cd2a69c

File tree

21 files changed

+677
-1
lines changed

21 files changed

+677
-1
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"query_ruleset.delete": {
3+
"documentation": {
4+
"url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-query-ruleset.html",
5+
"description": "Deletes a query ruleset."
6+
},
7+
"stability": "experimental",
8+
"visibility": "feature_flag",
9+
"feature_flag": "es.query_rules_feature_flag_enabled",
10+
"headers": {
11+
"accept": [
12+
"application/json"
13+
]
14+
},
15+
"url": {
16+
"paths": [
17+
{
18+
"path": "/_query_rules/{ruleset_id}",
19+
"methods": [
20+
"DELETE"
21+
],
22+
"parts": {
23+
"ruleset_id": {
24+
"type": "string",
25+
"description": "The unique identifier of the query ruleset to delete"
26+
}
27+
}
28+
}
29+
]
30+
}
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"query_ruleset.get": {
3+
"documentation": {
4+
"url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-query-ruleset.html",
5+
"description": "Returns the details about a query ruleset."
6+
},
7+
"stability": "experimental",
8+
"visibility": "feature_flag",
9+
"feature_flag": "es.query_rules_feature_flag_enabled",
10+
"headers": {
11+
"accept": [
12+
"application/json"
13+
]
14+
},
15+
"url": {
16+
"paths": [
17+
{
18+
"path": "/_query_rules/{ruleset_id}",
19+
"methods": [
20+
"GET"
21+
],
22+
"parts": {
23+
"ruleset_id": {
24+
"type": "string",
25+
"description": "The unique identifier of the query ruleset"
26+
}
27+
}
28+
}
29+
]
30+
}
31+
}
32+
}

rest-api-spec/src/main/resources/rest-api-spec/api/search_application.delete.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"search_application.delete": {
33
"documentation": {
4-
"url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-search-application.html",
4+
"url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-search-application.html",
55
"description": "Deletes a search application."
66
},
77
"stability": "experimental",

x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/200_query_ruleset_put.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11

2+
setup:
3+
- skip:
4+
version: " - 8.8.99"
5+
reason: Introduced in 8.9.0
26

37
---
48
'Create Query Ruleset':
@@ -33,6 +37,35 @@
3337

3438
- match: { result: 'created' }
3539

40+
- do:
41+
query_ruleset.get:
42+
ruleset_id: test-ruleset
43+
- match: { ruleset_id: test-ruleset }
44+
- match:
45+
rules:
46+
- rule_id: query-rule-id1
47+
type: pinned
48+
criteria:
49+
- type: exact
50+
metadata: query_string
51+
value: elastic
52+
actions:
53+
ids:
54+
- 'id1'
55+
- 'id2'
56+
- rule_id: query-rule-id2
57+
type: pinned
58+
criteria:
59+
- type: exact
60+
metadata: query_string
61+
value: kibana
62+
actions:
63+
docs:
64+
- '_index': 'test-index1'
65+
'_id': 'id3'
66+
- '_index': 'test-index2'
67+
'_id': 'id4'
68+
3669
---
3770
'Create Query Ruleset - Resource already exists':
3871
- do:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
setup:
2+
- skip:
3+
version: " - 8.8.99"
4+
reason: Introduced in 8.9.0
5+
- do:
6+
query_ruleset.put:
7+
ruleset_id: test-query-ruleset-to-delete
8+
body:
9+
ruleset_id: test-query-ruleset-to-delete
10+
rules:
11+
- rule_id: query-rule-id1
12+
type: pinned
13+
criteria:
14+
- type: exact
15+
metadata: query_string
16+
value: elastic
17+
actions:
18+
ids:
19+
- 'id1'
20+
- 'id2'
21+
22+
---
23+
"Delete Query Ruleset":
24+
- do:
25+
query_ruleset.delete:
26+
ruleset_id: test-query-ruleset-to-delete
27+
28+
- match: { acknowledged: true }
29+
30+
- do:
31+
catch: "missing"
32+
query_ruleset.get:
33+
ruleset_id: test-query-ruleset-to-delete
34+
35+
---
36+
"Delete Query Ruleset - Ruleset does not exist":
37+
- do:
38+
catch: "missing"
39+
query_ruleset.delete:
40+
ruleset_id: test-nonexistent-query-ruleset

x-pack/plugin/ent-search/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@
3030

3131
exports org.elasticsearch.xpack.application.search;
3232
exports org.elasticsearch.xpack.application.search.action;
33+
exports org.elasticsearch.xpack.application.rules;
3334
exports org.elasticsearch.xpack.application.rules.action;
3435
}

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/EnterpriseSearch.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,14 @@
5353
import org.elasticsearch.xpack.application.analytics.action.TransportPutAnalyticsCollectionAction;
5454
import org.elasticsearch.xpack.application.analytics.ingest.AnalyticsEventIngestConfig;
5555
import org.elasticsearch.xpack.application.rules.QueryRulesIndexService;
56+
import org.elasticsearch.xpack.application.rules.action.DeleteQueryRulesetAction;
57+
import org.elasticsearch.xpack.application.rules.action.GetQueryRulesetAction;
5658
import org.elasticsearch.xpack.application.rules.action.PutQueryRulesetAction;
59+
import org.elasticsearch.xpack.application.rules.action.RestDeleteQueryRulesetAction;
60+
import org.elasticsearch.xpack.application.rules.action.RestGetQueryRulesetAction;
5761
import org.elasticsearch.xpack.application.rules.action.RestPutQueryRulesetAction;
62+
import org.elasticsearch.xpack.application.rules.action.TransportDeleteQueryRulesetAction;
63+
import org.elasticsearch.xpack.application.rules.action.TransportGetQueryRulesetAction;
5864
import org.elasticsearch.xpack.application.rules.action.TransportPutQueryRulesetAction;
5965
import org.elasticsearch.xpack.application.search.SearchApplicationIndexService;
6066
import org.elasticsearch.xpack.application.search.action.DeleteSearchApplicationAction;
@@ -139,6 +145,8 @@ protected XPackLicenseState getLicenseState() {
139145
);
140146

141147
if (QUERY_RULES_FEATURE_FLAG.isEnabled()) {
148+
actionHandlers.add(new ActionHandler<>(DeleteQueryRulesetAction.INSTANCE, TransportDeleteQueryRulesetAction.class));
149+
actionHandlers.add(new ActionHandler<>(GetQueryRulesetAction.INSTANCE, TransportGetQueryRulesetAction.class));
142150
actionHandlers.add(new ActionHandler<>(PutQueryRulesetAction.INSTANCE, TransportPutQueryRulesetAction.class));
143151
}
144152

@@ -176,6 +184,8 @@ public List<RestHandler> getRestHandlers(
176184
);
177185

178186
if (QUERY_RULES_FEATURE_FLAG.isEnabled()) {
187+
restHandlers.add(new RestDeleteQueryRulesetAction(getLicenseState()));
188+
restHandlers.add(new RestGetQueryRulesetAction(getLicenseState()));
179189
restHandlers.add(new RestPutQueryRulesetAction(getLicenseState()));
180190
}
181191

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/rules/QueryRule.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import java.io.IOException;
2626
import java.util.List;
27+
import java.util.Locale;
2728
import java.util.Map;
2829
import java.util.Objects;
2930

@@ -57,6 +58,11 @@ public static QueryRuleType queryRuleType(String type) {
5758
}
5859
throw new IllegalArgumentException("Unknown QueryRuleType: " + type);
5960
}
61+
62+
@Override
63+
public String toString() {
64+
return name().toLowerCase(Locale.ROOT);
65+
}
6066
}
6167

6268
/**

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/rules/QueryRuleCriteria.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.elasticsearch.xcontent.XContentType;
2424

2525
import java.io.IOException;
26+
import java.util.Locale;
2627
import java.util.Objects;
2728

2829
import static org.elasticsearch.xcontent.ConstructingObjectParser.constructorArg;
@@ -43,6 +44,11 @@ public static CriteriaType criteriaType(String criteriaType) {
4344
}
4445
throw new IllegalArgumentException("Unknown CriteriaType: " + criteriaType);
4546
}
47+
48+
@Override
49+
public String toString() {
50+
return name().toLowerCase(Locale.ROOT);
51+
}
4652
}
4753

4854
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
package org.elasticsearch.xpack.application.rules.action;
9+
10+
import org.elasticsearch.action.ActionRequest;
11+
import org.elasticsearch.action.ActionRequestValidationException;
12+
import org.elasticsearch.action.ActionType;
13+
import org.elasticsearch.action.support.master.AcknowledgedResponse;
14+
import org.elasticsearch.common.Strings;
15+
import org.elasticsearch.common.io.stream.StreamInput;
16+
import org.elasticsearch.common.io.stream.StreamOutput;
17+
18+
import java.io.IOException;
19+
import java.util.Objects;
20+
21+
import static org.elasticsearch.action.ValidateActions.addValidationError;
22+
23+
public class DeleteQueryRulesetAction extends ActionType<AcknowledgedResponse> {
24+
25+
public static final DeleteQueryRulesetAction INSTANCE = new DeleteQueryRulesetAction();
26+
public static final String NAME = "cluster:admin/xpack/query_rules/delete";
27+
28+
private DeleteQueryRulesetAction() {
29+
super(NAME, AcknowledgedResponse::readFrom);
30+
}
31+
32+
public static class Request extends ActionRequest {
33+
private final String rulesetId;
34+
35+
public Request(StreamInput in) throws IOException {
36+
super(in);
37+
this.rulesetId = in.readString();
38+
}
39+
40+
public Request(String rulesetId) {
41+
this.rulesetId = rulesetId;
42+
}
43+
44+
@Override
45+
public ActionRequestValidationException validate() {
46+
ActionRequestValidationException validationException = null;
47+
48+
if (Strings.isNullOrEmpty(rulesetId)) {
49+
validationException = addValidationError("ruleset_id missing", validationException);
50+
}
51+
52+
return validationException;
53+
}
54+
55+
public String rulesetId() {
56+
return rulesetId;
57+
}
58+
59+
@Override
60+
public void writeTo(StreamOutput out) throws IOException {
61+
super.writeTo(out);
62+
out.writeString(rulesetId);
63+
}
64+
65+
@Override
66+
public boolean equals(Object o) {
67+
if (this == o) return true;
68+
if (o == null || getClass() != o.getClass()) return false;
69+
Request that = (Request) o;
70+
return Objects.equals(rulesetId, that.rulesetId);
71+
}
72+
73+
@Override
74+
public int hashCode() {
75+
return Objects.hash(rulesetId);
76+
}
77+
}
78+
79+
}

0 commit comments

Comments
 (0)