mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-24 17:09:48 +00:00
Painless Context Doc: Add min should match example (#35423)
This commit is contained in:
parent
501c03e529
commit
a8833b097b
@ -25,4 +25,52 @@ results.
|
||||
|
||||
*API*
|
||||
|
||||
The standard <<painless-api-reference, Painless API>> is available.
|
||||
The standard <<painless-api-reference, Painless API>> is available.
|
||||
|
||||
*Example*
|
||||
|
||||
To run this example, first follow the steps in
|
||||
<<painless-context-examples, context examples>>.
|
||||
|
||||
Imagine that you want to find seats to performances by your favorite
|
||||
actors. You have a list of favorite actors in mind, and you want
|
||||
to find performances where the cast includes at least a certain
|
||||
number of them. `terms_set` query with `minimum_should_match_script`
|
||||
is a way to accomplish this. To make the query request more configurable,
|
||||
you can define `min_actors_to_see` as a script parameter.
|
||||
|
||||
To ensure that the parameter `min_actors_to_see` doesn't exceed
|
||||
the number of favorite actors, you can use `num_term`s to get
|
||||
the number of actors in the list and `Math.min` to get the lesser
|
||||
of the two.
|
||||
|
||||
[source,Painless]
|
||||
----
|
||||
Math.min(params['num_terms'], params['min_actors_to_see'])
|
||||
----
|
||||
|
||||
The following request finds seats to performances with at least
|
||||
two of the three specified actors.
|
||||
|
||||
[source,js]
|
||||
----
|
||||
GET seats/_search
|
||||
{
|
||||
"query" : {
|
||||
"terms_set": {
|
||||
"actors" : {
|
||||
"terms" : ["smith", "earns", "black"],
|
||||
"minimum_should_match_script": {
|
||||
"source": "Math.min(params['num_terms'], params['min_actors_to_see'])",
|
||||
"params" : {
|
||||
"min_actors_to_see" : 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
----
|
||||
// CONSOLE
|
||||
// TEST[skip: requires setup from other pages]
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
|
||||
|
||||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
@ -396,5 +397,34 @@ public class ContextExampleTests extends ScriptTestCase {
|
||||
params, true);
|
||||
assertTrue(result);
|
||||
}
|
||||
|
||||
|
||||
// Use script_fields API to add two extra fields to the hits
|
||||
/*
|
||||
curl -X GET localhost:9200/seats/_search
|
||||
{
|
||||
"query" : {
|
||||
"terms_set": {
|
||||
"actors" : {
|
||||
"terms" : ["smith", "earns", "black"],
|
||||
"minimum_should_match_script": {
|
||||
"source": "Math.min(params['num_terms'], params['min_actors_to_see'])",
|
||||
"params" : {
|
||||
"min_actors_to_see" : 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
public void testMinShouldMatchScript() {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("num_terms", 3);
|
||||
params.put("min_actors_to_see", 2);
|
||||
|
||||
double result = (double) exec("Math.min(params['num_terms'], params['min_actors_to_see']);", params, true);
|
||||
assertEquals(2, result, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user