Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/114168.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 114168
summary: Add a query rules tester API call
area: Relevance
type: enhancement
issues: []
2 changes: 2 additions & 0 deletions docs/reference/query-rules/apis/index.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Use the following APIs to manage query rulesets:
* <<put-query-rule>>
* <<get-query-rule>>
* <<delete-query-rule>>
* preview:[] <<test-query-ruleset>>

include::put-query-ruleset.asciidoc[]
include::get-query-ruleset.asciidoc[]
Expand All @@ -31,4 +32,5 @@ include::delete-query-ruleset.asciidoc[]
include::put-query-rule.asciidoc[]
include::get-query-rule.asciidoc[]
include::delete-query-rule.asciidoc[]
include::test-query-ruleset.asciidoc[]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are there other docs/guides where we want to refer to this API as a way to test/troubleshoot a query rules set? (can be done as a follow up)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to do that as a followup. This is being launched in preview right now, because there may be evolving requirements. I think when it gets closer to beta or GA is when it would be most helpful to promote this more, WDYT?


133 changes: 133 additions & 0 deletions docs/reference/query-rules/apis/test-query-ruleset.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
[role="xpack"]
[[test-query-ruleset]]
=== Test query ruleset

++++
<titleabbrev>Tests query ruleset</titleabbrev>
++++

Evaluates match criteria against a query ruleset to identify the rules that would match that criteria.

preview::[]

[[test-query-ruleset-request]]
==== {api-request-title}

`POST _query_rules/<ruleset_id>/_test`

[[test-query-ruleset-prereq]]
==== {api-prereq-title}

Requires the `manage_search_query_rules` privilege.

[[test-query-ruleset-path-params]]
==== {api-path-parms-title}

`<ruleset_id>`::
(Required, string)

[[test-query-rule-request-body]]
==== {api-request-body-title}

`match_criteria`::
(Required, object) Defines the match criteria to apply to rules in the given query ruleset.
Match criteria should match the keys defined in the `criteria.metadata` field of the rule.

[[test-query-ruleset-response-codes]]
==== {api-response-codes-title}

`400`::
The `ruleset_id` or `match_criteria` were not provided.

`404` (Missing resources)::
No query ruleset matching `ruleset_id` could be found.

[[test-query-ruleset-example]]
==== {api-examples-title}

To test a ruleset, provide the match criteria that you want to test against:

////

[source,console]
--------------------------------------------------
PUT _query_rules/my-ruleset
{
"rules": [
{
"rule_id": "my-rule1",
"type": "pinned",
"criteria": [
{
"type": "contains",
"metadata": "query_string",
"values": [ "pugs", "puggles" ]
}
],
"actions": {
"ids": [
"id1",
"id2"
]
}
},
{
"rule_id": "my-rule2",
"type": "pinned",
"criteria": [
{
"type": "fuzzy",
"metadata": "query_string",
"values": [ "rescue dogs" ]
}
],
"actions": {
"docs": [
{
"_index": "index1",
"_id": "id3"
},
{
"_index": "index2",
"_id": "id4"
}
]
}
}
]
}
--------------------------------------------------
// TESTSETUP

[source,console]
--------------------------------------------------
DELETE _query_rules/my-ruleset
--------------------------------------------------
// TEARDOWN

////

[source,console]
----
POST _query_rules/my-ruleset/_test
{
"match_criteria": {
"query_string": "puggles"
}
}
----

A sample response:

[source,console-result]
----
{
"total_matched_rules": 1,
"matched_rules": [
{
"ruleset_id": "my-ruleset",
"rule_id": "my-rule1"
}
]
}
----
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"query_rules.test": {
"documentation": {
"url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/test-query-ruleset.html",
"description": "Tests a query ruleset to identify the rules that would match input criteria"
},
"stability": "experimental",
"visibility": "public",
"headers": {
"accept": [
"application/json"
],
"content_type": [
"application/json"
]
},
"url": {
"paths": [
{
"path": "/_query_rules/{ruleset_id}/_test",
"methods": [
"POST"
],
"parts": {
"ruleset_id": {
"type": "string",
"description": "The unique identifier of the ruleset to test."
}
}
}
]
},
"body": {
"description": "The match criteria to test against the ruleset",
"required": true
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ static TransportVersion def(int id) {
public static final TransportVersion RRF_QUERY_REWRITE = def(8_758_00_0);
public static final TransportVersion SEARCH_FAILURE_STATS = def(8_759_00_0);
public static final TransportVersion INGEST_GEO_DATABASE_PROVIDERS = def(8_760_00_0);
public static final TransportVersion QUERY_RULE_TEST_API = def(8_761_00_0);

/*
* STOP! READ THIS FIRST! No, really,
Expand Down
Loading