[[painless-min-should-match-context]] === Minimum should match context Use a Painless script to specify the {ref}/query-dsl-terms-set-query.html[minimum] number of terms that a specified field needs to match with for a document to be part of the query results. *Variables* `params` (`Map`, read-only):: User-defined parameters passed in as part of the query. `params['num_terms']` (`int`, read-only):: The number of terms specified to match with. `doc` (`Map`, read-only):: Contains the fields of the current document where each field is a `List` of values. *Return* `int`:: The minimum number of terms required to match the current document. *API* The standard <> is available. *Example* To run this example, first follow the steps in <>. 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]